IT-Q

カラムを1本削除するマイグレーションを、ダウンタイム無しで流すにはどうしますか。

2回に分けます。1回目は参照コードを全部消してリリースし、DBは触りません。2回目で誰も参照していないカラムを削除します。1回でやると、その瞬間から旧コードが落ちます。

面接官が見ているのは「コードとDBは同時に切り替わらない」ことを理解しているか。

これは「本番環境でマイグレーションを実行するとき、開発環境と違う点として正しいのはどれですか。」への追撃質問です。

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

  • 2回のリリースに分ける。先にコードから参照を消し、後でカラムを削除する
    正解です。1回でやると、マイグレーション後・新コード切替前の間に旧コードが存在しないカラムを参照して落ちます。
  • メンテナンス画面を出して、その間に一気に流す
    確実ですが、それはダウンタイムを取るという意味です。「ダウンタイム無しで」という条件を満たしていません。
  • カラムを削除せず、使わないまま残しておく
    安全側ではありますが、これを繰り返すと誰も意味を知らない列が溜まります。「消せない」ではなく「順序を踏めば消せる」が答えです。
  • マイグレーションとコードのデプロイを同時に実行する
    これがまさに落ちるパターンです。DB とコードは同時には切り替わりません。

面接官は何を見ているか

  • 旧コードと新スキーマが同時に存在する瞬間があると指摘できた
  • 2段階(先にコードから参照を消す → 後でカラム削除)に分けると言えた
  • リリースの順序を具体的に説明できた

模範解答

2回のリリースに分けます。1回目:カラムを参照しているコードを全部消してリリース(DBは触らない)。2回目:誰も参照していない状態になってから、カラムを削除するマイグレーションを流す。1回でやると、マイグレーションが走った瞬間から新コードに切り替わるまでの間、旧コードが存在しないカラムを参照して落ちます。

ここからどう深掘りされるか

この問いに答えられた場合、面談は次の質問に進みます。