【ろーるばっく】

ロールバック とは?

💡 エラー時に「なかったことにする」操作、トランザクション前の状態に戻す
📌 このページのポイント
ロールバック(復元)のフロー v1.0 正常稼働 v2.0 正常稼働 v3.0 障害発生! バグ混入 ロールバック v2.0 復元完了 問題が見つかったら、以前の安定した状態に戻す DB・デプロイ・設定変更などで広く使われる復旧手段
ロールバックのイメージ
ひよこ ひよこ

ロールバックって何?

ペンギン先生 ペンギン先生

トランザクション中にエラーが起きたとき「全部なかったことにする」操作だよ。銀行振込で「A口座から出金」→「B口座に入金」の処理中にエラーが出た場合、ロールバックして「出金も入金も取り消し」にして元の状態に戻す。

ひよこ ひよこ

COMMITとROLLBACKの関係は?

ペンギン先生 ペンギン先生

トランザクション内の変更は「仮の状態」にある。COMMIT(コミット)で確定、ROLLBACK(ロールバック)でキャンセル。COMMITするまではいつでもROLLBACKできる。COMMITした後はロールバックできないので、確認してからコミットするのが重要。

ひよこ ひよこ

デプロイのロールバックも同じ意味?

ペンギン先生 ペンギン先生

概念は同じだけど別の操作。デプロイのロールバックは「新バージョンのリリースに問題があったので前のバージョンに戻す」こと。DBのロールバックとは文脈が違うけど「前の状態に巻き戻す」という意味は共通。

ひよこ ひよこ

マイグレーションのロールバックって何?

ペンギン先生 ペンギン先生

DBのスキーマ変更(マイグレーション)を取り消す操作だよ。カラムの追加を取り消すなど、upの逆のdownを定義しておく。Railsのmigrationやflywayなどのツールがサポートしている。

ひよこ ひよこ

ロールバックできない変更ってあるの?

ペンギン先生 ペンギン先生

あるよ。カラムの削除(DROP COLUMN)は元に戻せない。削除したデータは消えてしまうからね。だからDB変更は慎重にやるのが鉄則で、「まず新カラムを追加→データを移行→古いカラムを削除」という段階的なアプローチを取ることが多い。大規模サービスでは「expand and contract パターン」と呼ばれるこの手法が必須で、1回のデプロイスキーマ変更とコード変更を同時にやるのは危険なんだ。

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
ロールバックって出てきたら「トランザクションを中止して処理前の状態に戻す操作、COMMIT前ならいつでもできる」と思えばOK!
📖 おまけ:英語の意味
「Rollback」 = 巻き戻す
💬 フィルムや巻物を「巻き戻す(roll back)」イメージから。変更を「巻き戻して」元の状態に戻す操作
← 用語集にもどる