# Elixirキャッシュ

Tuistは、コンパイル済みの依存関係をローカルおよびCIビルド間で再利用します。一度有効にするだけで、`mix compile`と`mix test`を引き続き使用できます。

## セットアップ

<.localized_link href="/guides/get-started/elixir-project#set-up-tuist">Elixirプロジェクトを始める</.localized_link>の手順を一度実施してください。共通のセットアップにより、ビルドおよびテストのインサイト alongside 依存関係のキャッシングが有効になり、追加のキャッシュ設定は不要です。

`cache: true`はサポートされているHexおよびGit依存関係を自動的に選択するため、それらをリスト化する必要はありません。ネイティブ/カスタムコンパイルおよびローカル依存関係は、通常通りMixを通じて処理されます。アプリケーションのソースファイルはキャッシュされません。

## 通常通りビルド

```sh
mix compile
mix test
```

依存関係のコンパイルが必要な場合、Tuistはまずローカルキャッシュを確認し、次に共有リモートキャッシュを確認します。キャッシュミスが発生した場合は通常通りコンパイルを行い、その結果を将来のビルドのために保存します。Mixによって最新と判断された選択済み・サポート対象の依存関係は、コンパイル済み出力が存在し有効であればローカルヒットとしてカウントされ、キャッシュルックアップは不要です。認証またはキャッシュが利用できない場合でも、Mixは通常通りコンパイルを行います。

## キャッシュヒットを確認

プロジェクトのダッシュボードで**Mixキャッシュ**を開き、ヒット率、転送量、最近のビルドを確認してください。ビルドの**Mixキャッシュ**タブを選択して、どのタスクがヒットまたはミスしたかを確認できます。**CAS出力**には実際のリモートダウンロードとアップロードが表示されます。ローカルヒットではリモート転送レコードは作成されません。すでに最新の出力を再利用することはヒット率に貢献しますが、転送バイト数、復元レイテンシ、または推定節約時間には影響しません。

復元を試すには、サポートされている依存関係のコンパイル済み出力をクリーンにして、再度ビルドしてください:

```sh
mix deps.clean nimble_options --build
mix compile
```

`nimble_options`を、プロジェクトで使用しておりすでにキャッシュに登録されている依存関係に置き換えてください。Mix環境およびコンパイラ設定は同じまま維持してください。

## 必要な場合のみカスタマイズ

ほとんどのプロジェクトでは`cache: true`をそのまま維持できます。例外がある場合はキーワードリストを使用してください:

```elixir
tuist: [
  project: "your-account/your-project",
  cache: [exclude: [:a_dependency_with_compile_time_side_effects]]
]
```

- **追加のコンパイル時入力:** 外部ファイルを`inputs: ["schemas"]`で宣言し、環境変数を`env: ["COMPILER_OPTION"]`で宣言します。
- **ローカルのみ:**`remote: false`を設定します。
- **リモートアップロードなし:**`upload: false`を設定します。サーバー権限は引き続きアクセスを制御します。
- **キャッシングを無効化:**`cache: false`を設定します。

> [!IMPORTANT]
> コンパイルでは任意のElixirコードが実行される可能性があります。追加の入力を宣言し、時間やネットワークに依存するコードや副作用を持つため毎回ビルド時に実行する必要がある依存関係を除外してください。キャッシュされたアーティファクトには機密情報が含まれる可能性があり、キャッシュ書き込み者は信頼されたコード生成者として扱われます。信頼できないジョブにはキャッシュ書き込み用の認証情報を与えないでください。

依存関係の選択、異なるチェックアウトパス間での再利用、トラブルシューティング、および実装の詳細については、<.localized_link href="/guides/features/cache/elixir-advanced">高度なElixirキャッシュ設定</.localized_link>を参照してください。
