ワークフローとキャッシュの流れ
ワークフロー開始
↓
ステップ:node_modulesのキャッシュが存在するか、キャッシュのキーをもとに確認
- 初回ワークフロー実行時もしくは、package-lock.jsonに変更があった場合はキャッシュが存在しない判定になる
↓
ステップ:依存関係のインストール
- キャッシュがなければ、npm install実行して依存関係をインストールしnode_modulesディレクトリ生成
- キャッシュがあれば、キャッシュからリストアして、このステップを飛ばす
↓
テスト実行など
↓
ステップ:キャッシュのポスト
- キャッシュを生成する。生成の際は一意のキーを持たせるため、package-lock.jsonをハッシュ化した値とOS環境情報などを組み合わせる
- 初回ワークフロー実行時または、package-lock.jsonの値に変更があれば、キャッシュのポストが実行され、lockファイルに変更がなければ実行されないようになっている(依存関係に変更がなければ同じキャッシュを使用する)
設定手順
actions/cacheという専用のアクションがあるので、こちらを使用する
ymlファイル例
あくまでも一例なので参考程度に。

Build software better, together
GitHub is where people build software. More than 100 million people use GitHub to discover, fork, and contribute to over 330 million projects.
ポイント
重要なポイントのみ抜粋します
- キャッシュの対象をpathに指定
- keyには、osの情報や環境情報とpackage-lock.jsonのキャッシュファイルを組み合わせた値を指定する
- idは後ほど、依存関係のインストールを行うか行わないかの判定の際に使用する
jobs:
test:
steps:
- name: Cache dependenciesuses
uses: actions/cache@v3
id: node_modules_cache_id
env:
cache-name: cache-node-modules
with:
path: node_modules
key: ${{ runner.os }}-npm-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }}
- actions/cacheの結果はcache-hitというキーに真偽値としてセットされるので、これを使用して、npm installを実行するか、スキップするかを分岐させる
・・・
- name: Install npm package
if: ${{ steps.node_modules_cache_id.outputs.cache-hit != 'true' }}
run: npm install
- name: Run test
run: npm run test
- キャッシュありの場合は、npm installがスキップされ、キャッシュがヒットするので、ワークフローの最後でポストされない


- キャッシュなしの場合は、npm installが実行され、キャッシュがヒットしないので、ワークフローの最後でポストされる


Git学習におすすめの書籍
Javascript学習におすすめの書籍