文章を編集していて変な形になったら、Ctrl+Z で一つ前に戻します。落ち着いてから、改めて正しく直す。ロールバックは、いわば本番環境の Ctrl+Z です。デプロイや設定変更のあとに問題が起きたら、直前の正常な状態へ素早く巻き戻します。
どれだけ事前にテストしても、本番で初めて表に出る問題はあります。そのとき、問題のある新しい状態をその場で直すより、問題のなかった古い状態へ戻すほうが早いことがよくあります。正しく直すことより、まずサービスを正常に戻すことを優先する。そのための切り戻しの手順です。
戻すか、その場で直すか
次のような状況では、ロールバックが候補になります。
- デプロイの直後から、エラーや不具合が増えてサービスに影響が出ている
- データベースの構造変更(マイグレーション)を適用したら、アプリが正常に動かなくなった
- 設定を変えたら、処理の速さが急に落ちた
- 公開した機能に重大なバグが見つかり、修正に時間がかかりそう
障害のさなかに「戻すかどうか」を議論し始めると、そのぶん影響が長引きます。どんな状態になったら戻すのか、誰が判断するのか、どの手順で戻すのかを、あらかじめチームで決めておきます。デプロイ後の異常にすぐ気づけるよう、監視を整えておくことも前提になります。
戻せない変更もある
Ctrl+Z がいつでも効くとは限りません。直前のバージョンをすぐに置き直せる仕組みがなければ、そもそも戻せません。
特に気をつけたいのが、データに触る変更です。データベースの構造を変えたり、データを削除したりした場合、プログラムだけを古い版に戻しても、データは元に戻りません。マイグレーションには、元に戻す手順を一緒に用意しておくのが慣習です。データそのものを戻すには、バックアップからの復元が必要になることが多いので、戻せない変更を入れる前には、戻れないことを承知のうえで進めるかを確認しておきます。
戻したあとにやること
ロールバックは、問題をなかったことにする手段ではありません。サービスを正常に戻すための応急処置です。戻したあとで原因を調べ、修正して、改めてデプロイし直す。ここまで終えてはじめて、障害への対応が完了します。