
ロールバック手順の作り方|すぐ戻せるリリース設計を一人運用で
リリースのボタンを押した数分後。 監視のグラフが跳ねて、エラーログが流れ始める。問い合わせの電話も鳴り出した。
このとき、いちばん心臓に悪いのは「直し方が分からない」ことではありません。 「とりあえず、いったん前の状態に戻せるのか」が分からないことです。
前に進む(直す)には、原因の調査も、修正も、テストもいる。時間がかかります。 でも、その時間ずっと本番が壊れたままなのは、つらすぎる。だからまず欲しいのは「いったん元に戻して、落ち着いてから調べる」という逃げ道です。
この逃げ道を、その場の度胸ではなく事前の段取りとして用意しておくのがロールバックです。 この記事では、「すぐ戻せる」を仕組みにするための考え方と、アプリ・DB・設定・ファイルそれぞれの戻し方の違い、そして本番の前に決めておく判断基準までを、一人運用の目線で一緒に深掘りしていきます。一度に全部そろえなくて大丈夫です。
結論:ロールバックは「いざとなったら気合いで戻す」ではなく、「戻す手順を事前に書いて、戻せる状態で出す」ことで成り立ちます。やることは4つ。①このリリースは何で戻すか(前のバージョンに切替か/逆操作か)を出す前に決める、②DB変更は「戻せる形」で分けて出す、③戻す判断の基準(いつ戻すか)を先に決めておく、④小さな変更で一度、実際に戻す練習をしておく。まずは次のリリース1回ぶんの「戻し方」を1行メモするところから始めます。
リリースの仕組み(手動デプロイ・CI/CD・コンテナ・レンタルサーバーのファイル差し替えなど)や構成によって、戻し方の最適解は変わります。 この記事の考え方を出発点に、自分の環境のやり方に読み替えてください。本番に反映する前には、必ず検証環境や公式情報で確認しましょう。
なぜ「戻せない」リリースが生まれるのか
戻せなくなるのは、担当者が雑だからではありません。むしろ丁寧に作り込んだリリースほど、戻すことを後回しにしがちです。理由はいくつか重なります。
- 「うまくいく前提」で組んでしまう:前に進む手順だけ何度も確認して、戻す手順は「たぶん大丈夫」で出してしまう。人は成功する未来を先に思い描くので、ここは誰でも起きます。
- DBの変更が片道切符になっている:列を消した、データを書き換えた、テーブル名を変えた——コードは戻せても、データは戻せない。ここが「戻せないリリース」のいちばん多い正体です。
- 複数のものを同時に変えている:アプリも、DBも、設定も、外部サービスも一気に変更。どこを戻せばいいのか、戻したら別の何が壊れるのかが分からなくなる。
- 前の状態を保存していない:差し替えたファイルの旧版がない、変更前の設定値を控えていない。「元に戻す」の"元"がもう手元にない。
- 一人で抱えていて記憶頼り:手順が頭の中だけにあって、焦ると飛ぶ。深夜やトラブルの最中ほど、記憶は当てになりません。
どれも「気をつける」だけでは防ぎきれません。だからこそ、戻すことを最初から設計に含めておくことが効いてきます。まずはこの前提を持っておくと、あとの話がすっと入ってきます。
ロールバックの考え方:戻し方は1種類じゃない

「ロールバック」とひとことで言っても、戻し方は大きく2つあります。これを分けて考えると、自分のリリースをどう戻せばいいかが見えてきます。
- 切替で戻す(前の版に戻す):新しい版に問題があったら、保存してある前の安定版にまるごと切り替える。アプリのコードやファイル、設定など「上書きしても元が残っているもの」に向いています。理想形で、戻すのが速くて確実です。
- 逆操作で戻す(打ち消す):切替ではまるごと戻せないもの——特にデータの変更は、「やったことの逆」を実行して打ち消します。列を足したなら消す、データを書き換えたなら元の値に戻す。逆操作は手作業になりがちで、ここが難所です。
多くのリリースは、この2つが混ざっています。「アプリは切替で戻せるが、DBは逆操作が必要」というように。だからリリースを出す前に、自分の変更がどちらの戻し方になるかを部品ごとに分けて考えるのが、いちばん大事な準備です。
戻し方を「部品ごと」に整理する
リリースに含まれるものを、戻し方の観点でざっくり分けると、こうなります。
| 変更の種類 | 基本の戻し方 | 戻しやすさ | 事前にやっておくこと |
|---|---|---|---|
| アプリのコード | 前の版に切替 | 戻しやすい | 前の版(タグ・成果物)を残す |
| 設定ファイル・環境変数 | 前の値に切替 | 戻しやすい | 変更前の値を控える/版管理する |
| 静的ファイル・画像 | 旧ファイルに切替 | 戻しやすい | 差し替え前を別名で退避する |
| DBの構造(列追加など) | 逆操作で打ち消す | 注意が必要 | 戻す用のSQLを先に書く |
| DBのデータ書き換え | 逆操作・バックアップから復元 | 戻しにくい | 変更前のバックアップ・件数を取る |
| 外部サービス連携の切替 | 設定を戻す・先方と調整 | 場合による | 切替前の状態と連絡先を控える |
表のうち、上のほうは「切替で戻せる」ので比較的安心です。注意がいるのは下の2つ、DB(データ)まわり。ここを"戻せる形"にできるかどうかで、リリース全体の安心感が決まります。次の章で、ここを重点的に見ます。
いちばんの難所:DB変更を「戻せる形」にする
リリースで戻せなくなる原因の多くは、データベースです。コードは差し替えれば戻りますが、データは一度書き換えると、それ自体が消えてしまうからです。ここを丁寧に設計しておくと、リリースの怖さがぐっと減ります。
① 「壊す変更」は一度に出さない(2段階に分ける)
いちばん効くコツが、「足す変更」と「消す変更」を別のリリースに分けることです。
たとえば「列の名前を変えたい」とき、一気にやると戻せません。代わりに段階を踏みます。
- まず新しい列を足す(古い列はそのまま残す)。アプリは新旧どちらの列でも動くようにしておく。→ この段階なら、問題が出てもアプリを戻すだけで済む。
- しばらく安定して動くのを見届けてから、次のリリースで古い列を消す。
遠回りに見えますが、こうするとそれぞれのリリースが単体で戻せるようになります。「消す」「名前を変える」「データ型を変える」といった後戻りできない変更ほど、独立した小さなリリースに切り出すのがコツです。
とはいえ、納期や依頼ベースの一人運用では「1回で終わらせて」と言われがちで、全部を2段階にするのは現実的でないこともあります。そのときの最低ラインはこうです——「消す」「名前を変える」だけは絶対に別リリースに分ける。「足す」「直す」は同じリリースに同梱してよい。後戻りできない操作だけ切り出せれば、戻せなさのいちばん大きな穴はふさげます。
② 戻す用のSQLを、出す前に書いておく
DBの構造を変えるときは、変更するSQL(前進用)とセットで、それを打ち消すSQL(後退用)を先に書いておきます。マイグレーションツールを使っているなら、戻す処理(down/rollback に相当)を必ず書いて、検証環境で実際に戻して動くかを一度試します。書いてあるのに動かない、はよくあります。
検証環境が無く本番一択、という一人運用の現場も多いはずです。その場合は、戻しSQLを手で書いて声に出して読み合わせる/対象テーブルだけのコピーを作って戻して試す/最悪はバックアップから復元する道だけは確保しておく——このどれかで代わりにします。実際に戻して試せないぶん、復元できる退避だけは必ず持っておきます。
③ データを書き換えるときは、変更前を必ず残す
UPDATE や DELETE でデータそのものを変えるときは、これが戻せるかどうかの分かれ目です。最低限こうしておきます。
- 変更の直前にバックアップを取る(対象テーブルだけでも可)。
- 変更前後の件数を控える(「100件のはずが1万件更新された」に気づける)。
- できれば、変更前の値を別テーブルやファイルに退避してから書き換える。
この「データ修正を安全に行う段取り」は、それ自体が一つの大きなテーマです。SQLでのデータ修正の安全手順は、別記事で詳しく整理しています(記事末尾の関連リンク)。戻せる状態を作ってから書き換える——この順番だけは、ぜひ守ってください。
戻す「判断基準」を、先に決めておく

手順がそろっていても、トラブルの最中に「これは戻すべきか、もう少し粘って直すべきか」で迷うと、その数分が傷を広げます。だから戻す判断の基準を、落ち着いているうちに決めておきます。
決めておくと迷わないのは、たとえばこんな観点です。
- 何が起きたら戻すか:「主要な画面が開けない」「決済・ログインなど止まると致命的な機能が落ちた」「エラー率が普段の○倍を超えた」など、戻す引き金を具体的に。
- いつまで様子を見るか:「リリース後○分以内に正常化しなければ戻す」と時間で区切る。粘りすぎを防げます。
- 誰が戻すと決めるか:一人運用なら自分ですが、「上長に一報を入れてから」なのか「先に戻してから報告」なのかを決めておく。基本は迷ったら先に戻して安全を確保し、それから報告が傷を浅くします。ただし、戻すこと自体がサービス一時停止や二次被害につながる変更——決済・外部連携・課金まわりだけは、勝手に戻さず先に一報。それ以外は戻してから報告、と線引きしておくと、安心して即時ロールバックできます。
- 戻したあとどうするか:戻して終わりではなく、「落ち着いてから原因を調べ、直してから再リリース」までを一続きにしておく。
この基準は、リリース手順書(runbook)の中に1ブロックとして書いておくのがおすすめです。「進む手順」と並べて「戻す手順」と「戻す基準」を置いておけば、いざというとき、それを読むだけで動けます。
具体例:よくある3つの「戻せなかった」場面
現場では、こんな形でロールバックが詰まりがちです。直し方とセットで見てみましょう。
- コードは戻したのにエラーが消えない:アプリを前の版に戻したが、DBは新しい構造のまま。旧コードが新しい構造に対応しておらず、別のエラーになった。→ DB変更を「足すだけ」にして旧コードでも動くようにしておけば、アプリの切替だけで戻せました。
- 設定を戻したいのに、元の値が分からない:環境変数を直接書き換えてリリースし、変更前の値を控えていなかった。→ 設定も版管理するか、変更前の値を作業メモに残しておけば、すぐ戻せました。
- データを書き換えてしまい、もう戻せない:
UPDATEの条件をミスして想定外の件数を更新。バックアップを取っていなかった。→ 変更直前のバックアップと件数確認があれば、復元して戻せました。
どれも「もっと慎重に」では防ぎきれず、戻せる形で出す・前の状態を残す・戻し方を先に書くのどれかがあれば救えたものばかりです。
影響:戻せる設計にすると、何が変わるか
リリースを「戻せる前提」で組むようになると、トラブルが減るだけでなく、日々の心持ちが変わります。
- リリースのボタンを押すときの動悸が、はっきり軽くなる。「ダメなら戻せる」は、いちばんの精神安定剤です。
- 異常に気づいたとき、原因が分からなくてもまず安全な状態に戻してから落ち着いて調べられる。
- 戻す段取りがあると、結果的に変更を小さく分ける癖がつき、リリース1回あたりのリスク自体が下がる。
- 自分が休みや不在のときでも、手順書に「戻し方」が書いてあれば、他の人が同じように対応できる。
逆に、戻し方を用意しないまま出し続けると、いつか「進むことも戻ることもできない」夜が来ます。しかもそれは、たいてい忙しい時期や連休前にやってきます。先に逃げ道を作っておくことが、未来の自分を助けます。
明日やること:次のリリース1回ぶんの「戻し方」を書く
いきなり全部を仕組み化しなくて大丈夫です。明日できる、いちばん小さな一歩はこれです。
- 次に予定しているリリースを1つ思い浮かべ、変更内容を「アプリ/設定/ファイル/DB」に分けて書き出す。
- それぞれについて、戻し方を1行ずつ書く(「前の版に切替」「変更前の値○○に戻す」「この逆SQLを実行」など)。
- DBに戻しにくい変更(消す・書き換える)が含まれていたら、「足すだけ」に分けられないか、バックアップを取れないかを検討する。
- 戻す引き金を1つ決める(例:「主要画面が開けなくなったら、リリース後15分で戻す」)。
- ここまでを、リリース手順書か作業メモの「戻す手順」欄として残す。次回はそこに書き足していけば、自然と型になります。
1回ぶんの戻し方を書くだけでも、「戻せるか分からない」が「戻せる」に変わります。完璧な仕組みを一気に作ろうとせず、まず次の1リリースから始めましょう。余裕があれば、ごく小さな変更で一度実際に戻す練習をしておくと、本番での安心感がまるで違います。
「すぐ戻せるリリース」チェックリスト
リリースを出す前に、戻せる状態かを確かめる項目です。コピーして、自分のリリースに当ててみてください。全部やる前提ではありません。まずは「これだけは」の3つから。
これだけは(最低ライン)
- このリリースで変更するものを、アプリ/設定/ファイル/DBに分けて把握しているか
- 変更それぞれの「戻し方」を、1行でも書き出してあるか
- 戻す引き金(何が起きたら戻すか)を1つ決めてあるか
DBを触るとき/余裕があるとき(任意)
- アプリ・設定・ファイルは、前の版(旧ファイル・旧設定値)を残してあるか
- DBの構造変更は、「足すだけ」にして旧コードでも動くようにしてあるか
- 後戻りできない変更(消す・名前変更・型変更)を、別の小さなリリースに分けたか
- DBの構造変更に、打ち消す用のSQL(後退手順)を用意したか(検証環境があれば戻して試す)
- データを書き換える前に、バックアップと件数確認をしているか
- 「いつまでに戻すか」の時間の区切りまで決めてあるか
- 戻す手順と判断基準を、手順書か作業メモに残してあるか
- 戻したあと「原因調査→修正→再リリース」までの流れを想定してあるか
全部に○が付かなくても大丈夫です。上の3つだけ押さえれば、まずは「戻せるか分からない」を抜け出せます。下の項目は、DBを触るときや手が空いているときに少しずつ足していけば十分です。1つでも「戻せる工夫」を足せたら、それだけで次のリリースの怖さはぐっと下がります。
よければ、こちらも
ロールバックは、リリース手順・影響範囲の調査・データ修正・障害の振り返りと地続きの仕事です。あわせて整えておくと、いざという時に落ち着けます。
- 障害対応runbookテンプレート|初動・切り分け・連絡・記録を1枚に:戻す手順と判断基準も、この手順書に1ブロックとして入れておくと迷いません。
- データ修正をSQLで安全に行う手順|バックアップと件数確認:データの書き換えを「戻せる形」にするための、具体的な安全手順です。
- 既存システムの改修|影響範囲を見落とさない調査の順番:何を戻せばよいかは、何に影響するかが見えていて初めて分かります。
- ポストモーテムの書き方テンプレート|障害を再発防止につなげる:戻したあと、原因と再発防止を落ち着いて振り返るための型です。

リリースが怖いのは、勇気が足りないからではありません。戻る道が見えていないからです。戻し方を1行書いておくだけで、その道は確かに見えてきます。 今日は、次のリリースの「戻し方」を1行メモするだけで十分です。その小さな備えが、「進むしかない」という追い詰められた感覚から、あなたを少しずつ解放してくれます。
ほかの実務ヒントは記事一覧からどうぞ。保守運用の小さな備えを、メールでも少しずつお届けしています。