コンテンツへスキップ
Latchkey
ドキュメントメニュー

依存関係のキャッシュ (Fast Cache)

Latchkey Fast Cache は、依存関係のキャッシュを単一のストリーミングリクエストで保存および復元します。ストレージはランナーと同じリージョンに置かれ、設定は不要です。

Latchkey Fast Cache (latchkey-dev/cache-action@v1) は、Latchkey のマネージドランナー上で依存関係のキャッシュ (node_modules、パッケージレジストリ、ビルド成果物) を保存および復元する軽量な GitHub Action です。繰り返しの実行では、パイプラインですでに完了したインストールをスキップします。

なぜ速いのか#

  • キャッシュデータは、actions/cache@v4 が使うシリアルなチャンク方式ではなく、単一のストリーミング HTTP リクエストで転送されます。チャンクごとのラウンドトリップも一時ファイルもありません。
  • 圧縮と展開はマルチスレッド (zstd) で行われ、アップロードとダウンロードは並列転送として実行されます。
  • ストレージはランナーと同じリージョンに置かれるため、バイトが遠くまで移動することはありません。
  • 各保存と復元はジョブログにその所要時間を出力するので、自分のビルドで差を測定できます。

ワークフローに追加する#

2 つのステップを追加します。1 つは action: restore、もう 1 つは action: save です。それぞれ key と 1 つ以上の path エントリ (改行またはスペース区切り。~ に対応) を受け取ります。restore ステップは cache-hit の出力を公開するので、キャッシュがヒットしたときにインストールステップをスキップできます。

.github/workflows/ci.yml
jobs:
  build:
    runs-on: latchkey-medium
    steps:
      - uses: actions/checkout@v4

      - name: Restore dependencies
        id: cache
        uses: latchkey-dev/cache-action@v1
        with:
          action: restore
          key: deps-${{ runner.os }}-${{ hashFiles('package-lock.json') }}
          path: node_modules

      - name: Install dependencies
        if: steps.cache.outputs.cache-hit != 'true'
        run: npm ci

      - name: Save dependencies
        uses: latchkey-dev/cache-action@v1
        with:
          action: save
          key: deps-${{ runner.os }}-${{ hashFiles('package-lock.json') }}
          path: node_modules

actions/cache からの移行#

actions/cache@v4

  • チャンクごとのラウンドトリップを伴うシリアルなチャンク転送
  • 任意のランナーで動作
  • 入力: path、key、restore-keys

latchkey-dev/cache-action@v1

  • 保存または復元ごとに 1 回のストリーミングリクエスト
  • ストレージは事前プロビジョニング済みで、ランナーと同じリージョン
  • 同じ入力がそのまま引き継がれます。移行は 1 行の変更です

安全なデフォルト#

  • 復元の失敗がジョブを失敗させることは決してありません: 警告が表示され、cache-hitfalse となり、実行は続行します。
  • key がすでに存在する場合、保存は自動的にスキップされます。そのため、同一のキャッシュが再アップロードされることはありません。
  • キャッシュは組織ごとに分離され、オペレーティングシステムごとに自動的にバージョン管理されます。より細かい分離 (OS バージョンなど) はキャッシュキーにエンコードしてください。

ジョブログに表示される内容#

ログ行意味
Cache restored in {N}ms復元が完了したこと、およびその所要時間
Cache saved in {N}ms保存が完了したこと、およびその所要時間
Cache missその key のキャッシュが存在しなかったこと。cache-hitfalse となり、ジョブは続行します
Cache already exists for key=..., skipping save同一の key がすでに保存されているため、保存がスキップされたこと

探さなくてよいキャッシュ#

AI Scan はプロジェクトに必要なキャッシュを検出し、提案されるランナー設定に一覧表示します。また AI 最適化 PR は、マージ可能な状態でキャッシュステップを追加または置き換えてくれます。キャッシュを手作業で調整しないチームでも、キャッシュの恩恵を受けられます。

より広い技術 (インストール時間の短縮、遅いスイートの分割、並列化) については、Learn ライブラリに、任意のランナーで適用できるガイドを備えた実践的な CI 最適化ハブ があります。