ステージングとロールバック
優雅に立て直せるローンチと、深夜のパニックに変わるローンチを分けるのは、二つの習慣です。変更を本物のユーザーに届ける前に安全な場所でテストすること、そして悪いデプロイを即座に取り消せること。
ステージング環境とは、アプリの二つ目のコピーにすぎません。同じコード、別の、別の(あるいは使い捨ての)データベースで、本番の前に試す場所です。たいていのホストはこれをほぼ無料にしてくれます。すべてのプルリクエストが自動で自分専用のプレビューURLを得るので、マージ前に変更をクリックして確認し、誰かと共有できます。データベースのマイグレーションのように簡単には戻せないものには特に使いましょう。
三つの環境を、変更がよじ登るはしごとして思い描いてください。ロールバックは、本番を最後の正常な段へ一気に落とすロープです。
開発 ──▶ ステージング/プレビュー ──▶ 本番
(ノートPC) (PRプレビューURL) (実ユーザー)
試す クリック確認 ライブ
何でも 共有 · 検証 ┌──────────────┐
│ deploy #42 │ ◀── 現在 (壊れ)
├──────────────┤
ロールバック│ deploy #41 │ ◀── 最後の正常版
│ ├──────────────┤
└──▶│ deploy #40 │
└──────────────┘
コマンド一つ / クリック一つ = 即座に取消
ロールバックはアプリ全体に対する元に戻すボタンです。これらのプラットフォームは過去のすべてのデプロイを保持するので、最後の正常なバージョンに戻すのはたいていコマンド一つかダッシュボードのクリック一つです。
# Cloudflare Pages: 正常と分かっているビルドを再デプロイする
wrangler pages deployment list
wrangler pages deployment rollback <DEPLOYMENT_ID>
# Vercel: 以前のデプロイを本番へ昇格させる
vercel rollback <DEPLOYMENT_URL>
このコマンドは、必要になったときではなく、必要になる前に知っておきましょう。バイブコーディングの速さの肝は、出荷が安いことです。しかし安い出荷は、出荷の取り消しも同じくらい安いときにだけ安全に感じられます。