
CI/CDとは
CI/CDの定義
CI (Continuous Integration / 継続的インテグレーション)
開発者がコードを頻繁に共有リポジトリに統合し、自動的にビルドとテストを実行する開発手法です。コードの変更が発生するたびに問題を早期発見します。
CD (Continuous Delivery / 継続的デリバリー)
ソフトウェアをいつでも本番環境にリリースできる状態に保つ手法です。本番リリースは手動承認を経て実施します。
CD (Continuous Deployment / 継続的デプロイメント)
すべてのテストを通過したコードを、人間の介入なしに自動的に本番環境へデプロイします。
CI/CDが解決する課題
従来の問題点
- コード統合作業が複雑で時間がかかる
- バグ発見が遅れ、修正コストが高い
- デプロイが手作業で環境差異による障害が発生
- リリース頻度が低く、一度に大量の変更が入る
CI/CDによる改善
- 小さな変更を頻繁にリリースしてリスク分散
- 自動テストで品質を継続的に担保
- デプロイ作業の標準化で人的ミス削減
- 問題の早期発見・早期解決でコスト削減
CI/CDパイプラインの基本フロー
| ステージ | 内容 |
|---|---|
| Source ステージ | ソース取得 |
| Build ステージ | ビルド・単体テスト |
| Test ステージ | 統合テスト |
| Deploy to Dev ステージ | 開発環境デプロイ |
| Deploy to Staging ステージ | ステージング環境デプロイ・E2Eテスト |
| Manual Approval ステージ | 承認 |
| Deploy to Production ステージ | 本番環境デプロイ |
テスト戦略
テストの実行タイミング
- 単体テスト: ビルド時
- 統合テスト: デプロイ前
- E2Eテスト: ステージング環境
テストピラミッド
- 単体テスト: 多い(高速で詳細)
- 統合テスト: 中程度(複数コンポーネント)
- E2Eテスト: 少ない(遅いが包括的)
ブランチ戦略
Git Flow(複雑だが厳格)
- main: 本番リリース用
- develop: 開発の主流
- feature/: 機能開発 release/: リリース準備
- hotfix/*: 緊急修正
GitHub Flow(シンプル)
- main: 常にデプロイ可能
- feature/*: 機能ブランチから直接mainへ
Trunk-Based Development
- mainブランチ中心の開発
- 短命なブランチ(1日以内)
CI/CDのベストプラクティス
- 小さく頻繁なコミット
- mainブランチは常にデプロイ可能な状態に保つ
- ビルドは10分以内を目標
- テスト失敗時は最優先で修正
- デプロイの自動化と標準化
- ロールバック手順の確立