CI
Continuous Integration の略で、コードの変更を頻繁に統合し自動テストで品質を保証する手法
DevOps自動化
CI とは
CI (Continuous Integration) は、コードの変更を頻繁にメインブランチに統合し、自動ビルド・自動テストで品質を保証する手法である。Martin Fowler が 2006 年に体系化。詳細は「CI/CD」を参照。
CI の基本フロー
1. 開発者がコードをコミット・プッシュ
2. CI サーバーが変更を検知
3. 自動ビルド
4. 自動テスト (ユニット、リント、型チェック)
5. 結果を通知 (成功 / 失敗)
GitHub Actions での CI
name: CI
on:
push:
branches: [main]
pull_request:
branches: [main]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with: { node-version: 22, cache: npm }
- run: npm ci
- run: npx tsc --noEmit # 型チェック
- run: npx eslint . # リント
- run: npm test # テスト
- run: cfn-lint template.yaml # IaC 検証
CI で実行すべきチェック
| チェック | ツール | 目的 |
|---|---|---|
| 型チェック | TypeScript | 型エラーの検出 |
| リント | ESLint | コード品質 |
| ユニットテスト | Vitest, Jest | ロジックの検証 |
| IaC 検証 | cfn-lint | テンプレートの検証 |
| セキュリティ | npm audit | 脆弱性の検出 |
CI のベストプラクティス
CI は 5 分以内に完了させ、遅いとフィードバックが遅延する。ブランチ保護で CI 通過を必須にし、node_modules のキャッシュやテストの並列実行で高速化する。失敗時は Slack やメールで即時通知する。
CI の高速化
# キャッシュで npm ci を高速化
- uses: actions/setup-node@v4
with:
node-version: 22
cache: npm # node_modules をキャッシュ
# テストの並列実行
- run: npm test -- --shard=1/3
- run: npm test -- --shard=2/3
- run: npm test -- --shard=3/3
CI vs CD
| 概念 | 説明 |
|---|---|
| CI | コミットごとに自動ビルド・テスト |
| CD (Delivery) | 本番デプロイ可能な状態を維持 |
| CD (Deployment) | テスト通過で自動デプロイ |
現場での応用を知るには関連書籍も役立つ。