# Elixir ビルドインサイト {#elixir-build-insights}

Tuist の Hex パッケージは、ビルド分析データを Tuist に送信できます。ビルド時間、ファイル間の依存関係グラフ、そしてそれらの経時変化を把握することで、ビルドグラフを最適化し、コンパイルが行われる環境で利用可能なすべてのコアを最大限に活用するために必要な情報が得られます。

> [!IMPORTANT]
> **要件**
>
> - <.localized_link href="/guides/get-started/elixir-project">Elixir プロジェクトの開始</.localized_link> を完了してください

## ビルドを報告する {#report-your-builds}

共有セットアップにより、コンパイル統合がインストールされます。普段使っているコマンドを引き続き使用してください。

```bash
mix compile
```

この統合は `mix compile` と、`mix test` や `mix phx.server` などの他のタスクによってトリガーされるすべてのコンパイルを対象とします。実行すべき処理がないコンパイルは報告されないため、ダッシュボードには実際に処理を行ったビルドのみが表示されます。

## アクター要求の報告 {#report-actor-claim}

Mix のビルドおよびテスト報告リクエストには、ラベルを明示的に設定した場合のみ、オプションの `x-tuist-actor-id` ヘッダーが含まれます。`TUIST_ACTOR_ID` を組織スコープのラベルに設定するか、プロジェクトの `tuist` 設定に `actor_id: "developer-label"` を追加してください。解決順序は、環境変数、次にランタイムの `:actor_id` オプション、最後にプロジェクト設定の順です。デフォルトではラベルは送信されず、パッケージはオペレーティングシステムのユーザー名を検出しません。固定されたプロジェクトラベルは、その設定を使用するすべての人に適用されます。空または無効なオーバーライドは、フォールバックせずに要求を省略します。これにより、認証情報ベースの検証済み識別子が削除されることはありません。カスタムプロキシが不明なヘッダーを拒否する場合は、`TUIST_ACTOR_ID=""` でオプトアウトしてください。

識別子は、スペース以外の印刷可能 ASCII 文字で構成される 1〜128 バイトである必要があります。無効なオーバーライドは、フォールバックせずに省略されます。検証済みの個別認証情報が優先されます。その他のクライアント報告識別子は **未検証** として表示され、アクセスを承認することはなく、ユーザーに自動的にリンクされることもありません。プロジェクトのレポートを表示できる人（プロジェクトが公開されている場合は公開ビューアを含む）はこれらの識別子を閲覧でき、データエクスポートにも含まれるため、機密情報を含めないでください。古いサーバーはこのオプションヘッダーを無視し、新しいサーバーはこのヘッダーなしで古いクライアントを受け入れます。識別子のない新しい共有トークンレポートは、公開組織ではなく **不明** と表示されます。過去のレポートは以前の帰属情報を保持します。ビルドおよびテストの報告には、デフォルトで認証が必要です。セルフホストインストールでは、以下で説明するように認証情報不要の報告を明示的に有効にできます。

## プライベートネットワークでの認証情報不要の報告 {#network-trusted-publishing}

オペレーターがインスタンスで `TUIST_NETWORK_TRUSTED_INSIGHTS_ACCESS=true` を設定し、<.localized_link href="/guides/server/self-host/server#network-trusted-access">セルフホスティングガイド</.localized_link> に記載されている通りに再起動した後、宛先を設定してください。SDK は、認証情報がない場合にインスタンスが認証情報不要の報告を許可しているかどうかを自動的に検出します。このインスタンス設定はサポートされているすべてのプロジェクトに適用され、ダッシュボードの切り替えオプションはありません。

```elixir
tuist: [
  url: "https://tuist.internal.example",
  project: "account/project"
]
```

`mix tuist.compile` および `mix tuist.test` は、認証情報が実際になく、検出によってサーバーがこれを許可していることが確認された場合、サインインなしで構造化されたレポートを発行します。クライアントフラグやプロジェクトのオプトインは必要ありません。提示された認証情報（提供された CI OIDC 識別子を含む）は使用または拒否され、署名なし報告へのダウングレードのために無視されることはありません。空白のみの `TUIST_TOKEN` はエラーです。空の `TUIST_TOKEN` は、有効な保存済み認証情報または提供された OIDC にフォールバックでき、古くなった保存済み認証情報は提供された OIDC にフォールバックできます。どちらのパスも認証された状態を維持し、署名なし報告を有効にすることはありません。使用できない認証情報は保持され、認証されたフォールバックが成功しない場合に失敗します。認証情報不要のクライアントをアップグレードする前に、すべてのサーバーレプリカを検出対応バージョンにアップグレードしてください。検出機能のない古いサーバー、無効化されたインスタンス、および検出失敗時は引き続き認証が必要です。

署名なしの実行はテレメトリであり、信頼性の低いテスト、隔離、カバレッジ、または選択的実行の証拠ではありません。シャード計画、ビルドアーカイブ、およびカバレッジ/アーティファクトエンドポイントは引き続き認証情報を必要とします。設定されたアクター要求を省略するには、`TUIST_ACTOR_ID=""` を独立して設定してください。検証済み認証情報の識別子には影響しません。

## 追跡対象 {#what-is-tracked}

各ビルドについて、パッケージは以下の情報を収集します。
- 期間、成功したかどうか、および実行された Elixir、Erlang/OTP、Mix 環境
- すべての警告とエラー、およびそのファイルと行番号
- 各ファイルのコンパイルにかかった時間と、それが定義するモジュール
- 各ファイルが依存するファイル、およびコンパイル時かランタイム時のみが必要かどうか
- ファイルのコンパイル以外にビルドが行った処理（型チェック、ディスクへの書き込み、その他の Mix コンパイラなど）
- ビルド中のマシンのプロセッサ、メモリ、ネットワーク、およびディスク使用量
- ブランチとコミット、継続的インテグレーションの場合はプロバイダーと実行

## ビルドを遅くしている要因を見つける {#find-what-slows-a-build-down}

ダッシュボードの **ビルド → ビルド実行** からビルドを開きます。ビルド、その診断カウント、および依存関係キャッシュのサマリーは、`tuist build mix list` および `tuist build mix show`、`GET /api/projects/{account_handle}/{project_handle}/mix/builds`、そして `list_mix_builds` と `get_mix_build` の <.localized_link href="/guides/features/agentic-coding/mcp">MCP ツール</.localized_link> からも利用可能です。

**概要** タブには、ビルドでコンパイルされたファイルが一覧表示されます。モジュールごとにグループ化したり、検索したり、以下の基準で並べ替えたりできます。
- **コンパイル時間**：単体で遅いファイルを見つけるため
- **コンパイル時依存先**：このファイルがコンパイルされるまでコンパイルできないファイルの数。依存先が多い遅いファイルはビルド全体を停滞させ、変更するとすべてが再コンパイルされます。
- **コンパイル時依存元**：このファイルが待機しているファイルの数

![Phoenix アプリケーションの Mix ビルドの概要](/images/guides/features/elixir/build.png)

**タイムライン** タブは、同じビルドの経時的な変化を示します。どのファイルが並列でコンパイルされたか、ビルドが型チェックやディスク書き込みを行った場所、および各瞬間のマシンの状態です。バーが 1 つだけの区間は、ビルドが利用可能なコアを使用できなかった区間です。

![Phoenix アプリケーションの完全な Mix ビルドのタイムライン](/images/guides/features/elixir/build-timeline.png)

**警告** および **エラー** タブには、ビルドの診断情報が一覧表示されます。

## カスタムメタデータ {#custom-metadata}

Mix ビルドにタグとキーバリューデータを付加して、異なるチーム、ハードウェア、またはワークフローからの実行を区別します。どちらも各ビルドの詳細ページに表示されます。

環境変数でメタデータを設定します。

```sh
export TUIST_TAGS="nightly,release"
export TUIST_VALUES="ticket=TUIST-123,runner=linux-arm64"
```

`mix.exs` でメタデータを設定することもできます。

```elixir
tuist: [
  project: "account/project",
  tags: ["nightly", "release"],
  values: %{"ticket" => "TUIST-123", "runner" => "linux-arm64"}
]
```

両方の場所で設定されたタグは結合されます。同じキーが両方の場所で設定されている場合、環境変数の値が優先されます。

タグには英字、数字、ハイフン、アンダースコアのみを使用できます。ビルドには最大 50 個のタグを付加でき、各タグは最大 50 文字までです。ビルドには最大 20 件のキーバリューエントリを付加でき、各キーは最大 50 文字、各値は最大 500 文字までです。これらは Xcode ビルドメタデータに適用されるサーバー側の制限と同じです。パッケージはレポートを送信する前に、無効なタグやサイズ超過・空のメタデータエントリをスキップするため、無効な構成によってビルドインサイトレポートの残りが保存されなくなることはありません。タグの制約を満たさない値には、キーバリューメタデータを使用してください。

カスタムメタデータはビルドに付加され、テスト実行には付加されません。

カスタムメタデータはダッシュボードでプロジェクトメンバーに表示されます。認証情報、アクセストークン、その他の機密データには使用しないでください。Tuist はこのメタデータを含む Mix ビルドデータを 90 日間保持します。詳細については <.localized_link href="/guides/server/data-retention">データ保持ポリシー</.localized_link> を参照してください。

## トラブルシューティング {#troubleshooting}

レポート送信はビルドの結果を変更しません。レポートを送信できない場合でも、ビルドは通常通り完了し、何も出力されません。レポートが送信されなかった理由を確認するには、`TUIST_DEBUG=1` を設定してください。

```bash
TUIST_DEBUG=1 mix compile --force
```
