依存関係のキャッシュによるビルド高速化
actions/cacheアクション、キー、restore-keysを使って依存関係とビルド成果物をキャッシュし、CIパイプラインを高速化します。
「依存関係のキャッシュによるビルド高速化」はCoddyKit上の無料DevOps Bootcampレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはDevOps Bootcamp学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 DevOps Bootcampコースには全4レッスンが含まれています。
再インストールのコスト
CI にかかる時間の大部分は、実行のたびに同じ依存関係をダウンロードしてインストールすることに費やされます。キャッシュを使うと実行間で依存関係を保存できるため、後続のビルドで処理を再利用でき、パイプラインの時間を大幅に短縮できることがあります。
cache アクション
GitHub にはactions/cacheが用意されています。キャッシュするパスと、キャッシュエントリを識別するキーを指定します。ヒットするとパスが復元され、ヒットしなければジョブの終了後に保存されます。
- uses: actions/cache@v4
with:
path: ~/.npm
key: npm-${{ hashFiles('package-lock.json') }}適切なキーの設計
キーは、キャッシュする内容が変わるときだけ変更されるようにします。ロックファイルのハッシュを使うのが理想的です。新しいロックファイルは新しい依存関係を意味するため、新しいキャッシュエントリが作成されます。
key: ${{ runner.os }}-npm-${{ hashFiles('**/package-lock.json') }}復元キー
restore-keysはフォールバック用のプレフィックスを提供します。完全一致するキーが見つからない場合、アクションはキーがそのプレフィックスで始まる最新のキャッシュを復元し、部分的に準備済みの状態から開始できます。
restore-keys: |
${{ runner.os }}-npm-キャッシュヒットとキャッシュミス
キーが完全一致するとキャッシュヒットとなり、パスが復元されます。キャッシュミスの場合、ジョブは通常どおり実行され、終了時にプライマリキーを使ってキャッシュが保存されるため、次回から利用できます。
組み込みのセットアップキャッシュ
言語のセットアップアクションにはキャッシュ機能が組み込まれています。Node では、cache: npmを指定したsetup-nodeが依存関係のキャッシュを処理するため、個別のキャッシュステップは必要ありません。
- uses: actions/setup-node@v4
with:
node-version: 20
cache: npm何をキャッシュするか
可能な場合は、インストール済みのnode_modulesではなく、パッケージマネージャーのダウンロードディレクトリをキャッシュします。ダウンロードキャッシュは移植性があり、インストールステップで整合性の検証も行われるためです。
- Node:
~/.npm - Python: pip キャッシュ
- Java:
~/.m2または Gradle キャッシュ
キャッシュのスコープと制限
キャッシュのスコープはブランチごとに設定されます(デフォルトブランチへのフォールバックあり)。また、リポジトリごとにサイズ制限があります。使用されていないキャッシュは時間の経過とともに削除されるため、適切に入れ替わるキーを設計してください。
古いキャッシュの回避
キーが一度も変わらないと、古い依存関係が使われる可能性があります。キーは必ずロックファイルのハッシュに関連付け、更新時にキャッシュが自動的に無効になるようにしてください。
キーに含めるマトリックスと OS
OS やバージョンをまたぐマトリックスビルドでは、キーにrunner.osとバージョンを含めます。これにより各バリエーションに適切なキャッシュが割り当てられ、キャッシュ同士が衝突するのを防げます。
key: ${{ runner.os }}-node20-${{ hashFiles('package-lock.json') }}効果の測定
キャッシュ導入前後のジョブの実行時間を比較し、ログのキャッシュヒットインジケーターを確認します。ヒット率が継続的に低い場合は、キーが頻繁に変わりすぎている可能性があります。
クイックチェック
依存関係のキャッシュについての理解度を確認します。
まとめ
依存関係のキャッシュによって CI を高速化しました。ロックファイルのハッシュを使ったキーとrestore-keysのフォールバックを設定したactions/cacheアクション、セットアップアクションの組み込みキャッシュ、キャッシュ対象の選択、マトリックスのキーへの OS とバージョンの追加、そしてキーをロックファイルに関連付けて古いキャッシュを避ける方法を学びました。
よくある質問
「依存関係のキャッシュによるビルド高速化」レッスンは無料ですか?
はい。「依存関係のキャッシュによるビルド高速化」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、DevOps Bootcampコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 DevOps Bootcampコースには全4レッスンが含まれています。
「依存関係のキャッシュによるビルド高速化」で何を学びますか?
actions/cacheアクション、キー、restore-keysを使って依存関係とビルド成果物をキャッシュし、CIパイプラインを高速化します。 ブラウザで直接実行するハンズオンコードでDevOps Bootcampを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
DevOps Bootcampを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのDevOps Bootcampは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。
「依存関係のキャッシュによるビルド高速化」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このDevOps Bootcampレッスンでコードを書いて実行できますか?
はい。すべてのDevOps Bootcampレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- ワークフローのトリガーとイベント
- GitHub Actions によるテスト実行
- Lint とコード品質チェック
- 依存関係のキャッシュによるビルド高速化