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回目の間に数日〜数週間空けることが多いです。