1. CD入門 MOC

2. 継続的インテグレーション (Continuous Integration - CI) MOC

2.1. CIの基本原則とプラクティス MOC

  • CIの定義 (開発者が変更を頻繁に中央リポジトリにマージし、自動ビルドとテストを実行するプラクティス)
  • CIの主要な原則
    • [[単一のソースリポジトリの維持 (バージョン管理)]]
    • [[ビルドの自動化]]
    • [[テストの自動化]]
    • [[全員が毎日メインラインにコミットする (または頻繁に)]]
    • [[全てのコミットでメインラインのビルドとテストを実行する]]
    • [[ビルドとテストの結果を迅速にフィードバックする]]
    • [[壊れたビルドは最優先で修正する ("Fix the build immediately")]]
    • [[最新の実行可能ファイルを常に維持する]]
    • [[本番環境と同等のテスト環境の用意]]
    • [[誰でも最新の成果物を簡単に入手できる]]
    • [[全員がビルドとテストの結果を確認できる]]
    • [[デプロイメントの自動化 (CIの拡張としてのCD)]]
  • CIのアンチパターン
    • [[頻繁でないインテグレーション]]
    • [[壊れたビルドの放置]]
    • [[自動テストの不足または信頼性の低いテスト]]
    • [[遅いビルドとテスト]]
    • [[コメントアウトされたテスト]]
    • [[ローカルでのみ成功するビルド]]

2.2. CIのワークフローとプロセス MOC

2.3. CIの利点と課題 MOC

  • CIの利点
    • [[バグの早期発見と修正コストの削減]]
    • [[コード品質の向上]]
    • [[開発サイクルの短縮]]
    • [[チームのコラボレーション促進]]
    • [[リリースの準備が常にできている状態 (部分的に)]]
  • CIの課題
    • [[初期設定とメンテナンスのコスト]]
    • [[適切なテスト戦略の設計と実装]]
    • [[ビルドとテスト時間の管理]]
    • [[CIツールの選定と学習]]
    • [[チームの規律と文化の必要性]]

3. 継続的デリバリー (Continuous Delivery - CDelivery) MOC

3.1. CDeliveryの基本原則とプラクティス MOC

  • CDeliveryの定義 (CIを拡張し、ソフトウェアの変更が自動的にテストされ、本番環境へのリリース準備が整った状態を常に維持するプラクティス)
  • CDeliveryとCDeploymentの違い (本番へのデプロイが手動か自動か)
  • CDeliveryの主要な原則
    • [[リリースのための全てのプロセスを自動化する]]
    • [[常にリリース可能な状態を維持する]]
    • [[誰でもワンクリックで (または簡単な手順で) 本番環境にデプロイできる]]
    • [[デプロイメントパイプラインの構築]]
    • [[品質保証の組み込み (様々なテストフェーズ)]]
    • [[フィードバックループの重視]]
    • [[インクリメンタルなリリース]]
    • [[全員が責任を持つ文化]]

3.2. CDeliveryのデプロイメントパイプライン MOC

  • デプロイメントパイプラインとは (ソフトウェアがバージョン管理から本番ユーザーの手に渡るまでの自動化されたプロセス)
  • 典型的なパイプラインステージ
    • [[コミットステージ (Commit Stage)]] (CIのビルドとユニット/インテグレーションテスト)
    • [[受け入れテストステージ (Acceptance Test Stage)]]
      • [[本番に近い環境での自動受け入れテスト (UIテスト、APIテスト、E2Eテスト)]]
      • [[ユーザーストーリー/フィーチャーの検証]]
    • [[UATステージ (User Acceptance Test Stage) / 手動テストステージ]] (オプション、ビジネスによる検証)
    • [[パフォーマンステストステージ (Performance Test Stage) / 負荷テストステージ]]
    • [[セキュリティテストステージ (Security Test Stage)]]
    • [[リリース準備ステージ (Release Staging)]] (最終的なビルド、リリース候補の作成)
    • [[本番デプロイステージ (Production Deployment)]] (CDeliveryでは手動トリガー、CDeploymentでは自動)
  • パイプラインの可視化と監視
  • パイプラインの高速化と最適化

3.3. CDeliveryの利点と課題 MOC

  • CDeliveryの利点
    • [[リリースのリスクと複雑性の低減]]
    • [[より迅速で頻繁なリリース]]
    • [[高品質なソフトウェア]]
    • [[開発者の生産性向上 (手動作業からの解放)]]
    • [[顧客への価値提供の高速化]]
  • CDeliveryの課題
    • [[高度な自動化とテスト戦略の必要性]]
    • [[環境管理の複雑性]]
    • [[組織文化の変革]]
    • [[データベース変更管理の難しさ]]
    • [[既存システムへの適用]]

4. 継続的デプロイメント (Continuous Deployment - CDeployment) MOC

4.1. CDeploymentの基本原則とプラクティス MOC

  • CDeploymentの定義 (CDeliveryをさらに進め、全ての変更が自動的にテストされ、問題がなければ自動的に本番環境にデプロイされるプラクティス)
  • CDeploymentとCDeliveryの明確な違い (本番デプロイの自動化)
  • CDeploymentの主要な原則
    • [[全ての変更が自動的に本番にデプロイされる]]
    • [[非常に高いレベルのテスト自動化と信頼性]]
    • [[堅牢な監視とロールバック戦略]]
    • [[フィーチャーフラグ (Feature Flags) の活用]]
    • [[段階的リリース戦略 (Canary, Blue/Greenなど)]]

4.2. CDeploymentのパイプラインと要件 MOC

4.3. CDeploymentの利点と課題 MOC

  • CDeploymentの利点
    • [[リードタイムの極限までの短縮]]
    • [[小さな変更単位での迅速なフィードバック]]
    • [[開発者のデプロイ作業からの完全な解放]]
  • CDeploymentの課題とリスク
    • [[非常に高いテスト品質とカバレッジが必須]]
    • [[障害発生時の影響が大きい可能性 (迅速なロールバックが重要)]]
    • [[導入と維持のための高度な技術と文化]]
    • [[全ての種類のアプリケーションに適しているわけではない]]

5. CDパイプラインの構築と管理要素 MOC

5.1. パイプライン・アズ・コード (Pipeline as Code) MOC

5.2. ビルド自動化 (Build Automation) MOC

5.3. CD) MOC

  • テストピラミッド (Test Pyramid) (ユニット、インテグレーション、E2E/UIテストのバランス)
  • [[ユニットテストの自動実行]]
  • [[インテグレーションテストの自動実行]]
  • [[受け入れテスト (E2Eテスト、UIテスト) の自動実行]]
    • [[Selenium, Cypress, Playwrightなどのツール]]
  • [[APIテストの自動実行]] (Postman/Newman, RestAssuredなど)
  • [[パフォーマンステストの自動実行]] (JMeter, k6, Gatlingなど)
  • [[セキュリティテストの自動実行 (SAST, DAST, IAST)]]
  • [[契約テスト (Contract Testing)]] (Pactなど)
  • [[テスト結果の集約とレポート]]

5.4. デプロイ自動化 (Deployment Automation) MOC

5.5. CD) MOC

5.6. CD) MOC

5.7. CD - DevSecOps) MOC

  • DevSecOpsの原則 (セキュリティをライフサイクル全体に統合)
  • パイプラインにおけるセキュリティプラクティス
    • [[静的アプリケーションセキュリティテスト (SAST)]]
    • [[動的アプリケーションセキュリティテスト (DAST)]]
    • [[インタラクティブアプリケーションセキュリティテスト (IAST)]]
    • [[ソフトウェアコンポジション解析 (SCA - 依存関係の脆弱性スキャン)]]
    • [[コンテナイメージスキャン]]
    • [[Infrastructure as Code のセキュリティスキャン]]
    • [[シークレット管理 (Secrets Management)]] (Vault, Kubernetes Secretsなど)
    • [[職務分掌とアクセス制御 (IAM)]]
    • [[監査ログ]]
  • CD

5.8. アーティファクト管理 (Artifact Management) MOC

6. CDツールとテクノロジー MOC (カテゴリ別主要ツール再掲・詳細)

  • バージョン管理システム (VCS): [[Git]], [[GitHub]], [[GitLab]], [[Bitbucket]]
  • CI/CDサーバー/プラットフォーム: [[Jenkins]], [[GitLab CI/CD]], [[GitHub Actions]], [[CircleCI]], [[Travis CI]], [[Azure DevOps Pipelines]], [[AWS CodePipeline]], [[Google Cloud Build]], [[TeamCity]], [[Bamboo]]
  • ビルドツール: [[Maven]], [[Gradle]], [[npm/yarn]], [[Webpack]], [[MSBuild]], [[Make]], [[Ant]]
  • テストフレームワーク: (各言語のxUnit系), [[Selenium]], [[Cypress]], [[Playwright]], [[Appium]], [[Jest]], [[Mocha]], [[PyTest]], [[RSpec]]
  • コンテナ技術: [[Docker]], [[containerd]], [[Podman]]
  • コンテナオーケストレーション: [[Kubernetes (K8s)]], [[Docker Swarm]], [[Amazon ECS]], [[Azure Kubernetes Service (AKS)], [[Google Kubernetes Engine (GKE)]]
  • 構成管理ツール: [[Ansible]], [[Chef]], [[Puppet]], [[SaltStack]]
  • IaCツール: [[Terraform]], [[AWS CloudFormation]], [[Azure Resource Manager (ARM)]], [[Pulumi]]
  • モニタリングツール: [[Prometheus]], [[Grafana]], [[ELK Stack (Elasticsearch, Logstash, Kibana)]], [[Datadog]], [[New Relic]], [[Dynatrace]]
  • アーティファクトリポジトリ: [[Nexus Repository]], [[JFrog Artifactory]], [[Docker Hub]], [[GitHub Packages]], [[AWS ECR]], [[Google Artifact Registry]]
  • シークレット管理: [[HashiCorp Vault]], [[AWS Secrets Manager]], [[Azure Key Vault]], [[Google Cloud Secret Manager]]

7. CDのベストプラクティスとアンチパターン MOC

7.1. CDベストプラクティス MOC

  • [[パイプラインを小さく、速く保つ]]
  • [[全ての変更をバージョン管理する (コード、設定、パイプライン定義)]]
  • [[テストを徹底的に自動化する]]
  • [[フィードバックを迅速かつ明確にする]]
  • [[本番環境とのパリティを保つ]]
  • [[インフラストラクチャもコードとして扱う (IaC)]]
  • [[セキュリティを早期から組み込む (Shift Left Security)]]
  • [[失敗からの迅速な復旧を可能にする]]
  • [[継続的な改善と計測]]
  • [[チーム全体で責任を持つ]]

7.2. CDアンチパターン MOC

  • [[CIシアター (CI Theater - CIツールは導入したがプラクティスが伴わない)]]
  • [[遅すぎるパイプライン / 長時間かかるビルド・テスト]]
  • [[不安定なテスト (Flaky Tests)]]
  • [[手動介入が多いパイプライン]]
  • [[本番環境との乖離が大きいテスト環境]]
  • [[巨大なコミット / 遅いマージ]]
  • [[フィードバックループの欠如または遅延]]
  • [[セキュリティチェックの無視または最終段階での実施]]
  • [[ツール依存とベンダーロックイン]]
  • [["私のマシンでは動く" (Works on my machine) 問題の放置]]

8. CDの導入と組織文化 MOC

9. CDの将来と高度なトピック MOC