LESSON 20分

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

ストーリー

「CIでコードの品質は自動で確認できるようになった。 次は、その品質が保証されたコードをどうやって本番環境に届けるかだ」

木村先輩がホワイトボードに「CD」と書き足した。

「CDには2つの意味がある。Continuous Delivery(継続的デリバリー)と Continuous Deployment(継続的デプロイ)だ」

「似てるけど違うんですか?」

「大きな違いがある。デリバリーは『いつでもリリースできる状態を保つ』、 デプロイは『テストが通ったら自動でリリースまでする』だ。 どちらを選ぶかは、チームとプロダクトの状況次第だ」


継続的デリバリー vs 継続的デプロイ

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

テストに通ったコードを「いつでもリリース可能な状態」に保つプラクティスです。本番へのデプロイは手動承認を経て実行します。

継続的デリバリー

[push] → [CI] → [ステージング] → [承認ゲート] → [本番デプロイ]
                   自動           手動判断         自動
                                 ↑
                              人間が判断
                          「リリースして良いか?」

継続的デプロイ(Continuous Deployment)

テストに通ったコードが自動的に本番環境にデプロイされるプラクティスです。人間の承認を必要としません。

継続的デプロイ

[push] → [CI] → [ステージング] → [E2Eテスト] → [本番デプロイ]
                   自動            自動            自動
                                               ↑
                                          完全自動化
                                    テスト通過 = 即リリース

比較表

観点継続的デリバリー継続的デプロイ
本番デプロイ手動承認後完全自動
リリース判断ビジネス判断を含むテスト結果のみ
求められるテスト品質高い非常に高い
向いている場面規制産業、初期導入段階成熟したチーム、SaaS
デプロイ頻度日〜週単位1日に複数回

デプロイ戦略

CDを実現するためには、安全にデプロイするための戦略が重要です。

1. ローリングデプロイ

古いバージョンのインスタンスを順次新しいバージョンに置き換えます。

ローリングデプロイ

Time 1:  [v1] [v1] [v1] [v1]     ← 全てv1
Time 2:  [v2] [v1] [v1] [v1]     ← 1台ずつ更新
Time 3:  [v2] [v2] [v1] [v1]
Time 4:  [v2] [v2] [v2] [v1]
Time 5:  [v2] [v2] [v2] [v2]     ← 全てv2
メリットデメリット
ダウンタイムなし一時的にv1/v2が混在
リソース効率が良いロールバックに時間がかかる

2. Blue/Greenデプロイ

本番環境(Blue)と全く同じ環境(Green)を用意し、一括切り替えます。

Blue/Green デプロイ

         ┌───── LB ─────┐
         │               │
    ┌────▼────┐    ┌─────────┐
    │  Blue    │    │  Green   │
    │  (v1)    │    │  (v2)    │
    │ [現在]   │    │ [準備中] │
    └─────────┘    └─────────┘

        切り替え後 ↓

         ┌───── LB ─────┐
         │               │
    ┌─────────┐    ┌────▼────┐
    │  Blue    │    │  Green   │
    │  (v1)    │    │  (v2)    │
    │ [待機]   │    │ [現在]   │
    └─────────┘    └─────────┘
メリットデメリット
瞬時の切り替え2倍のリソースが必要
瞬時のロールバックコストが高い

3. カナリアデプロイ

新バージョンを一部のユーザーにだけ公開し、問題がないことを確認してから全体に展開します。

カナリアデプロイ

Phase 1: 5%のトラフィックを新バージョンへ
  ┌────────────── LB ──────────────┐
  │  95%           │            5% │
  ▼                               ▼
[v1] [v1] [v1] [v1]            [v2]
                              ← 少数で検証

Phase 2: 問題なし → 50%に拡大
  ┌────────────── LB ──────────────┐
  │  50%                       50% │
  ▼                               ▼
[v1] [v1]                  [v2] [v2]

Phase 3: 全体展開
  ▼
[v2] [v2] [v2] [v2]
メリットデメリット
リスクが最小段階的で時間がかかる
実トラフィックで検証ルーティング設定が複雑

戦略の選択指針

状況推奨戦略
シンプルなWebアプリローリングデプロイ
ダウンタイムゼロ必須Blue/Green
大規模ユーザー基盤カナリア
初めてのCI/CD導入ローリングデプロイ

CDパイプラインの実装パターン

環境の段階構成

CDパイプライン環境構成

[CI成功] → [Dev] → [Staging] → [Production]
             │         │            │
          開発検証   本番同等     本番環境
          自動      自動        承認後自動

各環境の役割:
- Dev:       機能確認、開発者のみアクセス
- Staging:   本番と同じ構成でのリリース検証
- Production: エンドユーザーがアクセスする環境

ロールバック戦略

デプロイ後に問題が発生した場合の復旧計画も重要です。

ロールバック方式説明復旧時間
前バージョンの再デプロイ1つ前のバージョンをデプロイし直す5〜15分
Blue/Green切り戻しトラフィックを旧環境に戻す数秒〜1分
Feature Flag無効化問題の機能のフラグをOFFにする数秒
DB マイグレーション考慮DBスキーマ変更の互換性を保つケースによる

まとめ

ポイント内容
継続的デリバリーいつでもリリース可能な状態を保つ(承認後デプロイ)
継続的デプロイテスト通過で自動的に本番デプロイ
デプロイ戦略ローリング、Blue/Green、カナリアの3種類
ロールバックデプロイ前にロールバック手順を必ず用意する

チェックリスト

  • 継続的デリバリーと継続的デプロイの違いを説明できる
  • 3つのデプロイ戦略の特徴とメリット/デメリットを理解した
  • 環境の段階構成(Dev → Staging → Production)を把握した
  • ロールバック戦略の重要性を理解した

次のステップへ

CI/CDの概念が固まったところで、次のセクションでは代表的なCI/CDツールを比較します。 その中から、今月メインで使うGitHub Actionsの位置づけを理解しましょう。


推定読了時間: 20分