CI/CD

クラウド | IT用語集

この用語をシェア

概要・定義

CI/CD(Continuous Integration/Continuous Delivery)は、ソフトウェア開発において、コードの統合・テスト・デプロイを自動化する開発手法です。CI(継続的インテグレーション)は、開発者が頻繁にコードを共有リポジトリに統合し、自動的にビルドとテストを実行する手法です。CD(継続的デリバリー)は、テスト済みのコードを自動的に本番環境にデプロイする手法です。

CI/CDは、DevOps文化の中核を担う重要な概念であり、2000年代初頭のExtreme Programming(XP)の実践から発展しました。現代のソフトウェア開発では、品質向上、リリース頻度の向上、リスク軽減を実現するために不可欠な手法となっています。

CI(継続的インテグレーション)

概要

開発者が頻繁に(通常は1日に数回)コードをメインブランチに統合し、統合のたびに自動的にビルドとテストを実行する開発手法です。

主要な特徴

  • 頻繁な統合: 小さな変更を頻繁に統合
  • 自動ビルド: コードのコミット時に自動的にビルド実行
  • 自動テスト: 単体テスト、統合テストの自動実行
  • 即座のフィードバック: 問題を早期に発見・修正

利点

  • 統合の問題を早期に発見
  • コード品質の向上
  • 開発効率の向上
  • リリース可能な状態の維持

CD(継続的デリバリー/継続的デプロイメント)

継続的デリバリー(Continuous Delivery)

CIで検証されたコードを、手動承認を経て本番環境にデプロイできる状態に自動的に準備する手法です。

継続的デプロイメント(Continuous Deployment)

テストをパスしたコードを、人間の介入なしに自動的に本番環境にデプロイする手法です。

主要な特徴

  • 自動デプロイ: 承認プロセスを経た自動デプロイ
  • 環境の一貫性: 開発から本番まで一貫した環境
  • ロールバック機能: 問題発生時の迅速な復旧
  • リリース戦略: Blue-Green、Canary等の安全なリリース

CI/CDパイプラインの構成

典型的なパイプライン

  1. ソースコード管理: Git等でのコード管理
  2. ビルド: コードのコンパイル・パッケージ化
  3. テスト: 単体テスト、統合テスト、E2Eテスト
  4. 静的解析: コード品質、セキュリティチェック
  5. アーティファクト作成: デプロイ用成果物の作成
  6. ステージング環境デプロイ: 本番環境への前段階
  7. 承認プロセス: 手動または自動承認
  8. 本番環境デプロイ: 実際のリリース
  9. 監視・検証: デプロイ後の動作確認

主要なCI/CDツール

クラウドベースCI/CD

  • GitHub Actions: GitHub統合型CI/CD
  • GitLab CI/CD: GitLab統合型CI/CD
  • Azure DevOps: Microsoft提供のDevOpsプラットフォーム
  • AWS CodePipeline: AWS提供のCI/CDサービス
  • Google Cloud Build: Google Cloud提供のCI/CDサービス

オンプレミス・セルフホスト

  • Jenkins: オープンソースの定番CI/CDツール
  • CircleCI: クラウド・オンプレミス両対応
  • TeamCity: JetBrains製のCI/CDツール
  • Bamboo: Atlassian製のCI/CDツール

実装例

GitHub Actions ワークフロー

# .github/workflows/ci-cd.yml
name: CI/CD Pipeline

on:
  push:
    branches: [ main, develop ]
  pull_request:
    branches: [ main ]

jobs:
  test:
    runs-on: ubuntu-latest
    
    steps:
    - uses: actions/checkout@v3
    
    - name: Setup Node.js
      uses: actions/setup-node@v3
      with:
        node-version: '18'
        cache: 'npm'
    
    - name: Install dependencies
      run: npm ci
    
    - name: Run tests
      run: npm test
    
    - name: Run linting
      run: npm run lint
    
    - name: Run security audit
      run: npm audit
  
  build:
    needs: test
    runs-on: ubuntu-latest
    
    steps:
    - uses: actions/checkout@v3
    
    - name: Setup Node.js
      uses: actions/setup-node@v3
      with:
        node-version: '18'
        cache: 'npm'
    
    - name: Install dependencies
      run: npm ci
    
    - name: Build application
      run: npm run build
    
    - name: Build Docker image
      run: docker build -t myapp:${{ github.sha }} .
    
    - name: Push to registry
      run: |
        echo ${{ secrets.DOCKER_PASSWORD }} | docker login -u ${{ secrets.DOCKER_USERNAME }} --password-stdin
        docker push myapp:${{ github.sha }}
  
  deploy:
    needs: build
    runs-on: ubuntu-latest
    if: github.ref == 'refs/heads/main'
    
    steps:
    - name: Deploy to production
      run: |
        # デプロイスクリプトの実行
        kubectl set image deployment/myapp myapp=myapp:${{ github.sha }}

メリット・デメリット

メリット

  • バグや統合の問題を早期に発見でき、修正コストを抑えられる
  • リリース作業が自動化・標準化され、人為的ミスが減る
  • リリース頻度を高められ、ユーザーへの価値提供サイクルが短縮される
  • テストやビルドの実行履歴が残り、品質のトレーサビリティが向上する

デメリット・注意点

  • 初期構築コスト: パイプラインの設計・テスト自動化の整備には一定の工数が必要で、テストが不十分なプロジェクトほど導入効果が出にくい
  • 誤った自動デプロイのリスク: テストカバレッジが低い状態で継続的デプロイを行うと、不具合が本番環境に即座に反映されてしまう
  • 運用・保守負荷: パイプライン自体も設定ファイルとして管理・保守する対象になり、複雑化すると理解できるメンバーが限られてしまうことがある
  • 実行時間の増大: プロジェクトが大きくなるとビルド・テストの実行時間が伸び、開発体験を損なう場合がある(キャッシュや並列実行での対策が必要)

主要CI/CDツールの比較

項目GitHub ActionsGitLab CI/CDJenkinsCircleCI
ホスティング形態クラウド(GitHub統合)クラウド/セルフホスト主にセルフホストクラウド/セルフホスト
設定ファイルYAML(.github/workflows)YAML(.gitlab-ci.yml)Groovy(Jenkinsfile)YAML(config.yml)
特徴GitHubリポジトリとの親和性、豊富なMarketplaceGitリポジトリ管理からCI/CDまで一体型プラグインが豊富、カスタマイズ性が高い高速な並列実行、シンプルな設定
向いている用途GitHubでコード管理しているプロジェクト全般GitLabで一元管理したいチーム複雑な既存パイプライン、オンプレミス要件高速なビルド・テストを重視するチーム

実務での活用シーン・導入時の注意点

代表的な活用シーン

  • Webアプリ・APIの継続的リリース: mainブランチへのマージをトリガーに、テスト・ビルド・本番デプロイを自動実行
  • モバイルアプリのビルド自動化: iOS/Androidのビルド・署名・ストア申請プロセスの自動化
  • インフラのCI/CD(GitOps): Terraformコードの変更をトリガーに、plan/applyを自動実行
  • セキュリティチェックの自動化: 依存パッケージの脆弱性スキャンやSAST(静的解析)をパイプラインに組み込む

導入時に気をつけたいポイント

  • まずはCI(自動テスト・ビルド)から着手し、信頼性が確認できてから段階的にCD(自動デプロイ)へ拡張する
  • 本番デプロイには承認ステップやカナリアリリースなど、リスクを抑える仕組みを組み込む
  • シークレット(APIキー等)はパイプライン内にハードコードせず、GitHub SecretsなどのSecret管理機能を利用する

外部リンク

関連用語

この用語についてもっと詳しく

CI/CDに関するご質問や、システム導入のご相談など、お気軽にお問い合わせください。

よくある質問(FAQ)

Q. CI(継続的インテグレーション)とCD(継続的デリバリー)は別々に導入できますか

はい、CIとCDは独立して段階的に導入できます。まずはCIとして「コミットごとに自動ビルド・自動テストを実行する」仕組みから始め、テストの信頼性が確保できた段階でCD(自動デプロイ)に拡張するのが実務上一般的なアプローチです。いきなり本番への自動デプロイまで導入するのはリスクが高いため、段階的な導入が推奨されます。

Q. 継続的デリバリーと継続的デプロイメントの違いは何ですか

継続的デリバリー(Continuous Delivery)は、テスト済みのコードをいつでも本番環境にデプロイできる状態に保ちますが、実際のデプロイには手動承認を挟みます。継続的デプロイメント(Continuous Deployment)は、テストをパスしたコードを人間の介入なしに自動的に本番環境へデプロイします。リリースのタイミングを人間がコントロールしたい場合は継続的デリバリー、完全自動化を目指す場合は継続的デプロイメントを選択します。

Q. 小規模なチームでもCI/CDを導入すべきですか

規模に関わらず導入するメリットがあります。GitHub ActionsやGitLab CI/CDはリポジトリに設定ファイルを1つ追加するだけで始められ、無料枠も充実しているため、小規模チームや個人開発でも低コストで導入できます。最初はLint(静的解析)とテストの自動実行程度から始め、慣れてきたらデプロイの自動化に広げていくとよいでしょう。

Q. CI/CDパイプラインが遅い場合はどう改善すればよいですか

主な対策として、依存パッケージのキャッシュ活用(npm ci、Dockerレイヤーキャッシュ等)、テストの並列実行、変更のあったモジュールのみをビルド・テストする差分実行、不要なステップの削減などが挙げられます。GitHub Actionsではジョブを複数に分割してmatrix戦略で並列化することも有効です。

Q. 2025-2026年のCI/CDの最新動向は

AIコーディングアシスタント(GitHub Copilot等)によるパイプライン設定の自動生成やレビュー支援、サプライチェーンセキュリティ強化(SBOM生成、依存パッケージの署名検証)、そしてTerraform等と組み合わせたGitOpsによるインフラ変更の自動化が進んでいます。

カテゴリ

クラウド IT用語集