Cache Keyとは?
cache keyは、CIが保存されたcacheを見つけるために使う指紋です。これを正しく設定すれば、古いデータを提供することなく頻繁にヒットします。
すべてのcacheルックアップは文字列の比較です。cache keyはcacheされたコンテンツが何に依存しているかをエンコードし、完全一致は「このcacheはまだ有効である」を意味します。keyの設計は効果的なcachingの中核的なスキルです。
良いkeyはコンテンツから導出される
keyを、出力を変える入力(多くの場合lockfile)のハッシュに基づかせます。例: deps-${{ runner.os }}-${{ hashFiles('**/package-lock.json') }}。lockfileが変わるとkeyが変わり、新しいcacheが保存されます。
Restore keyと部分一致
多くのシステムはフォールバックの「restore key」 - 正確なkeyがミスしたときに使われるプレフィックス - をサポートします。deps-${{ runner.os }}-へのフォールバックは、空から始める代わりに、最新の互換性のあるcacheを復元し、変更されたものだけを再インストールします。
正しい次元を含める
keyはcacheされたコンテンツを変えるすべて、つまりOS、CPUアーキテクチャ、言語バージョン、lockfileを捉えなければなりません。1つでも省くと、別のプラットフォーム向けにビルドされたcacheを復元してしまい、分かりにくい形で失敗する可能性があります。
よくある間違い
- 広すぎるkey(lockfileハッシュなし)は古い依存関係を提供します。
- 具体的すぎるkey(commit SHAを含む)は決してヒットしません。
- OSやアーキテクチャを忘れると、互換性のないバイナリを復元します。
keyが機能するかを検証する
CIログで「cache hit」対「cache miss」の行を確認します。変更されていない依存関係で常にミスするkeyは具体的すぎます。依存関係の変更後にヒットするkeyは広すぎて、古いデータを提供しています。
重要なポイント
- cache keyはcacheが依存するもの(通常はlockfile)の指紋を取ります。
- restore keyは、正確なkeyがミスしたときに有用な部分的ヒットを提供します。
- 広すぎると古いデータを提供し、具体的すぎると決してヒットしません。
関連ガイド
What Is Dependency Caching in CI?Dependency caching stores downloaded packages between CI runs so jobs skip re-fetching them. Learn how it wor…
What Is a Lockfile?A lockfile pins the exact versions of every dependency so installs are reproducible. Learn why CI should inst…
What Is a Remote Cache?A remote cache stores build and dependency artifacts in shared storage so every CI runner can reuse them. Lea…