1. まずCIで何を担保したいかを決める
最初に考えるべきなのは、「何を自動化したいのか」です。
例えば、
- ビルドが通ること
- テストが通ること
- Lintエラーがないこと
- フォーマットが崩れていないこと
目的が曖昧なまま作ると、不要なジョブが増えてメンテナンスしづらくなります。
2. 実行タイミングを決める
CIはどのタイミングで実行するかも重要です。
例えば、
pull_requestpushworkflow_dispatch
すべてで実行すると無駄な実行が増えることもあります。
3. ジョブは役割ごとに分ける
例えば、
- Lint
- Test
- Build
を分けておくと、「何が失敗したのか」がすぐ分かります。
4. 実行時間を短くする
CIは毎回実行されるので、
- キャッシュを使う
- 不要な処理を省く
- 並列実行する
などを意識すると開発体験が良くなります。
5. Secretsをコードに書かない
APIキーやトークンは必ずSecretsで管理します。
CIは多くの人が触るので、セキュリティも重要です。
6. ローカルでも再現できるようにする
CIだけ成功してローカルでは失敗する状態は避けたいところです。
CIで実行しているコマンドは、
- npm run lint
- npm test
- npm run build
のようにローカルでもそのまま実行できる構成がおすすめです。
7. 最初から作り込みすぎない
CIは運用しながら育てるものです。
最初から複雑なワークフローを作るより、
- Lint
- Test
- Build
くらいから始めて、必要になったら追加していく方が保守しやすくなります。
まとめ
CIは「GitHub Actionsを書くこと」が目的ではなく、
- 品質を保つ
- 開発効率を上げる
- レビューしやすくする
ための仕組みです。
ツールよりも、「何を自動化したいのか」「開発チームにとって使いやすいか」を意識して設計することが大切です。