Skip to content
Latchkey

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がミスしたときに有用な部分的ヒットを提供します。
  • 広すぎると古いデータを提供し、具体的すぎると決してヒットしません。

関連ガイド