Coockar

公開日: 約1分

CI のビルドキャッシュを見直す

依存インストールが CI 時間の大半を占めていたので、ロックファイルをキーにした層別キャッシュへ組み替えた。before/after の実測付き。

静的サイトの CI は「依存のインストール」「本体のビルド」「検証」の三層でできている。時間を計ってみると、全体二分半のうち依存インストールが一分四十秒と大半を占めていた。ここだけキャッシュすれば効果が最大になる。

キャッシュキーの設計

キャッシュはロックファイルのハッシュをキーにする。ロックファイルが変わらない限り依存ツリーは同一なので、安全に丸ごと復元できる。

  • キー: deps-${{ hashFiles('package-lock.json') }}
  • 復元対象: パッケージマネージャのストアディレクトリ
  • ロックファイル更新時だけ full install が走り、キャッシュが差し替わる

node_modules を直接キャッシュする方式は、OS やツールチェーンの更新で壊れた実績があったのでやめた。ストア経由の復元なら整合性チェックが働く。

実測

組み替え後、依存インストールは一分四十秒から十二秒になり、CI 全体では二分半から一分弱に縮んだ。ビルド本体のキャッシュ(画像最適化の成果物など)はヒット率が読みにくいため、次の段階として保留した。

まとめ

CI 高速化は「一番遅い層を測ってから、その層だけに手を入れる」のが結局早い。全層を一気にキャッシュ化すると、壊れたときの切り分けが難しくなる。