Claude Code で CI 待ち時間を 18 分から 4 分台に短縮する【GitHub Actions】
手法
e-dash のエンジニアが、Next.js(TypeScript) アプリの PR CI(GitHub Actions、ubuntu-latest 2CPU、テストは Vitest)が最長18分超に膨らんだため、まず Claude Code に実行時間の内訳を計測させた。結果、400秒のうちテスト本体は57秒(約14%)で、残りは起動オーバーヘッド(DOM不要のテストも含め全て jsdom で実行、jsdom起動だけで224秒)と、2CPUでワーカー1つの直列実行が原因と判明。対策は4つ。①Vitest projects で .ts は node 環境・.tsx は jsdom に分け、ワーカーを2並列に(テストのジョブ全体 約18分→約12分)、②マイグレーション適用済みDBを pg_dump して Actions キャッシュ化(DBセットアップ 約5分→約2分15秒)、③ユニットテストとインテグレーションテストを別ジョブにし --shard で2分割、カバレッジは blob レポートで合算(テスト関連の待ち時間 9分39秒→5分15秒)、④node_modules をキャッシュ復元(Node セットアップ 41〜47秒→17〜29秒)。キャッシュ増で Actions キャッシュが11.9GBとなり上限10GBを超えたため、Docker ビルドキャッシュを mode=min にするなどで1PRあたり約1.7GB(推定)→673MBに削減した。
示唆
AI コーディングエージェントでテストが増え CI が肥大化する副作用(テストファイル数は7月初め89→10月初め432)を、まず Claude Code に内訳を計測させることで特定した事例。ボトルネックはテスト本体(約14%)ではなく環境の起動オーバーヘッドで、施策を考える前に測ったことが最も効いたと筆者は述べている。記事で Claude Code が担ったと明記されているのは計測部分で、各施策の実装主体は本文からは判別できない。
成果・金額
PR CI の待ち時間: 長いときで18分超、中央値約15分 → 直近20本の中央値で約4分45秒(中央値比で約69%削減)。7月下旬の中央値は7分で、9月に約15分へ悪化していた。
引用
CI と同じ 2 CPU の環境で Vitest を計測すると、400 秒のうちテスト本体は 57 秒で、全体の 14% 程度でした。
出典: zenn.dev