CI/CDは作って終わりではない
CI/CDを組めると評価されます。未経験や転職準備中のポートフォリオでも、PR時にlint、test、buildが自動で走るだけで印象は変わります。
ただし、実務ではもう一段あります。
CI/CDは「動くか」だけでなく、「開発の邪魔をしない速さか」も重要です。
チェックが正しくても、毎回長時間待たされると開発速度に影響します。
遅いCIはじわじわ効く
たとえば、PR作成時に次の処理が走るとします。
install: 2分
lint: 3分
typecheck: 2分
test: 4分
build: 3分
合計: 14分
1回だけなら待てます。しかし、PRレビューでは何度も修正が入ります。
1回目のPR -> CI待ち
レビュー修正 -> CI待ち
追加修正 -> CI待ち
merge前確認 -> CI待ち
小さな待ち時間が、チーム全体の開発速度を落とします。
コミット時のhookも同じ
CIだけでなく、コミット時のhookも開発体験に影響します。
git commit
-> lint
-> format
-> typecheck
-> test
ここで毎回数分待つと、開発者はhookを避けたくなります。結果として、品質チェックが形骸化します。
pre-commit hookでは、軽い処理だけを高速に実行するのが基本です。
| 場所 | 向いている処理 |
|---|---|
| pre-commit | 変更ファイルのformat、lint |
| pre-push | 短いtest、typecheck |
| PR CI | lint、typecheck、unit test、build |
| main CI | deploy、E2E、重い検証 |
全部を毎回走らせると、品質より待ち時間が目立ちます。
速くするだけで喜ばれる
CI/CD高速化は、地味ですが実務でかなり喜ばれます。
理由:
- PRレビューが早く回る
- 小さな修正を出しやすくなる
- 開発者がhookを無効化しにくくなる
- デプロイ待ちが短くなる
- チーム全体の心理的負担が減る
機能追加と違って目立ちにくいですが、毎日使う開発基盤なので効果が積み上がります。
見るべき時間
CI/CDで見る時間は、合計時間だけではありません。
| 指標 | 意味 |
|---|---|
| install時間 | 依存関係の復元にかかる時間 |
| lint時間 | 静的解析にかかる時間 |
| test時間 | テスト実行時間 |
| build時間 | 本番ビルド時間 |
| queue時間 | runner待ち |
| retry回数 | 不安定さ |
| 最頻パス | 普段のPRで一番通るルート |
たまに走る重いE2Eより、毎回走るlintやtypecheckの方が開発速度に効くことがあります。
高速化の基本方針
速くする方法は、大きく4つです。
| 方針 | 例 |
|---|---|
| 減らす | 不要なjobを動かさない |
| 絞る | 変更ファイルだけlintする |
| 並列化する | lint、test、buildを別jobにする |
| 再利用する | cache、artifactを使う |
特に効果が出やすいのは、依存関係キャッシュ、変更ファイル対象のlint、job分割、古いCIのキャンセルです。
HuskyからLefthookという選択肢
コミット時hookの高速化では、HuskyからLefthookへの移行が選択肢になります。
LefthookはGo製のツールで、hookの起動が軽く、コマンドの並列実行もしやすいです。
Husky構成では、npx、npm run、lint-staged などを組み合わせることが多く、設定次第で直列実行が増えたり、Node.jsプロセス起動が重なったりします。
Lefthookへ移行すると、プロジェクトによっては体感できるレベルでpre-commitが速くなることがあります。
ポートフォリオで見せる価値
ポートフォリオでは、最初から完璧なCIを作る必要はありません。
おすすめの流れ:
1. GitHub Actionsでlint/test/buildを自動化
2. Husky + lint-stagedでpre-commitを導入
3. 実行時間を測る
4. Lefthookへ移行
5. before/afterをREADMEに書く
これができると、「CI/CDを入れた人」から「開発体験まで改善した人」に見えます。
まとめ
CI/CDは、品質を守る仕組みです。しかし、遅すぎるCI/CDは開発速度を落とします。
- PRやcommit時の待ち時間は積み上がる
- pre-commitでは軽い処理だけを高速に回す
- PR CIとmain CIで責務を分ける
- cache、並列化、変更ファイル対象化が効く
- HuskyからLefthookへの移行も有効な選択肢
- ポートフォリオではbefore/afterを見せると強い
CI/CDを組めるだけでなく、速さまで意識できると一段上に見られます。