CI
Continuous Integration の略で、コードの変更を頻繁に統合し自動テストで品質を保証する手法
CI とは
CI (Continuous Integration) は、コードの変更を頻繁にメインブランチに統合し、自動ビルド・自動テストで品質を保証する手法である。Martin Fowler が 2006 年に体系化。詳細は「CI/CD」を参照。
CI の基本フロー
CI の基本フローを図で示す。
1. 開発者がコードをコミット・プッシュ
2. CI サーバーが変更を検知
3. 自動ビルド
4. 自動テスト (ユニット、リント、型チェック)
5. 結果を通知 (成功 / 失敗)
GitHub Actions での CI
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 で実行すべきチェック
CI で実行すべきチェックを以下にまとめる。
| チェック | ツール | 目的 |
|---|---|---|
| 型チェック | TypeScript | 型エラーの検出 |
| リント | ESLint | コード品質 |
| ユニットテスト | Vitest, Jest | ロジックの検証 |
| IaC 検証 | cfn-lint | テンプレートの検証 |
| セキュリティ | npm audit | 脆弱性の検出 |
CI のベストプラクティス
CI は 5 分以内に完了させ、遅いとフィードバックが遅延する。ブランチ保護で CI 通過を必須にし、node_modules のキャッシュやテストの並列実行で高速化する。失敗時は Slack やメールで即時通知する。
CI の高速化
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 の違いを以下にまとめる。
| 概念 | 説明 |
|---|---|
| CI | コミットごとに自動ビルド・テスト |
| CD (Delivery) | 本番デプロイ可能な状態を維持 |
| CD (Deployment) | テスト通過で自動デプロイ |
現場での応用を知るには関連書籍も役立つ。
この記事は役に立ちましたか?
関連用語
CI/CD
コードの変更を自動的にビルド・テスト・デプロイするパイプライン
GitHub Actions
GitHub に統合された CI/CD プラットフォームで、ワークフローを YAML で定義して自動実行する
SAST/DAST
ソースコードの静的解析と実行中のアプリケーションの動的解析によるセキュリティテスト
シフトレフトセキュリティ
セキュリティ対策を開発ライフサイクルの早い段階 (左側) に組み込むアプローチ
GitOps
Git リポジトリを唯一の正として、インフラとアプリケーションの状態を宣言的に管理する運用手法
静的解析
コードを実行せずにソースコードを解析し、バグ・脆弱性・スタイル違反を検出するツール
関連する記事
テスト本ガイド - テスト設計を学べる技術書の選び方
テストの書き方からテスト戦略まで学べる技術書の選び方を紹介。テストピラミッド、TDD の正しい読み方、テストの ROI の考え方を解説します。
バグを生むのは知識不足ではなく想像力不足である
バグの多くは、コードを書いた時点で「こういうケースもありうる」と想像できなかったことが原因です。想像力を鍛える読書法と、エッジケースへの感度を高める方法を解説します。
「動くコード」と「良いコード」の間にある本
コードが動くようになった後、次に何を学べばよいのか。「動くコード」を「良いコード」に変えるために必要な知識と、それを効率的に学べる本の選び方を解説します。