IT-Q

1回目と2回目の間にリリースが失敗して切り戻すことになったら、どうなりますか。

1回目までなら DB を触っていないので、コードを戻すだけで安全に復帰できます。これが分ける最大の利点です。2回目のあとは、down() でカラムを作り直せてもデータは戻りません。

面接官が見ているのはロールバック時の整合性まで考えられるか。

これは「カラムを1本削除するマイグレーションを、ダウンタイム無しで流すにはどうしますか。」への追撃質問です。

よくある答えと、面談でどう見られるか

  • 1回目までなら DB を触っていないので安全に戻せる。2回目の後は down でもデータは戻らない
    正解です。だから2回目は「もう戻さない」と確信できてから流します。現場では1回目と2回目の間を数日〜数週間空けます。
  • down() を実行すればいつでも元に戻せる
    構造は戻せてもデータは戻りません。down は事故対応で使える代物ではありません。
  • どちらの段階でも切り戻しは不可能になる
    1回目までは DB を触っていないので安全に戻せます。そこが2段階に分ける利点です。
  • バックアップから全体を復元するしかない
    2回目の後ならその通りですが、1回目までならコードを戻すだけで済みます。段階によって答えが変わります。

面接官は何を見ているか

  • 1回目までなら安全に戻せる(DBを触っていない)と言えた
  • 2回目のあとは down() でカラムを戻してもデータは戻らないと指摘できた
  • だから2回目の前に十分な間隔を空ける、という運用判断を語れた

模範解答

1回目までなら DB を触っていないので、コードを戻すだけで安全に復帰できます。これが2段階に分ける最大の利点です。2回目のあとは危険で、down() でカラムを作り直せてもデータは戻りません。だから2回目は「もう戻さないと確信できてから」流します。現場では1回目と2回目の間に数日〜数週間空けることが多いです。