CI/CDの基礎

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分以内を目標
  • テスト失敗時は最優先で修正
  • デプロイの自動化と標準化
  • ロールバック手順の確立