リモートキャッシング
Turborepoのタスクキャッシュは、同じ作業を二度と行わないことで、多くの時間を節約できます。
しかし、問題があります。キャッシュはマシンローカルです。CIで作業する場合、これにより多くの重複作業が発生する可能性があります:(画像の説明)
Turborepoはデフォルトではローカルファイルシステムにのみキャッシュするため、すべてのタスク入力が同じであっても、同じタスク(`turbo run build`)を各マシン(自分、チームメイト、CI、PaaSなど)で再実行する必要があります。これは時間とリソースの無駄です。
単一の共有キャッシュ
チーム全体(そしてCIでも)で単一のTurborepoキャッシュを共有できるとしたらどうでしょうか?
Vercelなどのプロバイダーと連携することで、Turborepoはリモートキャッシュ(タスクの結果を保存するクラウドサーバー)と安全に通信できます。
これは、組織全体で重複作業を防ぐことにより、 enormousな時間を節約できます。
リモートキャッシングはTurborepoの強力な機能ですが、大きな力には大きな責任が伴います。最初に正しくキャッシュしていることを確認し、環境変数の処理を再確認してください。また、Turborepoはログをアーティファクトとして扱うため、コンソールに出力している内容に注意してください。
Vercel
ローカル開発向け
ローカルのturborepoをリモートキャッシュにリンクする場合、最初にVercelアカウントでTurborepo CLIを認証します
turbo login
リモートキャッシュがシングルサインオンを使用するように設定されている場合は、正しい権限を持つキャッシュトークンを取得するために、`npx turbo login --sso-team=TEAMNAME` を実行する必要があります。
次に、Turborepoをリモートキャッシュにリンクします
turbo link
有効になったら、現在キャッシュしているワークスペースに変更を加え、`turbo run` でタスクを実行します。キャッシュアーティファクトはローカルとリモートキャッシュの両方に保存されるようになります。
確認するには、次のコマンドでローカルのTurborepoキャッシュを削除します
rm -rf ./node_modules/.cache/turbo
次に、同じビルドをもう一度実行します。正しく動作している場合、`turbo` はタスクをローカルで実行するのではなく、リモートキャッシュからログとアーティファクトの両方をダウンロードして再生します。
Vercelビルドでのリモートキャッシング
Vercelでアプリをビルドしてホストしている場合、`turbo` を使用すると、リモートキャッシングが自動的に設定されます。 `turbo` でビルドするには、ビルド設定を更新する必要があります。
詳細については、Vercelのドキュメントを参照してください。
成果物の整合性と信頼性の検証
Turborepo は、リモートキャッシュにアップロードする前に、秘密鍵を使用して成果物に署名できます。Turborepo は、提供された秘密鍵を使用して、成果物に対して HMAC-SHA256
署名を使用します。Turborepo は、リモートキャッシュの成果物がダウンロードされたときに、その整合性と信頼性を検証します。検証に失敗した成果物は無視され、Turborepo によってキャッシュミスとして扱われます。
この機能を有効にするには、turbo.json
設定ファイルの remoteCache
オプションに signature: true
を含めます。次に、TURBO_REMOTE_CACHE_SIGNATURE_KEY
環境変数を宣言して、秘密鍵を指定します。
{
"$schema": "https://turbo.dokyumento.jp/schema.json",
"remoteCache": {
// Indicates if signature verification is enabled.
"signature": true
}
}
リモートキャッシングAPI
リモートキャッシュは、Turborepo のリモートキャッシングAPI仕様を満たす任意の HTTP サーバーによって実装できます。
Vercel によるマネージドリモートキャッシュ
Turborepo の作成者兼メンテナーである Vercel (新しいタブで開きます) は、Turborepo と完全に互換性のあるマネージドリモートキャッシュを提供しています。
Vercel リモートキャッシュ (新しいタブで開きます) の使用は設定不要で、オープンソースの Vercel リモートキャッシュ SDK (新しいタブで開きます) を介して Vercel デプロイ (新しいタブで開きます) と自動的に統合されます。
Vercel 上の Turborepo (新しいタブで開きます) の詳細、または 無料テンプレートのデプロイ (新しいタブで開きます) を試してみてください。
セルフホスティング
独自のリモートキャッシュをセルフホスティングし、--api
および --token
フラグを指定することで、リモートキャッシングドメインを設定することもできます。ここで、--api
はホスト名、--token
はベアラートークンです。
turbo run build --api="https://my-server.example.com" --token="xxxxxxxxxxxxxxxxx"
API の OpenAPI 仕様はこちらにあります。現時点では、すべてのバージョンの turbo
は v8
エンドポイントと互換性があります。