TL

デプロイ戦略(ブルーグリーン・カナリア・ローリング)

新バージョンを“止めずに・壊さず”出すための切り替え方。少しずつ入れ替える、丸ごと2環境を切り替える、一部ユーザーで先に試す。どこまで安全に倒すかのトレードオフで選ぶ。

中級デプロイブルーグリーンカナリアロールバック最終更新: 2026-06-04
TL;DR要点だけ先に
  • 1.目的は無停止リリースと“ダメならすぐ戻す”こと。ローリング=少しずつ入替、ブルーグリーン=2環境を一気に切替、カナリア=一部に先行投入。
  • 2.速く戻したいならブルーグリーン、リスクを測りたいならカナリア、コストを抑えたいならローリング。万能はない。
  • 3.どれを選んでも前提は“ロールバックできる設計”。DBの後方互換とヘルスチェックがないと切り替えは安全に倒せない。

なぜ「戦略」が要るのか

古いやり方は「サーバを止める → 新バージョンを置く → 起動する」。これだと 停止時間(ダウンタイム) が出ますし、起動して初めて不具合に気づくと 全ユーザーが巻き込まれます

そこで、複数のインスタンスを 同時に・並行して 動かせる前提(コンテナとVMCI/CD の自動化)を活かし、

  • 無停止(ゼロダウンタイム) で出す
  • 問題を 一部に閉じ込める
  • ダメなら 素早く元に戻す(ロールバック)

ための「出し方の型」が必要になります。これがデプロイ戦略です。

ローリング:少しずつ入れ替える

稼働中のインスタンスを 数台ずつ 新バージョンに置き換えていく方式。古い v1 と新しい v2 がしばらく 混在 しながら、徐々に v2 へ寄せていきます。

  • 追加リソースが少なくて済む(全台ぶんの余剰環境が不要
  • 一度に落とす台数(maxUnavailable)と増やせる台数(maxSurge)で進み方を制御
  • ヘルスチェックに通った台だけ流量を受ける

弱点は 切り替え中に v1 と v2 が同時に動く こと。両者が同じDBや同じAPIを触るため、互換性がないと壊れます。また全台が入れ替わるまで時間がかかり、途中で問題が出ると戻すのも段階的で遅くなりがちです。

# Kubernetes の Deployment(ローリング更新の例)
spec:
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxUnavailable: 1   # 同時に止めるのは最大1台
      maxSurge: 1         # 一時的に1台だけ増やしてよい

ブルーグリーン:2環境を丸ごと切り替える

現行(Blue)と 同じ規模の新環境(Green) をまるごと用意し、Green で十分に確認してから ロードバランサ(やDNS)の向き先を一気に切り替える 方式。

  • 切り替えは 一瞬。利用者から見たダウンタイムがほぼない
  • 問題が出たら 向き先をBlueに戻すだけ で即ロールバック
  • 旧環境はしばらく残すので、安心して様子を見られる

弱点は 本番を2面ぶん用意する コスト。また「全ユーザーが同時に新版へ移る」ため、Green側の検証が甘いと 影響範囲は全体 になります(=小さく試すのには向かない)。

切り替えの主役はトラフィックの向き先

ブルーグリーンの肝は「アプリの差し替え」ではなく ルーティング(LB/DNS/Ingress)の付け替え。だからロールバックも“逆向きに付け替えるだけ”で速い。DNSで切り替える場合は TTL を短く しておかないと、戻すときに反映が遅れます。

カナリア:一部にだけ先行投入する

新版をまず 5%や1% といったごく一部のトラフィックにだけ流し、エラー率やレイテンシを 計測しながら 段階的に 25% → 50% → 100% と広げていく方式。炭鉱のカナリア(危険をいち早く知らせる鳥)が名前の由来です。

  • 本番の実トラフィック でリスクを測れる(ステージングでは出ない問題を捕まえる)
  • 異常を検知したら その一部だけ を巻き戻せばよく、被害が小さい
  • 「指標が悪化したら自動で停止/巻き戻し」まで組むのが理想

弱点は 仕組みが重い こと。トラフィックの重み付けルーティングと、良し悪しを判定する 監視・可観測性(エラー率・レイテンシ・SLO)がそろって初めて機能します。判定基準がないと「なんとなく1%」を出しているだけで、ただ遅いブルーグリーンになりかねません。

“カナリア=ただ少しずつ出す”ではない

カナリアの本質は 計測と自動判定 です。指標を見ずに割合だけ上げるのは、判断材料のない賭け。最低でも「いつ進めるか/いつ止めるか」の基準(エラー率○%以下、p95レイテンシ○ms以下)を先に決めてから始めましょう。

三者の比較

観点ローリングブルーグリーンカナリア
切り替え方数台ずつ順次2環境を一括切替一部→徐々に拡大
ロールバック速度やや遅い(段階的)最速(向き先を戻す)速い(一部を戻す)
必要リソース少ない(余剰わずか)多い(本番2面ぶん)中(一部+計測基盤)
影響範囲切替中は混在切替後は全ユーザーまず一部だけ
前提後方互換ルーティング切替重み付け+監視
向く場面コスト重視・日常更新即時に戻したい重要更新リスクの実測・大規模変更

どれを選んでも欠かせない前提

戦略の選択以前に、ロールバックできる状態 を作っておくことが本丸です。これが崩れると、どの方式でも安全に切り替えられません。

  • DBスキーマの後方互換:新旧バージョンが同じDBを同時に触る瞬間が必ずある。カラム削除や非互換な変更を一発でやらない("expand and contract"=先に足して、移行してから消す)。これを怠ると「アプリは戻せてもDBが戻せない」状態になります。
  • ヘルスチェック / Readiness:起動しただけで流量を流さず、「本当に応答できる」状態になってから受ける。これがないと壊れた新版にトラフィックが流れます。
  • 状態を持たない設計:ローカルにセッションやファイルを溜めないこと。イミュータブルインフラ のように使い捨てできる前提だと、入れ替えも切り戻しも単純になります。
本当の敵はDBマイグレーション

アプリのバイナリは一瞬で戻せても、データベースの変更は簡単には戻せません。「ロールバック=コンテナを前の版に差し替えるだけ」と思っていると、非互換なマイグレーションを当てた瞬間に詰みます。DB変更は アプリのリリースと分け、必ず後方互換を保ったまま 段階的に進めるのが鉄則です。

まとめ:使い分けの早見

  • コストを抑えて日常的に更新したいローリング(後方互換が前提)
  • 重要な更新を、ダメなら即座に戻したいブルーグリーン(2面ぶんのコストと引き換え)
  • 大きな変更のリスクを本番で実測したいカナリア(監視と自動判定が前提)

実務ではこれらは排他ではなく、ブルーグリーンの切り替えをカナリア的に少しずつ流す といった組み合わせも一般的です。土台となる自動化は CI/CDGitOps が担います。

DevOps/インフラ Article

デプロイ戦略(ブルーグリーン・カナリア・ローリング)を実務で読む

TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。

解決すること

デプロイ

比較で見る軸

難易度: intermediate / カテゴリ: DevOps/インフラ / タグ数: 4

導入後に効く点

速く戻したいならブルーグリーン、リスクを測りたいならカナリア、コストを抑えたいならローリング。万能はない。

先に潰すリスク

用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。

数字・仕様の読み方
難易度
intermediate
カテゴリ
DevOps/インフラ
タグ数
4

判断チェックリスト

  • 自社の用途が「デプロイ / ブルーグリーン」に近いか確認する。
  • 強みである「目的は無停止リリースと“ダメならすぐ戻す”こと。ローリング=少しずつ入替、ブルーグリーン=2環境を一気に切替、カナリア=一部に先行投入。」が本当に評価軸になるか確認する。
  • 注意点の「用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。」を運用で吸収できるか確認する。
  • 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
  • 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
  • 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。

次に確認する観点

デプロイブルーグリーンカナリアロールバックデプロイブルーグリーンカナリアロールバック
参考: 公式情報