OmniAICreator/Qiita-1.07M huggingface dataset:
ユニークなヒント: iTunes を使わずに Excel から iPhone に連絡先を転送/インポートする

<p><strong>要約/概要: </strong>もう一度言いますが、これには 2 つのアプローチがあります。手動の方法と自動変換オプションです。まずは、自動ツールと Excel データを VCF に変換する手動の方法の両方を使用して、Excel の連絡先を iPhone にエクスポートする方法を学びましょう。</p>
<h2><strong>Excel データを手動で VCF 形式に変換する方法</strong></h2>
<p>手動手法を構成する 4 つのフェーズのそれぞれには、いくつかの異なるプロセスがあります。Excel を VCF に変換する手順を調べてみましょう。</p>
<h2><strong>Excel XLS/CSV ファイルを CSV 形式で保存するのが最初のステップです。</strong></h2>
<ul>
    <li>Microsoft Excel を開き、XLS または CSV ファイルを選択します。</li>
    <li>画面の左上隅にある「ファイル」オプションを選択した後、「名前を付けて保存」をクリックします。</li>
    <li>ドロップダウン オプションから「CSV」(形式) を選択し、情報を CSV ファイルとして保存します。</li>
    <li>その特定のファイル形式を使用して Excel ファイルを保存します。</li>
</ul>
<h3><strong>ステップ2: Gmailを使用してCSVファイルをインポートする</strong></h3>
<ul>
    <li>Gmail アカウントにログインしたら、画面の右上隅にある 9 つのドットをクリックして [連絡先] を選択します。</li>
    <li>前の 9 つのドットのアイコンの下にある [インポート] アイコンをクリックします。</li>
    <li>変換された CSV ファイルを見つけて [開く] ボタンをクリックして選択します。</li>
    <li>ファイルを Gmail にインポートするには、[インポート] オプションを選択します。</li>
    <li>すべての連絡先は Gmail に保存されます。</li>
</ul>
<h3><strong>ステップ3: GmailからvCardにファイルをエクスポートする</strong></h3>
<ul>
    <li>Gmail にログインした後、[連絡先] に移動し、画面の右上隅にあるエクスポート アイコンを選択します。</li>
    <li>連絡先ファイルを vCard 形式でエクスポートするには、今すぐエクスポート アイコンをクリックします。</li>
    <li>手順が完了すると、ファイルがローカル マシンに保存されます。エクスポートが完了するまでお待ちください。</li>
</ul>
<h3><strong>ステップ 4: iPhone を開いて vCard ファイルをインポートします。</strong></h3>
<ul>
    <li>電話の連絡先のインポート/エクスポート オプションを探すか、そこに移動します。</li>
    <li>オプションとして「ストレージからインポート」を選択します。</li>
    <li>VCF ファイルをインポートするには、使用するファイルまたは Gmail アカウントを選択します。</li>
    <li>選択後、インポート手順が自動的に開始されます。</li>
    <li>一定の制限はありますが、この方法では Excel ファイルを VCF 形式に変換できます。これについては後で説明します。</li>
</ul>
<h3><strong>エラーのない方法で Excel の連絡先を iPhone に変換する方法</strong></h3>
<p>現在、Excel の連絡先を iPhone に変換する最も安全で効果的な方法を探している人はたくさんいますが、選択肢が多すぎて混乱してしまいます。<strong>DataVare アドレス帳管理ツールを使用して</strong> <a target="_blank" rel="noopener noreferrer" href="https://www.datavare.com/jp/address.html"><strong>iTunes を使用せずに Excel から iPhone に連絡先をドリフト/インポート</strong></a> する最も効果的で安全な方法を提供したいと思います。このプログラムは、多くの Excel 連絡先を iPhone にエクスポートできます。変換プロセスが開始すると、データが削除される可能性はありません。このユーティリティの追加機能を確認するには、プログラムの無料デモ版をダウンロードしてください。</p>
<h3><strong>自動化手法の利点</strong></h3>
<ul>
    <li><strong>時間効率</strong>: ステップ数が少ないため、このツールは非常に効果的で効率的なソフトウェアです。</li>
    <li><strong>一括処理:</strong> このソフトウェアでは、各ファイルを個別に処理するか、ファイルデータ全体を一度に処理するかを選択できます。</li>
    <li><strong>フィールド マッピングの許可</strong>: フィールド マッピングのこの機能により、ユーザーは必要に応じてデータ内のフィールドをマッピングできるため、非常に効果的なツールになります。</li>
    <li><strong>マルチデバイス整合性</strong>: このプログラムは、Mac、Android、iPhone などの一部のオペレーティング システムとデバイスに適しています。</li>
    <li><strong>プライバシー保護:</strong> 変換を完了して Excel の連絡先を iPhone にインポートすると、変換したデータは一切使用されません。その結果、クライアントはこの製品を信頼して使用できます。</li>
    <li>Excel ファイルを VCF 形式に変換する手動および自動の方法がわかったので、これらの手法を使用して Excel の連絡先を iPhone にエクスポートする方法を見てみましょう。</li>
</ul>
<h3><strong>終わりに</strong></h3>
<p>この提案は、使いやすさ、手動の方法に比べて手順が少ないこと、成功率が高いことに直接関係しています。これがアドバイスです。理想的には、いくつかの疑問を解消し、Excel の連絡先を iPhone で共有する方法を理解するお手伝いをします。</p>
Pythonで文字列を復号化、暗号化するコードを作ってみた

今回は、Pythonを使い、アルファベットの文字列を暗号化したり、逆に復号化したりするコードを作りました。

Encodeは、データを一定の規則に基づいて変換することです。
日本語では、符号化のことです。
Decodeは、符号化されたデータを元の形に戻すことです。
日本語では、復号化のことです。

### 作成したコード

``` 
alphabet = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 
            'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'a', 'b', 'c', 'd', 
            'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 
            't', 'u', 'v', 'w', 'x', 'y', 'z']
direction = input("Type 'encode' to encrypt, type 'decode' to decrypt:\n")
text = input("Type your message:\n".lower())
shift = int(input("Type your shift number:\n"))

def encrypt(plain_text , shift_amount):
  cipher_text = ""
  for letter in plain_text:
    position = alphabet.index(letter)
    new_position = position + shift_amount
    new_letter = alphabet[new_position]
    cipher_text += new_letter
  print (f"The encoded text is {cipher_text}")
encrypt(plain_text = text, shift_amount = shift)

def decrypt(plain_text, shift_amount):
  cipher_text = ""
  for letter in plain_text:
    position = alphabet.index(letter)
    new_position = position - shift_amount
    new_letter = alphabet[new_position]
    cipher_text += new_letter
  print (f"The decoded text is {cipher_text}")
decrypt(plain_text = text, shift_amount = shift)
```
### Encodeを使った時の出力例
``` 
Type 'encode' to encrypt, type 'decode' to decrypt:
encode
type your message:
paris
Type your shift number:
5
The encoded text is ufwnx
```
ここでは、"paris"という文字列を暗号化してみます。
shift number を5にした場合、"ufwnx"と出力されます。

### Decodeを使った時の出力例
```
Type 'encode' to encrypt, type 'decode' to decrypt:
decode
type your message:
japan
Type your shift number:
5
The decoded text is evkvi
```
ここでは、"japan"という文字列を復号化してみます。
shift numberを5にした場合、"evkvi"と出力されます。

このように、Encode、Decodeを使えば、文字列を復号化や暗号化できることができます。
皆さんもスキマ時間にこのプログラムコードを参考にして、文字列を複合化や暗号化してみてはいかがでしょうか。
Pythonライブラリのパスを取得してプログラムで使う

# Introduction
SudachiとかMecabとかで使う辞書を指定するときに、毎回ライブラリのパスコマンドで調べてとってくるの面倒すぎない…？
と思ったのでそもそもパス指定なんてライブラリの場所さえわかればコードで完結するよねと言うお話。
ライブラリのパスを何らかの理由で指定しなきゃいけないときに便利。

# 結論
```python:get_libraryPath.py
import sudachipy

sudachipy.__path__
# ['/Users/(省略)/lib/python3.11/site-packages/sudachipy']
# pathだけ欲しい時は、sudachipy.__path__[0]

sudachipy.__name__
# /Users/(省略)/lib/python3.11/site-packages/sudachipy/__init__.py
```

多分任意のライブラリでできるが、osとかcsvとかはos.pyとかだったみたいで、__path__だと取れなかった。標準で入れてるやつがダメなのかと思ったけどtkinterは取れたので基準が不明。ディレクトリだと取れるんかな？
【TypeScript】Recordって何？[key: string]との違いは？

# Recordとは？

簡単に言うとインデックス型([key: string])やMapと同じくkeyValueオブジェクトの型です。

しかし[key: string]やMapよりも直感的に型付けすることができます。

```tsx
let a: Record<string, number>;

let b: { [K: string]: number };
let c: Map<string, number>;
```

## 具体的な型付け方法

Key側に設定できる型はstring, number, symbolとその3種類のリテラルになります。

またvalue側に設定できる型はなんでもできます。

```tsx
let a: Record<string, number>; // OK
let b: Record<number, number>; // OK
let c: Record<symbol, number>; // OK;
let d: Record<"あ" | "い" | "う", number>; // OK

type Human = {
  name: string;
}
let e: Record<string, Human>; // OK
let e: Record<Human, number>; // NG
```

# インデックス型([key: string])と違い

Keyに対してリテラルを設定できるようになっています。

```tsx
// OK
let a: Record<"あ" | "い" | "う", number>; 

// NG An index signature parameter type cannot be a literal type or generic type. Consider using a mapped object type instead.
let b: { [key: "あ" | "い" | "う"]: number}; 
```
docker-composeいろいろ

## TL;DR

- `docker compose` 設定ファイル名は `compose.yaml` を使え
- トップレベルの `version` は意味がないので書かない・削除する
(2024年6月時点）

## 「docker-compose」という表記

タイトル、「docker-compose」というコマンドは、composeがdockerのサブコマンドとなったので、正しくは「docker compose」であるが、「docker compose」と書くと一つのものとして認識されない。困った。2023年3月で「docker-compose」というコマンドは終わったらしい。（まだ使えるけどね）

## 「docker-compose.yml は非推奨」という噂

は嘘らしい。というか、実際に一度非推奨っぽい表記がされたけれど、すぐに引っ込められて今はその記述はないらしい。

### 日本語のドキュメントではまだ「docker-compose.yml」

https://docs.docker.jp/compose/compose-file/compose-file-v3.html

`Compose ファイルのデフォルトのパスは ./docker-compose.yml です。`

という表記があるので、「docker-compose.yml」なのでは？と思ってしまいますが。

### 英語のドキュメントでは compose.yaml が "好ましい"

https://docs.docker.com/compose/compose-application-model/

```
The default path for a Compose file is compose.yaml (preferred) or compose.yml that is placed in the working directory.
Compose also supports docker-compose.yaml and docker-compose.yml for backwards compatibility of earlier versions.
If both files exist, Compose prefers the canonical compose.yaml.
```

preferred（好ましい）のは、 `compose.yaml` 。
`compose.yml` も使用可だが、両方ある場合は `yaml` の方が優先される。
`docker-compose.yaml(yml)` は後方互換性のために残している。

## トップレベルの version は必須でないのはホント

むしろトップレベルに version を書いていると、

```shell
WARN[0000] docker-compose.yml: `version` is obsolete
```

とワーニングメッセージが表示される。

`obsolete` は `廃止` で、ドキュメントを見ると「(Optional)」という表記で違和感を覚える。
ただ、最近のバージョンでは「書いてあっても見てないよ」（意訳）ということらしいので、まったく参照されていないのであれば消した方が良さそうです。
nRF5340 にて、OPENTHREAD と ETHERNETを利用する

下記記事の続き。

https://qiita.com/Akihiro-Sakaniwa/items/9b38d042ca19c85ec834

NCS2.6.1にて、
CONFIG_L2_OPENTHREAD と CONFIG_L2_ETHERNETの両方を宣言すると、
Ethernetの動作や設定がおかしくなる症状に遭遇した。

試行錯誤してみたがこれと言った対処方法は見つけられなかったため、
以下のような方法にて、無理やり Ethernet を共存できるようにした。

・Ethernetの初期化は Openthread の Role　確定後に行う。
・パケットフィルタ機能を利用してEthernetのパケットを完全に無効にする。
・Ethernetは、RAWパケットで処理する。

# 以上
リストビューの「表示ラベルを編集」機能


Summer'24の新機能ですね

+ [リストビューの「表示ラベルを編集」機能について](https://trailhead.salesforce.com/ja/trailblazer-community/feed/0D54V00007akMJySAM)
+ [リストビューの「表示ラベルを編集」機能について](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007akMJ0)

英語版しかないですがリリースノートを発見！！＜－－－日本語化されてまいました.... 2025/04/15気付いた

https://help.salesforce.com/s/articleView?id=release-notes.rn_sales_features_core_record_labels.htm&release=250&type=5

プロファイルでタブが非表示になっていました。　表示したら出てきますね。

使い方によっては便利かもしれませんが... 運用ルールを決めないとグチャグチャになりそうな予感。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/0ba75f1c-bd64-d7fc-dc74-1f8b70e730e2.png)

Topicと違って、個人別に管理されるみたい。　英語なんで頭に入ってきませんでした。
各ユーザーは自分の表示ラベルセットを作成して管理します。

 Personal labels added to records are separate from Topics, which other users can see. 

# このボタンを消す

+ [Remove Edit labels button from the highlights panel in lightning record page](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007eqEXp)

:::note
Goto SETUP --> OBJECT MANAGER --> Your Object --> Page Layouts --> Edit

Remove the button from the section below.

Salesforce Mobile and Lightning Experience Actions

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/0a201baa-39b2-eb2f-ad34-6763d7bf1ab6.png)
:::

# 解答例

+ [何か商談のマイリストを作成する案や事例などはございませんでしょうか。](https://trailhead.salesforce.com/trailblazer-community/feed/0D5KX00000PYNMz)

:::note
リストビューの表示ラベルが使用できると思います。Topicと違って、個人別に管理できます。 

個人表示ラベルでレコードを簡単に整理して検索 
https://help.salesforce.com/s/articleView?id=release-notes.rn_sales_features_core_record_labels.htm&release=250&type=5

表示ラベルはプロファイルでタブがタブを隠すになっていると思いますので、表示するに設定してみてください。 

私のお気に入りというラベルを作って、取引先のリストビューでレコードを選択してみました。マイリストの代わりになると思います。 

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/0bac9a4f-952e-4d5c-8e7a-d8e08b477805.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/5af2a5b9-0106-436d-9539-400e32f612cd.png)
:::
DAIS2024　セッションレポート【 Databricks SQLによるデータウェアハウスのパフォーマンス、スケール、およびセキュリティ】

## はじめに
Databricksのイベント「Databricks Data + AI Summit 2024」において、行われたセッションを記事にしています。
本記事では、「DATA WAREHOUSING PERFORMANCE, SCALE AND SECURITY WITH DATABRICKS SQL」というセッションについてまとめ、Databricks SQLが提供するパフォーマンス、スケール、セキュリティのベストプラクティスについて詳しく解説します。


https://www.databricks.com/dataaisummit/session/data-warehousing-performance-scale-and-security-databricks-sql

ナレッジコミュニケーションではイベント開催に伴い、「生成AIの最新トレンドと業界別ビジネスインパクト」をコンセプトに最新アップデート情報やセッションレポートをお届けする特設サイトを公開しておりますのでぜひチェックしてください！

特設サイトURL：https://www.knowledgecommunication.jp/product/databricks-data-ai-summit-2024.html 


## ■パフォーマンスの向上
### AIエンジンによる最適化
Databricks SQLのAIエンジンは、データから学び、予測最適化を行います。これにより、テーブル、パーティション、データレイアウトの詳細な統計を収集し、ファイルサイズの最適化や不要なデータの削除を自動的に行います。

### データ取得とリキッドクラスタリング
データの取得プロセスでは、クラウドストレージからデータを迅速に取得するための計画が立てられます。リキッドクラスタリングと予測I/Oを活用することで、ポイントルックアップを迅速に行うことが可能です。

https://docs.databricks.com/ja/delta/clustering.html

### フォトンエンジン
フォトンエンジンは、インメモリで動作するベクトル化実行エンジンを用いて、クエリの高速化を実現します。GPUなどの最適化技術を利用して、コード変更なしにクエリを高速化できます。

https://docs.databricks.com/ja/compute/photon.html

### インテリジェントワークロード管理
多数のクエリが発生する場合、インテリジェントなワークロード管理機能が活躍します。サーバーレス機能を利用して、クエリのレイテンシーを保護し、オートスケーリングを行います。

## ■可観測性の向上
### システムテーブルを活用したコスト管理
Databricks SQLには4つのシステムテーブルがあり、これを活用してコストコントロールやリソース管理を行います。特定のクエリのパフォーマンス問題やユーザーエクスペリエンスの監視も行います。長時間稼働しているウェアハウスや週末に稼働しているウェアハウスについてアラートを設定し、異常なリソース使用を通知します。

## ■セキュリティの強化
### アクセスとガバナンス
シングルサインオン（SSO）を設定し、多要素認証（MFA）を有効にすることで、セキュリティを確保しながら簡単にアクセスを提供します。また、アイデンティティを同期させることで、ユーザーとツールのアクセス管理を簡素化します。データへのアクセス制御も行い、行レベルセキュリティやカラムレベルマスキングを実現します。

### ネットワークセキュリティ
プライベートリンクやIPアクセスリストを使用して、認証にネットワーク制御を追加します。また、サーバーレスコンピューティングがストレージやインターネットにアクセスする際のセキュリティも確保します。これにより、外部からの不正アクセスを防ぎ、データの安全性を高めます。

### コンプライアンス
Databricksは主要な認証を持ち、HIPAAやPCIなどの規制基準を満たすための設定を提供します。これにより、規制データを安全に処理するための対策が簡単に実装できます。コンプライアンスプロファイルを設定することで、必要な基準を自動的に満たすことができ、誤設定を防ぎます。


## ■Databricks Champion からのコメント
Databricks は Liquid クラスタリングや、Serverless などユーザが煩わしく感じる部分への対応がとても上手だと感じます。オールサーバレス化も発表されたので、セキュリティやコストを監視しつつ、ユーザはクラスタの存在を全く意識せずにエンジニアリングに没頭できることになりそうで非常に楽しみです。

## ■まとめ
Databricks SQLを活用することで、データウェアハウスのパフォーマンス、可観測性、セキュリティを向上させることができます。以下のポイントを実践することが重要です：


1. パフォーマンス：予測最適化を有効にし、リキッドクラスタリングを使用し、サーバーレスオートスケーリングを利用する。 
2. 可観測性：システムテーブルを使用してコストとパフォーマンスを監視し、必要なアラートを設定する。 
3. セキュリティ：SSOとMFAを設定し、アイデンティティを同期し、ネットワークセキュリティを強化する。また、コンプライアンス基準を満たす設定を行う。 

これらのベストプラクティスを実践することで、効率的で安全なデータウェアハウス運用を実現できます。
ChEMBLを用いてローカル化合物DBを爆速構築する

# はじめに
AI創薬を始めるためには、まずデータを用意しなくてはなりません。本記事では、オープンデータベースであるChEMBLを用いて、ローカルに化合物DBを構築する方法を紹介します。

# ChEMBLとは
ChEMBLは医薬品および開発化合物のオープンデータベースで、薬物開発や化学研究において非常に重要なツールです。

ChEMBLの概要は下記の通り。

**運営元**
* 欧州分子生物学研究所(EMBL)のバイオインフォマティクス研究所(EBI)

**保存されているデータ**
* 医薬品および開発化合物の薬物動態、薬活性等のデータ

**保守運用**
* 主にメディシナルケミストリ関連のジャーナルから手動で抽出
    * 抽出後に専門家によるチェック
* 3, 4か月に一度データ更新がある

**費用**
* 無料で検索、ダウンロードが可能

**その他**
* APIでもデータ取得可能
https://chembl.gitbook.io/chembl-interface-documentation/web-services/chembl-data-web-services

# 化合物データベースの構築
それでは、ChEMBLからデータをダウンロードしてローカルDBを構築してみましょう。

## 環境
動作検証した環境は下記の通り
* Windows 11 Pro
* Docker Desktop v4.15.0

## 手順
* データのダウンロード
以下のURLからデータをダウンロードできます。
https://ftp.ebi.ac.uk/pub/databases/chembl/ChEMBLdb/latest/

`chembl_XX_postgresql.tar.gz`をクリックしてデータをダウンロードします
![スクリーンショット 2024-06-09 155005.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/324032/9681d24c-ad2c-95b9-0912-c937b7be87cd.png)

* .tar.gzファイルの解凍
ファイルのダウンロードが完了したら下記コマンドで`.tar.gz`ファイルを解凍します
```
tar -xzvf chembl_34_postgresql.tar.gz
```

* PostgreSQL環境の構築
docker-composeを用いて、PostgreSQL環境を構築します。
Dockerfileを用いて構築しても良いですが、DBと合わせて解析用コンテナ(Python実行用)を構築することもあるのでdocker-composeで構築しています。

`docker-compose.yaml`を配置したディレクトリで、`docker-compose up`を実行します。

```docker-compose.yaml
version: "3.6"
services:
  db:
    image: postgres:14.2
    ports:
      - 5432:5432
    tty: true
    environment:
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: password
    volumes:
      - ./db:/var/lib/postgresql/data
```
* dmpファイルのインポート
PostgreSQLのコンテナに入り、dmpファイルをインポートします。


```shell
move ./chembl_34_postgresql.dmp ./db/chembl_34_postgresql.dmp (macの場合はmvコマンド)
docker exec -it [docker container id] bash
pg_restore -d postgres /var/lib/postgresql/data/chembl_data/chembl_34_postgresql.dmp -U postgres -O
```

* データの確認
dockerコンテナに入った後にpostgreSQLに接続し、テーブル一覧を確認します。
テーブルができていれば、インポートが完了しています。

```shell
psql -d postgres -U postgres
\dt;
```


# ChEMBLのデータ構造
ChEMBLdbのテーブル定義は下記URLの`chembl_34 Schema Documentation`で確認できます。
https://ftp.ebi.ac.uk/pub/databases/chembl/ChEMBLdb/latest/

しかし、テーブル数が多くてどのようなデータがあるか把握するのは大変なので、私が良く使うテーブルをこちらにまとめておきます。

* assays: 文献で報告されていた測定のリスト
* activities: 活性値やエンドポイント値など測定の結果
* compound_structures: SMILES等の化合物の構造情報
* target_dictionary: 化合物の標的のリスト。あるタンパク質に対する活性値を知りたい場合はそのタンパク質を標的とするactivitiesに絞り込みます

# 終わりに
本日はChEMBLを用いてローカルDBを構築する方法を紹介しました。

記事の内容が役に立ったという方は**いいね**や**ストック**をしていただけると励みになりますので、よろしくお願いします！

# 参考文献
https://www.ebi.ac.uk/chembl/

https://github.com/Mishima-syk/py4chemoinformatics/blob/master/ch04_database.asciidoc#chembl

https://cbi-society.org/home/documents/seminar/2009to12/CBI_Ikeda_511_d.pdf
[VSCode] Goの環境設定。Failed to find the "go" binary in either GOROOT() or PATH(...) を解決する

# 環境
- macOS Sonoma 14.4.1
- Apple　M1 Pro
- VSCode：1.90.1
    - Go for Visual Studio Code：v0.41.4
- `go1.22.4 darwin/arm64` installed by homebrew
- zsh
# 

もともとはJetBraisのGoLandを利用していたんですが、周囲でVSCode派が多く無料で利用できるので乗り換えてみることにしました。
GoのExtensionをインストールしていざ利用と思っていたところ以下のようなエラーダイアログがでて定義ジャンプなどの機能が使えなかったので解消のための設定を記録しておきます
## 遭遇したエラー
```
Failed to find the "go" binary in either GOROOT() or PATH(...). Check PATH, or Install Go and reload the window. If PATH isn't what you expected, see https://github.com/golang/vscode-go/issues/971
```
これなにかとういと、Goのパスが解決できないよってことなんですが...
goはHomebrewでインストール。デフォルトで使っていてexportなどは特に記載していない状況
```
❯ go env GOPATH
$HOME/go

❯ go env GOROOT
/opt/homebrew/Cellar/go/1.22.4/libexec
```
zshでHomebrewのPATHをexportしているはずなのになぜ…

## VSCodeの設定などを確認
VSCodeはデフォルトで/bin/shを使っているのでHomebrewなどのパスが通っていない状況でした
Terminalの設定を
`"terminal.integrated.defaultProfile.osx": "zsh"`で zsh にしてたので
exportされているもんだろうと思ってましたが、どうやら /bin/sh で起動して /bin/zsh を後で起動しているようですね

```
sh-3.2$ echo $SHELL
/bin/sh
sh-3.2$ which go
sh-3.2$
```

HomebrewのPATHを通すコマンドは `.zprofile` でしているので読み込まれなくて当たり前ですね
```
❯ cat .zprofile
eval "$(/opt/homebrew/bin/brew shellenv)"
```

## 解決していきましょう！
このエラーについてググってみると主に解説されている解決方法は
settings.jsonで`go.goroot`のPATHを指定するというもの。
私は `brew unlink && link` で　goのバージョンを切り替えて開発することがあるので、毎回これを設定し直すのはめんどくさいなと思いました。
ということで、/bin/sh でHomebrewのPATHを通すコマンド　を実行してあげられれば良さそうです。

```
❯ cat .profile
eval "$(/opt/homebrew/bin/brew shellenv)"
```
これでVSCodeを再起動
```
sh-3.2$ echo $PATH
/opt/homebrew/bin:/opt/homebrew/sbin:/usr/local/bin:/System/Cryptexes/App/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/local/bin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/bin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/appleinternal/bin:/Library/Apple/usr/bin
```
無事PATH通ってエラーが解消されました！定義ジャンプなどが利用できるようになります。
---
ローカルで構築したサーバーを一時的にHTTPSで外部に公開する方法：localtunnel

ローカルで構築したサーバーを、localtunnelを用いて一時的にHTTPSで外部に公開する方法。localtunnelを使うことで、簡単に外部からアクセス可能なURLを取得できる。

### 前提条件
Node.jsがインストールされていること


### ローカルサーバーを構築する
まずは、ローカルサーバーを構築する。
以下、具体例としてGoで実装した簡単なサーバーをローカル環境の8080番ポートで動かす。

```go:main.go
package main

import (
    "fmt"
    "net/http"
)

func handler(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintf(w, "Hello, World!")
}

func main() {
    http.HandleFunc("/", handler)
    fmt.Println("Starting server at port 8080")
    if err := http.ListenAndServe(":8080", nil); err != nil {
        fmt.Println(err)
    }
}
```
```shell:shell
go run main.go
```

### サーバーを外部に公開する
localtunnelを使用して、ローカルサーバーを外部に公開する。以下のコマンドをターミナルで実行。

```shell:shell
npx localtunnel --port 8080
```

実行すると、外部からアクセス可能なURLが表示される。
（例えば、https://unique-subdomain.loca.lt のような形式）

### まとめ
デモやデバッグ、あとwebhookのテストなんかでも使えるので便利。
現役高校生が考えるエンジニアとしてのプラン！！

# この記事について
Qiita Engineer Festa 2024 の 「自分が考える最高のエンジニアライフプランについて紹介しよう」キャンペーンの記事です。
Z世代の高校生がエンジニアを志望するに当たり、何を考えているのかを皆さんに共有するために執筆しました！

## この記事を書いている人

- 現役高校生
- モバイルアプリ・ゲームのフロントからバックエンドを作っている
- 中学3年生から勉強を始めた
- 高１で基本情報技術者試験合格
- 最近案件を少しづつ頂けるようになった


# Z世代の私が考えるエンジニアライフプラン

## 学校生活との両立

### 1. 学校の勉強を大切にする

IPAの試験を受けて気付いたことがあります。それは高校の**数学や国語、英語の勉強は超大切**であると！
プログラミングをする上でドキュメントは読みます。読解力を求められるとともに、英語力も必要です。
また論理的に考える過程や、アルゴリズムを理解するときには数学が必須です。
今話題のAIを完全に理解するには確率、グラフ理論、線形代数などんも知識がいります。数学は積み重ねの学問なので高校の授業を飛ばしてこれを勉強することはできません。
長期的な視点で考えると今の勉強をおろそかにしないことは将来のエンジニアとしての成長に繋がると考えています。

### 2. コンテストに積極的に参加する

この世には学生向けのプログラミングコンテストがたくさんあります。私は主に作品提出型のコンテストに参加しています。
夏休み期間中などに合わせて開催されていることが多いので非常に両立がしやすいです。
コンテストに参加することで周りの人がどのような技術スタックで何をテーマに作品を作っているのかが分かるので、自分はどこまで頑張れば良いのか認識することができます。
またコンテストの受賞歴があれば 推薦入試やAO,さらには就職活動にも有利に働くことがあるので学生の身とすると参加しない手はありません！

### 3. メリハリをつける

学校生活とエンジニアとしての活動を両立させるためには、時間管理が鍵となります。
私は１日単位で学校の勉強とプログラムの勉強をする日を決めて実行しています。
また自分のスマホに時間制限をかけるアプリを使って、無駄な時間を減らしその分を勉強に当てるようにしています。
自分はこの学問はいくら勉強しても足りないということに気がついたので、一日の無駄な時間をできるだけ減らすようにしました。

https://play.google.com/store/apps/details?id=com.burockgames.timeclocker&pcampaignid=web_share

## 学生の特典

### 1. 時間がある

学生としての最大の特典は、時間の余裕があることだと思います。
プログラムの仕事をしたいと考えても、Webなのかモバイルアプリなのか、Windowsアプリなのかプロットフォームは多様です。
さらにBtoBなのかBtoCなのか、その中でどのような物を作りたいかも重要になります。
これを瞬時に決めることは難しいことだと考えています。しかし、高校生は自分探しにうってつけの期間です。
全部作ってみて「これだ！！」といったものを見つけられます。

自分の場合はバックエンドが好きだということが分かったので次に何を勉強すれば良いのか見通せるようになりました。
今の時期に見つけられたことは大きなアドバンテージだと思います。

### 2. かわいがってもらえる

有り難いことに学生という身分ということだけで、周りのエンジニアさんから一目おいてもらえます。
普通だったらなかなか話せないような方とも話す機会が増えるので、自分の知識を広げることができます。
自分は様々な方とお話する中で自分の知らない技術の世界を知ることができ、大きく視野を広げることができました。

## 将来に向けて

### 1. 大学で情報系の学部に進学する

まず直近の課題として大学進学があります。
ここでコンピューターサイエンスの基礎の部分をしっかりと堅め、同時に具体的な技術を深めていきたいと考えています。

### 2. フロントエンドのスキルを磨く

私はバックエンドが好きですが、実際に動くアプリを作るにはフロントエンドは欠かせない。
しかし、大の美術音痴である私はデザインがめちゃくちゃ苦手です。
そこで人間の目に優しいデザインのルールを勉強することで、感覚ではなく理論でデザインを作ることができるようになりたいです。
これができれば夢のフルスタックエンジニアに一歩近づけるので絶対に自分のものにしたいです。

### 3. 案件を受けて経験を積む

最近、少しずつ案件を頂けるようになったことで私の世界の見方が変わりました。
正直お金をもらってプログラムを書くことは未だに抵抗はあります。納期までに終わらせることができるのか、自分の技術力は本当に大丈夫なのか、と不安がいっぱいでした。
しかし、あるアニメを見てからこの気持ちが少しマシになったので紹介します。

https://www.amazon.co.jp/gp/video/detail/B086H7NZLJ/ref=atv_dp_share_cu_r

このアニメの中で以下のセリフがありました。

>「仕事に責任を持つために、金を受け取るんだ。金は依頼した仕事の出来を保証させるためにあるんです。
>金を貰う以上、我々には仕事の出来を保証する義務が生じます。
>金を貰って責任を持つのと、金をもらわず責任とらないのと、どっちが健全か言ってみろ。」

このセリフを聞いて、不安に思って堂々巡りになるのであれば、その分誠意を持って仕事をすることが大切だと気づきました。
これからも少しづつ案件を受けて、自分の技術力を高めるとともにビジネスの世界にも触れていきたいです。

# 今後勉強したいこと

今後勉強したいことは以下の通りです。

- フロントエンドの知見
- 見積もり
- ビジネスのコミュニケーション
- プロジェクトマネジメント

案件を受ける中で、自分には見積もりの力が足りていないことが分かりました。
またビジネスの交渉も全くの経験がないので、就職するまでにはこのスキルも身につけたいです。
そして最後に個人制作ばかりをしているので、プロジェクトマネジメントも経験したいです。
数回チーム制作をしたことがありますがどれも手探りであり、チームとしては貧弱であったと思います。

こうまとめてみると、高校生には経験することが難しいことばかりなのでこれらをどうやって身につけるかが課題だなあと感じます。
けれども高校生という身分を活かして、周りの人を頼ることで乗り越えていきたいです。

# さいごに

勉強するとまだまだ足りない部分がたくさんあることを痛感します。
しかし時間は多くあるので、焦らず一歩づつ進んでいきたいです。

ここまで読んでいただきありがとうございました！
いいねやRTで応援して頂けると大変嬉しいです！
話題のDream Machineを試してみた！

### 自己紹介

こんにちは！*よわよわエンジニア*のちゃったまです！
エンジニア歴8年になりますが、何も成長せず歳だけとって悲しいです！
最近ようやく学習意欲が出てきて、3流エンジニアになることを目指す日々です！
（現在4流）

本日は、X（旧Twitter）で話題の[Dream Machine](https://lumalabs.ai/dream-machine)のフリー版を試してみたので以下に記したいと思います！


### Dream Machine  試してみた


検索検索〜

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3221751/a9e0480e-3e67-992a-fa68-a653989cd13f.png)

「dr」まで打ったら候補に出てきた！
流行っているのがわかる。
<br>


こいつですね。
[「Luna Dream Machine」](https://lumalabs.ai/dream-machine)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3221751/8d70a8a7-0d60-2e55-2ddb-2229df8b9f18.png)

<br>

サイトに入ってみる。
おーなんかすごい面白そう。ディズニーっぽいね（語彙力）
右上の「Try Now」から入ってみる。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3221751/a4a051b1-c998-f9c5-9575-df48b08f2c42.png)

<br>

GoogleアカウントでSSOできる模様。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3221751/b45860cb-ee80-3380-2f9c-3e3460392429.png)


<br>

なんとなく怖いので、メインで使ってないアカウントで入ってみる。
バーの左にあるファイルアイコンをクリックして画像を選択！（D&Dはできなそう・・）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3221751/be05d4c1-2288-2de2-564a-c990cfc451a1.png)

<br>

選択した画像が小さく表示される。
バーの右下にある（↑）マークで送信する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3221751/b9b9e16d-bb77-8978-67f2-fdc085cc5776.png)


<br>
「Your Creations」というエリアが表示されて、ローディング中。
ぐるぐる。
「DREAMING...」ってのがいいね。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3221751/42a82ca6-4d30-5ef0-6040-4cea4a2c0c56.png)

<br>

約5分後、画面をリロードしてみる。
お、できたっぽい！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3221751/0930b241-9330-6b09-a54c-8e3e5044797a.png)


<br>

動画サムネイルをクリックすると・・
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3221751/37097dd9-05d3-16d2-b8aa-90d9dc792c0e.png)


おー！
なんかそれっぽい動画になってる！
少しAI風味にアニメ化してるw


<br>
という感じで簡単に生成できました！

<br>

### 体感

なかなか面白かったので適当な画像で10件ほど試してみました。
以下、使ってみた体感です。
<br>

- 日本人の顔が突如外人化するw
蓄積データにアジア系の人種が少ないのかな？ 
<br>

- 記念写真、集合写真だと自然になる率が高い気がする
<br>


- 最初は5分くらいで生成できていたのが、使用回数が増える毎に遅くなる。
フリー版は初回ユーザー優先？

<br>

- 10件までの制限があるけど、24時間たてばまた10件分使えるようになる。

<br>

- 景色の生成はかなり自然！本当にありそうな建物だったり、景色になる。

### 感想
なかなか面白いツールだと思いました！
親と旅行に行った時の写真で動画を生成して、ネタにしてましたw
気軽に遊べて、話のネタにもなるので良いですね！
こういったエンタメ性の強い生成AIが、他にも出てきそうですね！
Cloudflare Zero TrustでSSH接続の備忘録

**CLIでやったほうが楽だったので、下記に書き直した**

https://qiita.com/kiyotaman/items/d04d1aa9dfcc451a7b2e

## はじめに

自宅にサーバーを構築したので、リモートから自宅サーバーへアクセスする時など、Cloudflare Zero Trustが便利すぎる。sshでログインできて、自宅のサーバーを踏み台に色々とできるので、助かる。ということで、ssh接続のざっと記録をする。

どの設定がどれと連動しているか？どの設定が何に依存んしているか？何を設定すべきか？など理解するのに時間がかかったが、一通り把握はできたかなと思う。Policyの設定などが何を設定すればよいかなど、ちょっとわかりにくいところもあったけど、何とか自宅にリモートから接続できるようになった。固定IPやルーターの設定などくらべると、圧倒的に、使いやすいなといった印象。

自宅のサーバーではなく、クラウドのプライベートなネットワークへのアクセスにも使えたり、色々な場面で約だったり、アクセス制御も結構色々とできそうなので、業務でも十分使える機能かなと思う。今後も、多分使い続ける予定。

## 設定の大まかな流れ

1. Networks > Tunnelを設定（DNSに自動でPorxyが登録される）
1. Access > Access Groupsを設定（ポリシーは、Defalut / Everyone）
1. Applicationsの登録（ポリシーは、Access Groupで設定したデフォルトを使う）
1. Service Auth > SSHで、Generate certificate
1. SSHサーバーの設定をする
1. SSHクライアントで接続し、認証URLから認証する

## Tunnelsの設定

**Create a tunnelを選択**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18766/c13bd5b7-1d52-825b-a32f-84da01899478.png)

**Cloudflaredを選択**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18766/48a6f981-cf3d-a33f-ec4e-8ca8e17c598f.png)

**Tunnel名を設定**

:::note info
自身の環境に合わせて、SSHが起動しているサーバーとサーバーへアクセスするクライアント側、両方にインストール
:::

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18766/a7aa12cb-390f-3c46-be40-011073f74423.png)

**ServerとClientの設定**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18766/f95739af-049f-7528-dc54-f84f91f8039e.png)

**Route tunnelの設定**

:::note info
Networks > Routesの設定でも変更はできる。Tunnelしたいローカル環境のネットワークの設定をする。
:::

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18766/a811ebaa-5cc5-727c-e9f6-c60919d3537c.png)


## Access > Access Groupsの設定
:::note info
先にAccess Groupの設定を終わらせておく
`+ Add a group`をクリックしてグループを追加
:::
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18766/10072631-fe9b-6e31-ea19-2de161756905.png)

:::note info
Defaultであればデフォルトチェック
:::

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18766/af37e6fe-167d-01e0-559b-bc1340460dd7.png)

:::note info
Define group criteriaは、とりあえずEveryoneを選んでおく
:::

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18766/c1335143-9f38-215d-70a7-662b693e0cc4.png)

## Applicationの登録

:::note info
Applicationの登録をしてService AuthのSSHの設定と連動させる準備をしておく。
:::

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18766/d8767864-0ece-bd64-81c7-2bb115767ad4.png)

### Self-hostedを選択

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18766/2e61356d-6f6f-c4db-7c62-911326351336.png)

### Policyの設定
:::note info
先ほど作ったGroupを設定する
:::

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18766/c681ad40-91db-3de8-ecbb-b93b65655e0d.png)


## Service Authの設定

:::note info
SSHを選んで、Generate certificateをクリック
:::

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18766/bac47aac-06e0-2e0e-f02a-eef4ae5ff806.png)


後は、SSHのサーバー側の設定クライアント側の設定を行い、SSHで接続して、承認URLが発行されるのでそれをクリックして認証を終え、無事に接続ができる。設定の流れに記した内容が続く。
Linuxで壊れたパーティションを修復

何年もOS停止をしていなかったシステムでOS起動時、下記メッセージでOS起動せず…
```
Checking root filesystem
fsck.ext3 /dev/<partition>: : Bad magic number in super-block while trying to open /dev/<partition>
（省略）
*** An error occurred during the file system check.
*** Dropping you to a shell; the system will reboot
*** when you leave the shell.
Give root passwrd for maintenance
(or type Control-D to continue):
```
指示通りfsckするとブロックサイズで不整合…
```
# fsck /dev/<partition>
The filesystem size (according to the superblock) is 2097152 blocks
The physical size of the device is 2096474 blocks
Either the superblock or the partition table is likely to be corrupt!
Abort? yes
```
一応、OS再起動したが事象かわらず…
mkfs.ext3コマンドでブロックサイズ（Block size）とスーパーブロックのバックアップが保存されている場所（Superblock backups）を調べる。
```
# mkfs.ext3 -n /dev/<partition>
mke2fs 1.35
Filesystem label=
OS type: Linux
Block size=1024 (log=2)　←ブロックサイズ
Fragment size=1024 (log=2)
<省略>
Superblock backups stored on blocks:
 32768, 98304, 163840, 2294912, 294912, 819200, 884736, 1605632　←スーパーブロックのバックアップが保存されている場所
```
次に、fsck.ext3コマンドでファイルシステムのチェックを行う。その際に、-bオプションでスーパーブロックバックアップの場所、-Bオプションでブロックサイズを指定する…
```
# fsck.ext3 -b 32768 -B 1024 /dev/<partition>
```
それでもダメだったので…
スーパーブロックを再作成してみるとOSは起動したがmountされていない…

```
# mke2fs -S /dev/<partition>
# mount /dev/<partition> <mount point>
mount: wrong fs type, bad option, bad superblock on <device name>,missing codepage or helper program, or other error
In some cases useful info is found in syslog - try 
dmesg | tail or so
```
dmesgには何も出力されてない…
ところが ext2 でなら mount 出来る…
```
# mount -t ext2 /dev/<partition> <mount point>
# umount  <mount point>
```
ということは journal が壊れたということか…
作り直してみよう。
先ず journal file を削除する。
```
# tune2fs -O ^has_journal  /dev/<partition>
```
再度 journal file を作る
```
# tune2fs -j /dev/<partition>
tune2fs 1.40.4
Creating journal inode: done
This filesystem will be automatically checked every -1 mounts or
0 days, whichever comes first. Use tune2fs -c or -i to override.
# mount -t ext3 /dev/<partition> <mount point>
```
ext3 で復活した…
後はリブートしてmountを再確認して完了♪

ちなみにLinux起動時の自動ファイルシステムチェックの間隔を変更する、無効にする方法も残しておきます。

Linuxではfsckを実行していない期間が長いと、起動時に自動ファイルシステムチェッックが行われる。
```
# tune2fs -l /dev/<partition>
Mount count:              3                   前回のfsckからマウントした回数
Maximum mount count:      24                  前回のfsckから この回数マウントしたら起動時にfsckを行う
Check interval:           15552000 (6 months) 前回のfsckから この期間経過したら起動時にfsckを行う。
```
チェックの頻度を変更
デフォルトでは、fsck は30回起動するたびにファイルシステムをチェックします (パーティションごとに別々にカウントされます)。
また、Check intervalが設定されている場合(デフォルトは6ヶ月)は、その期間が超えた際に次回起動時fsckが行われます。

マウント回数を変更する場合
```
# tune2fs -c 20  /dev/<partition>
```
fsck期間を変更する場合
```
# tune2fs -i 15552000  /dev/<partition>
```
単位は秒
ここで数値の後に d を付けると「日」となり、w は「週」、m は「月」となります。

またマウント回数、fsck期間ともに 0 を指定すると、起動時に自動でfsckは行われなくなります。

マウント回数の無効
```
# tune2fs -c 0 /dev/<partition>
Setting maximal mount count to -1
```

インターバルの無効
```
# tune2fs -i 0 /dev/<partition>
Setting interval between check 0 seconds
```

設定の確認
```
# tune2fs -l /dev/<partition>
Mount count:              3
Maximum mount count:      -1
Check interval:           0 (<none>)
```

この場合、手動でfsckを実行する必要があります。
エンジニアの「働きやすさ」と「やりがい」：最適なバランスの実現

エンジニアにとって、「働きやすさ」と「やりがい」は、どちらも仕事満足度を高め、モチベーションを維持するために欠かせない要素です。しかし、これらの要素を両立させることは、必ずしも簡単ではありません。

**「働きやすさ」と「やりがい」の重要性**

**1. エンジニアの離職率と労働環境**

近年、IT業界におけるエンジニアの離職率は高止まりしており、企業にとって大きな課題となっています。その理由の一つとして、**長時間労働**や**過度なプレッシャー**などが挙げられます。エンジニアは高い専門性を持つ人材であるため、人材流出は企業にとって大きな損失となります。

**2. 働きやすい環境と企業競争力**

一方、「働きやすさ」を重視した環境は、エンジニアの**モチベーション向上**や**創造性の発揮**につながります。また、優秀な人材の**獲得**や**定着**にも効果が期待できます。近年では、**ワークライフバランス**や**ダイバーシティ**への取り組みが盛んになっており、こうした取り組みは企業競争力強化にもつながります。

**3. やりがいのある仕事と成長**

「やりがい」のある仕事は、エンジニアにとって**成長**の機会となります。新しい技術を学び、自分のスキルを向上させることで、より大きな成果を上げることが可能になります。また、社会貢献につながる仕事に携わることで、**やりがい**や**充実感**を得ることができます。

**プロジェクトのフェーズと求められるバランス**

プロジェクトのフェーズによって、「働きやすさ」と「やりがい」の求められるバランスは異なります。

**1. 立上げ初期：迅速性と柔軟性が求められる**

プロジェクトの立上げ初期は、不確実性が高く、迅速な意思決定と問題解決が求められます。そのため、**変化に柔軟に対応できる人**や**問題解決能力が高い人**、**コミュニケーション能力が高い人**などが適任です。

こうした人材は、長時間労働やプレッシャーにもある程度耐えられる傾向があります。しかし、**裁量権**や**責任**を与えることで、より高いモチベーションを発揮することができます。

**2. 安定稼働期：効率性と協調性が求められる**

プロジェクトが安定稼働期に入ると、定常的な業務が多くなり、スケジュール通りにタスクを完了することが求められます。そのため、**責任感がある人**や**協調性がある人**、**丁寧な仕事ができる人**などが適任です。

こうした人材は、長時間労働よりも**ワークライフバランス**を重視する傾向があります。そのため、**フレックスタイム制**や**在宅勤務制度**などを導入することで、**働きやすさ**を確保することが重要です。

**適材適所の人材配置とチーム全体のバランス**

プロジェクトの成功には、**適材適所**の人材配置が不可欠です。「働きやすさ」と「やりがい」の両方を重視するのではなく、プロジェクトのフェーズごとに必要なスキルや経験を持つ人材をアサインすることが重要です。

**1. 個人の特性とキャリアプランの考慮**

人材配置を行う際には、個人の**特性**や**キャリアプラン**も考慮する必要があります。「働きやすさ」を重視する人材の中には、家族との時間を大切にする人や、副業・起業を目指す人などがいる可能性があります。一方、「やりがい」を重視する人材の中には、新しい技術を学びたい人や、大きなプロジェクトに挑戦したい人などがいる可能性があります。

**2. チーム全体のコミュニケーションと相互理解**

チーム全体として、「働きやすさ」と「やりがい」のバランスが取れていることも重要です。**ワークライフバランス**を重視する文化を醸成し、メンバー同士が互いを**尊重**し、**協力**し合える環境を作るようにしましょう。

**3. 定期的な振り返りと改善**

プロジェクトの進捗状況に合わせて、定期的に**振り返り**を行い、**必要に応じて人材配置や業務内容を調整**することが重要です。また、**アンケート**や**インタビュー**などを実施することで、メンバーの**意見**や**要望**を収集し、**改善**につなげることが重要です。

**まとめ**

エンジニアの「働きやすさ」と「やりがい」のバランスを実現するには、プロジェクトのフェーズごとに求められるバランスを理解し、適材適所の人材配置を行うことが重要です。チーム全体のバランスにも配慮し、メンバーが互いに尊重し、協力し合える環境を作ることが、プロジェクトの成功につながります。
GitHub Copilot 活用のための私的小技集

# はじめに
VSCodeでGitHub Copilotが使えるようになってから，かなりの時間がたちます．
Copilotにコーディングを補助してもらう中で，Copilotの "筋がよくなる" 自分なりのちょっとした小技が溜まってきたので記事にしようと思います．

# 関数名・変数名をちゃんと書く
任意のCopilotユーザが口を揃えて言っているので今更かもしれません．

競プロや個人開発ばかりしている人は忘れがちですが，大事なことです．

# 具体的な実装をする前に，したいことについてコメントをちゃんと書く

その関数が何をするのか，そのfor文while文はどういうループなのか，その変数は何を意味するのか……

コメントをちゃんと書けばCopilotも意図を汲んでくれますし，人に見せられるコードにもなります．

# リファレンス全文をコード内の邪魔にならない場所に，直接置く

VSCodeのCopilotは現在開いているファイルをすべて参照してそこからも情報を取ってくることができる……らしいです．

しかし本当に見てほしい部分，例えば別ファイルにある特定の関数の詳細な実装など，細かいところはあまり見てくれないように感じます．
特に変数・関数の名づけが適当だったり，広い意味を持つ単語を使用していたりする場合，変数名に引っ張られて変な提案をすることがあります．

その点，現在編集中のファイルは詳細までよく見てくれているように感じます．

実際に見てほしい関数などをコピペ・コメントアウトして，現在編集中のファイルの一番下など邪魔にならない場所に置いておくことで，copilotにちゃんとコードを読ませて，いい感じに文脈を掴ませることができます．

# ファイルをちゃんと分ける
特に個人開発や少人数開発では，ファイルを分けるのを面倒くさがってすべてのコードを1つのファイルで書くことがあります．

CopilotはVSCodeで使用する上でいい感じにコードを見てくれているように思いますが，生成AIの宿命として，あまり長い文章では細かい部分を忘れることがあります．

ファイルを細かく機能ごとにちゃんと分けておくことで，Copilotフレンドリーなコードを書くことができます．
適度にファイルを分けたコードは人間にとっても読みやすいですね．

# Pythonのrequirements.txtや，それに相当するものを用意する
たとえrequirements.txtが必要ないような場合でも，です．

特に古いバージョンのライブラリを使用している場合，Copilotくんが書いてくるコードはバージョンが合わないことがあります．

ある程度コーディングが進めばそんなことも減りますが，新しくプロジェクトを始めるときはライブラリのバージョンを明確にしましょう．

# ChatGPTとCopilotを使い分ける

両方契約しているユーザにとって，ChatGPT (執筆時点で4o) とCopilotは一見役割が被っています．

Copilotのいい点は，VSCode上で勝手に予測してくれることです．

ではChatGPTのいい点は？メモリ機能です．
ChatGPTは (設定でオフにしていなければ) ユーザのことを覚えるメモリを持っています．
ChatGPTに「私の情報について教えて」とでも投げれば，普段の会話を覚えていることが分かります．

普段扱っているような分野で，プログラムの大まかなプロトタイプを作りたい！といった目的で生成AIを使う場合は，CopilotよりChatGPTの方が普段の会話を基によしなに生成してくれることが多いです．
【備忘録】GASのWebアプリにDifyを埋め込む

# はじめに

前提としてGASでWebアプリを作成しておく。

https://qiita.com/firesign2023/items/3fd6bfab624568cd2c78


# Difyの準備

DifyのテンプレートよりMeeting Minutes and Summaryを作成します。
これは、ユーザーが入力したテキストを要約してくれるチャットボットです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3343142/b86fd79c-6950-3d3e-1983-7d0201eeb752.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3343142/533dc9d8-4021-bb1f-0e39-b6ce29364a9d.png)

右上の`公開する`から`サイトに埋め込む`を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3343142/c7973844-7466-0e0e-dbb2-5c85f05c06df.png)

３種類の方法が選択できます。
・ウェブサイトの任意の場所に埋め込む
・ウェブサイトの右下に埋め込む
・Dify Chatbot Chrome拡張をインストール

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3343142/0371265b-0f21-a8c9-17aa-a7bdb63ed7dc.png)

# GASにDifyのアプリを埋め込む

出てきたコードをGASのindex.htmlにコピペしてデプロイするとDifyで作成したアプリを埋め込むことができます。

## ・ウェブサイトの任意の場所に埋め込む

例：ニュース記事を要約してもらった

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3343142/3e70661f-8e94-4d35-891e-71e590c4aae9.png)


## ・ウェブサイトの右下に埋め込む

右下のアイコンをクリックすると、チャットを開始することができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3343142/357402ae-e525-ef5a-19f9-32e15b64799b.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3343142/d422dbe3-5f90-143c-5472-796bd29d52f9.png)
【備忘録】GAS + スプレッドシート

# はじめに

GASのWebアプリからスプレッドシートのデータを読み出す、書き込む
アンケートの集計など、Googleフォームを使って書き込む方が良い場合もある。
前提としてGASでWebアプリを作成しておく。

https://qiita.com/firesign2023/items/3fd6bfab624568cd2c78

# 書き込む

~~~JavaScript:コード.gs
function doGet() {
  const sheet_id = '*** ここにスプレッドシートのIDを入力 ***';
  const sheet_name = 'Sheet1';
  const sheet = SpreadsheetApp.openById(sheet_id).getSheetByName(sheet_name);
  const addArray = [new Date(),123];
  sheet.appendRow(addArray); // 既存のデータを上書きせずに追加していく。

  return HtmlService.createTemplateFromFile("index.html").evaluate();
}
~~~

# 読み出す

~~~JavaScript:コード.gs
function getData() {
  const sheet_id = '*** ここにスプレッドシートのIDを入力 ***';
  const sheet_name = 'Sheet2';
  const sheet = SpreadsheetApp.openById(sheet_id).getSheetByName(sheet_name);
  var data = sheet.getRange(1, 1, sheet.getLastRow(), 2).getValues();
  return data;
}
~~~

# 注意点

出来る限り１回で読み込み・書き込みを行った方が良い
読み込み・書込み回数が多い場合、上手く動かない場合がある
GoogleCloud ComputeEngineのブロックストレージの種類とユースケース

## はじめに
Google CloudのCompute Engineは、仮想マシン（VM）を提供する強力なクラウドサービスです。Compute Engineでは、データの永続化と効率的なストレージの管理を行うために、いくつかのブロックストレージオプションを提供しています。この記事では、Compute Engineのブロックストレージの種類とそれぞれの特徴、ユースケースについて説明し、最後に比較表を示します。

## ブロックストレージの種類

Compute Engineのブロックストレージには主に以下の種類があります：

1. **Standard Persistent Disks（標準永続ディスク）**
2. **Balanced Persistent Disks（バランス型永続ディスク）**
3. **SSD Persistent Disks（SSD永続ディスク）**
4. **Local SSDs（ローカルSSD）**

## 1. Standard Persistent Disks（標準永続ディスク）

**特徴**:
- コスト効率が高い
- 高い耐久性
- スナップショットとバックアップのサポート

**ユースケース**:
- 大規模なデータストレージ
- アーカイブ
- 低頻度アクセスのデータ

## 2. Balanced Persistent Disks（バランス型永続ディスク）

**特徴**:
- バランスの取れた性能とコスト
- スナップショットとバックアップのサポート
- 中程度のI/O性能

**ユースケース**:
- 中程度のI/O操作を伴うアプリケーション
- 一般的なワークロード

## 3. SSD Persistent Disks（SSD永続ディスク）

**特徴**:
- 高いI/O性能
- 低レイテンシ
- スナップショットとバックアップのサポート

**ユースケース**:
- 高I/O要求のワークロード
- リアルタイムアナリティクス
- トランザクション処理

## 4. Local SSDs（ローカルSSD）

**特徴**:
- 非常に高いI/O性能
- 超低レイテンシ
- VMに直接接続されるため、VMのライフサイクルに依存

**ユースケース**:
- キャッシング
- 一時的なデータストレージ
- 高スループットが必要なアプリケーション

## 比較表

以下に、各ブロックストレージタイプの特徴を比較した表を示します。

| 特徴                | Standard Persistent Disks | Balanced Persistent Disks | SSD Persistent Disks | Local SSDs           |
|---------------------|---------------------------|---------------------------|-----------------------|-----------------------|
| I/O性能             | 低                        | 中                        | 高                    | 非常に高              |
| レイテンシ          | 高                        | 中                        | 低                    | 非常に低              |
| コスト              | 低                        | 中                        | 高                    | 高                    |
| 耐久性              | 高                        | 高                        | 高                    | 低                    |
| スナップショット    | サポート                  | サポート                  | サポート              | サポート外            |
| バックアップ        | サポート                  | サポート                  | サポート              | サポート外            |
| 主なユースケース    | アーカイブ、大規模データ  | 中程度I/O操作のアプリ     | 高I/O要求のワークロード | キャッシング、一時データ|

## まとめ

Google CloudのCompute Engineは、様々なユースケースに対応するための多様なブロックストレージオプションを提供しています。標準永続ディスクはコスト効果の高い大規模データストレージに適しており、バランス型永続ディスクは中程度のI/O操作を伴うアプリケーションに理想的です。SSD永続ディスクは高いI/O性能を必要とするワークロードに最適で、ローカルSSDは超低レイテンシが求められる一時的なデータストレージに最適です。
【2024年6月】dlibのインストール方法

 # 経緯
 dlibのインストールに苦労したので最終的にうまく行った方法をメモしました

## うまくいかなかった方法
cmakeというプラットフォームをインストールする方法。(2024年現在、dlibのバージョンとうまくあわないらしい、、）


## うまくいった方法
### 1. VScode内のターミナルからpythonのバージョン確認
![スクリーンショット 2024-06-17 133719.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3779891/043df546-82a3-0b0c-b9f5-8d472c0cad13.png)
3.9.13だった

### 2. githubリポジトリからdlibをインストール
以下のレポジトリからPython 3.9用のファイルである【dlib-19.22.99-cp39-cp39-win_amd64.whl】をダウンロード

https://github.com/z-mahmud22/Dlib_Windows_Python3.x

### 3. VScode内のターミナルで以下を実行
dlib-19.22.99-cp39-cp39-win_amd64.whlをダウンロードしたディレクトリに移動してから以下を実行

```shell
 pip install dlib-19.22.99-cp39-cp39-win_amd64.whl
```
MQLのなんかよくわからない途中停止

<h1>環境</h1>

* Windows10
* MetaTraderde5
　はっきり確認されたのMT5だがMT4でも同じことが起きてたような気も。。。（わからねえ）
* 銘柄 JP225
* 口座 FXGT-Demo

<h1> 症状 </h1>

* 自前でMQLコーディングしたエキスパートを　ストラテジーテスターで動かしているときに途中停止する </h2>
* コンパイル直後の 1 回目の実行は問題ない
    * この初回実行中に取引処理が無ければ問題は起きない
* 2 回目以降がおかしい
    * 1日の最後（23:59:59）まで進行するはずが、13:15:00とかで停止
    * エラーメッセージは出ない
    * 取引が無ければ起きない
    * 「スタート」を連打して「接続エラー（？）」を起こしてやるとその次の実行は正常に
    * どうも接続終了が正常じゃない様子だった


<H1>再現条件</H1>

* どうやら　銘柄依存（JP225で起きるがEURUSDでは起きない）
* 対象期間が1日　のときにのみ起きる模様
 意味わかんないねえ




<h2>考えられる原因</h2>

* ストラテジーテスターの不具合かもしれない。

<H3> コーディングミスを疑う余地 </H3>

* メモリリークとかそういうやつ。
* 初期化や終了処理に不足があるのかも。

こういうのは勿論考えられる。けれでも
MT5ってかなりビギナーに親切なプラットフォームだと思うのよ
　ちょっとしたコーディングミスでEAが停まる
　　メッセージもなにも出ないというのは
本来の動きという気はしない。
【備忘録】GAS GoogleDriveの画像を表示する

# はじめに

GASのWebアプリ上にGoogle Driveの画像を表示する方法
前提としてWEBアプリを作成しておく。

https://qiita.com/firesign2023/items/3fd6bfab624568cd2c78

# imgタグを使って表示する

~~~HTML:index.html
<img src="https://lh3.googleusercontent.com/d/{ここにFile IDを入力する}" alt="img" width="40" height="40">
~~~

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3343142/1868e45f-2312-759d-96db-3a4d84b18e4b.png)

# ファイルIDの調べ方

Google Driveのファイル上で右クリック→共有→リンクをコピー

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3343142/2ff84c64-ff00-4539-887f-e2042346a3d1.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3343142/bf9c709c-5922-b7b3-c939-30e4617d0de5.png)

以下のようなリンクが取得できる。`{}`内の文字列がファイルID

`https://drive.google.com/file/d/{ここの文字列がファイルID}/view?usp=drive_link`
G検定勉強法など

# はじめに
そういえばG検定2024#2に合格していたので、勉強法など。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3493004/312a81f8-f1fc-7aa9-2d8e-96632a5119b1.png)

法令が鬼門すぎました（法整備されていないことが多くて、問いも曖昧になりがち）。
（数理統計は問題数が少なかったし・・・ｺﾞﾆｮｺﾞﾆｮ）

# G検定とは

### 概要
G検定とは、一般社団法人 日本ディープラーニング協会（JDLA）が主催する、ディープラーニングに関する知識を評価する検定試験です。G検定は、General（一般）を意味し、ディープラーニングの基礎知識を幅広く問う内容となっています。

https://www.jdla.org/certificate/general/#general_No03

### 目的と意義
ディープラーニングに関する知識を体系的に学習し、その理解度を客観的に評価することです。この検定を通じて、AI・ディープラーニング分野での人材育成や、社会全体のAIリテラシー向上を目指しています。また、合格者にはディープラーニングの基礎知識を有していることを証明する認定証が発行されます。

### 試験の構成と内容
大きく分けて「機械学習」「ディープラーニング」「AI社会」の3つの分野。
約200問の多肢選択式で、制限時間は120分。自宅受験可なので、ググり検定など揶揄されます。
最近はChatGPTをはじめとした生成AIに解かせる受験者も散見されるようで。
まぁ基礎知識が無いと問題数が多すぎて調べ切る時間が無いんですけどね。
合格率60～70%と言われております。

### Di-Lite
デジタルリテラシー協会がDi-Liteというワードを謳っています。
「Di-Lite 」とは、「デジタルを使う人材」であるために、全てのビジネスパーソンが、共通して身につけるべきデジタルリテラシー範囲（AI、データサイエンス、IT）です。
推奨される資格としてG検定、データサイエンティスト検定、ITパスポートがあります。

https://www.dilite.jp/


### 合格の意義
・ディープラーニングに関する基礎知識を習得し、それを客観的に証明できた
・試験勉強の過程で、機械学習やディープラーニングの概念を深く理解し、AIが社会に与える影響について考えを巡らせることができた

# 勉強時間/参考書/勉強方法

### 勉強時間
1～2時間/day、2ヶ月

### 参考書
①シラバス
　何はともあれ、シラバスがすべてです。公式テキストや問題集に載っていない問題も出ますが、シラバスには載っているので要確認です。
※2024#6からシラバスが変更になったみたいです

https://www.jdla.org/certificate/general/#general_No03

②公式テキスト/問題集
通称白本と黒本です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3493004/ccd23911-2869-bc75-3c58-ff88f7d42176.png)


③お世話になったサイト

https://www.simulationroom999.com/blog/jdla-deep-learning-for-general-2020-1/

https://zero2one.jp/ai-word/

④無料模試

https://study-ai.com/generalist/

https://diver.diveintocode.jp/dive_into_exam

### 勉強方法
範囲が広く、聞いたことない単語も頻出したので、ただの暗記ではなく体系的に整理する必要があると感じました。まとめ資料を自作する過程で頭の中を体系的に整理することができました。

①シラバスをざっと確認
②白本をさらっと流し読み
③白本を再び読みつつ、まとめ資料を作成
④黒本を解きつつ、まとめ資料に追記する
⑤隙間時間にYoutubeを視聴。まとめ資料に追記する。
⑥シラバスを再度確認して、白本・黒本で扱わなかった単語を検索。まとめ資料に追記する。
⑦本番1週間前に無料模試を解き、弱い個所を確認し、重点的に勉強
⑧直前はまとめ資料をひたすら読み返して、知識を定着

まとめ資料（の一部）こんな感じ↓
なんやかんや５０ページくらいの資料になってしもた。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3493004/a9ca8272-1116-25b3-f477-e81c616c52af.png)

# おわりに
会社から奨励されているわけでもない、ましてや補助が出るわけでもないので完全に趣味の自腹資格になりました。
でも勉強にはなったので良しです。

次はE資格、ITパスポート、データサイエンティスト検定でも取りたいな。

それでは次の記事でお会いしましょう('ω')ノ
リンクアップ確認

初期構築時や冗長化試験をする際にリンクアップ・ダウンの確認が必要となります。
意外とこの確認方法を知らない方をいるののと、OS種別毎にコマンドが違うので備忘禄として残しておきます。

## Linux

```
ethtool ethX | grep detected
```
Link detected: yesとなっていたらリンクアップ

Redhat7以降は以下でも確認できます。

```
ip link show
```

## AIX

```
entstat -d enX | grep RJ45 
```
RJ45 ポート・リンク状況 : upとなっていたらリンクアップ

## HP-UX

```
lanscan | grep lan
```

Path     Address        In# State NamePPA        ID  Type      Support Mjr#
0/1/2/0  0x123456789123 0   UP    lan0 snap0     1   ETHER     Yes     119

Hdw stateがUPならリンクアップ

## Solaris

```
dladm show-dev
```
e1000g0 リンク: upとなっていたらリンクアップ

Solaris10以前バージョンでは...

```
ndd -get /dev/bgeX link_status
```
JSで特定のidを持つ要素にクラスを追加・削除する方法

JavaScriptで特定のidを持つ要素にクラスを追加または削除する方法を紹介します。
### 実行環境
HTML5
CCS3
Google Chrome: 126.0.6478.62（Official Build） （64 ビット）

## 準備
[前回の記事](https://qiita.com/DreamMyHome/items/76f0b6f7c934c2ca5bcd)で作成したクラスを使います。
サイズ、色、枠線は任意のものに変更してください。

```html
<div class="main-content">
    <div class="button" id="add">add</div>
    <div class="button" id="remove">remove</div>
    <div class="button" id="target">target</div>
</div>
```

```css
.main-content {
  display: flex;
  justify-content: space-evenly;
}

.button {
  width: 100px;
  height: 50px;
  border: 2px solid black;
  display: flex;
  justify-content: center;
  align-items: center;
  background: palegreen;
}

.highlight {
  position: relative;
}

.highlight::before {
  width: 100%;
  height: 100%;
  content: "";
  position: absolute;
  display: block;
  border: 5px solid salmon;
  /* 2秒ごとに繰り返し */
  animation: blink 2s ease infinite;
}

/* 点滅アニメーション */
@keyframes blink {
  0% {
    transform: scale(1);
    opacity: 1;
  }
  50% {
    transform: scale(1);
    opacity: 0;
  }
  100% {
    transform: scale(1);
    opacity: 1;
  }
}
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3810489/02f32a0f-b5a2-a9a7-828f-51cec6852c53.png)

## 実装
今回は、idが`add`のボタンを押すとidが`target`の要素に`highlight`クラスを追加し、idが`remove`のボタンを押すとidが`target`の要素から`highlight`クラスを削除するJavaScriptを実装します。

```javascript
document.getElementById("add").addEventListener("click", function () {
  const element = document.getElementById("target");
  element.classList.add("highlight");
});

document.getElementById("remove").addEventListener("click", function () {
  const element = document.getElementById("target");
  element.classList.remove("highlight");
});
```

`document.getElementById("id名")`は、id属性が`id名`の要素を取得します。
`.addEventListener("click", function () {処理})`は、対象の要素がクリックされたときに`処理`を実行します。
`.classList.add("クラス名")`は、対象の要素に`クラス名`クラスを追加します。
`.classList.remove("クラス名")`は、対象の要素から`クラス名`クラスを削除します。

上記のコードを実装することで、addボタンを押すとtargetボタンの強調表示をオンに、removeボタンを押すとtargetボタンの強調表示をオフに出来ます。

**addボタンを押したとき**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3810489/cb906d0c-fd44-63fc-dd94-4c4aecc48756.png)

**removeボタンを押したとき**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3810489/02f32a0f-b5a2-a9a7-828f-51cec6852c53.png)
Unreal Engine5でArm64のサーバー用にビルドしよう！

# 前提条件

- C++で記述されたプロジェクト
- Linuxがオプションで含まれている
  ![LinuxOption.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3288957/da984554-f307-0f71-3a8b-df8def4b3483.png)

# 環境

- Windows 10
- Visual Studio 2022
- Unreal Engine 5.x

# 本編

## 1. プロジェクトの設定

プロジェクトファイルを右クリックし、 Generate Visual Studio project files を選択します。
![GenerateVSP.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3288957/22373678-e6e6-1e35-71a2-a9c04a5d9aff.png)

実行後、以下のようにslnファイルが生成されていればOKです。

![GeneratedSln.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3288957/71558811-e6bd-e3ef-9266-e5ba87cfeb7e.png)

## 2. ビルド設定

生成された プロジェクト名.sln を開き、ビルドを行っていきます。

まずプロジェクト名の ++アイコン を左クリックするとSourceフォルダが表示されます。
そこを更に展開すると.Targetというファイルたちがあります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3288957/2ca4e2d0-e752-71e7-a525-995a6f73e9db.png)

### サーバー用のTargetファイルを作成する

1. 自動的に生成されている プロジェクト名.Target.cs(Editorがついていない方) をコピーする。
↓こんな感じのファイルです。バージョンのデータも含まれているので、自分のファイルをコピーしてください。。
```C#
using UnrealBuildTool;
using System.Collections.Generic;

public class MyProjectTarget : TargetRules
{
	public MyProjectTarget(TargetInfo Target) : base(Target)
	{
		Type = TargetType.Game;
		DefaultBuildSettings = BuildSettingsVersion.V5;
		IncludeOrderVersion = EngineIncludeOrderVersion.Unreal5_4;
		ExtraModuleNames.Add("MyProject");
	}
}
```

2. プロジェクト名Server.Target.cs という名前でコピーしたファイルの名前を変える。

また以下のように Type = TargetType.Server; に変更してください。
```C#
using UnrealBuildTool;
using System.Collections.Generic;

public class MyProjectServerTarget : TargetRules
{
	public MyProjectServerTarget(TargetInfo Target) : base(Target)
	{
		Type = TargetType.Server;
		DefaultBuildSettings = BuildSettingsVersion.V5;
		IncludeOrderVersion = EngineIncludeOrderVersion.Unreal5_4;
		ExtraModuleNames.Add("MyProject");
	}
} 
```

## 3. ビルド

画像のようにDevelopment Serverを選択してビルドを行ってください。
![ChangeServer.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3288957/3dc85eea-d2d5-a461-d8b9-be7f56912669.png)

ソリューションのビルドを実行してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3288957/029363e0-3f96-449f-0b16-fd209057925f.png)

次にDevelopment Client に変更して再度ビルドを行ってください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3288957/e10c89d0-791e-03de-fdde-78f6078524cc.png)

エディターで以下のように LinuxArm64 を選択して プロジェクト名Server を選択してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3288957/7bd81708-0e03-d6c2-0ddc-9fef3c1d5219.png)

::: note warn
画像のように各OSのアイコンが表示されない場合はWindowsの下にある
**プラットフォーム状態を更新** を選択してください。
:::

あとはプロジェクトをパッケージ化してビルドを行ってください。

ここでエラーが出た場合はプロジェクト名.slnからDevelopment Editorを選択してビルドを行ってください。
私の場合はこの方法でエラーが解消できました。

# 参考文献

https://aws.amazon.com/jp/blogs/news/compiling-unreal-engine-5-dedicated-servers-for-aws-graviton-ec2-instances/