大規模スキーマ移行を6フェーズに分けてADRで管理する
複数モジュールが共有しているリソースの所有モデルを変更するとき、一気にやるとリスクが高い。ADR(Architecture Decision Record)で設計根拠を残しつつ、6フェーズに分けて段階的に移行するパターンがうまくいった。
- スキーマ追加 — 新しいカラムを追加するだけ。既存コードに影響なし
- 新規書き込みの切り替え — 新規レコードから新カラムに書き込む
- 既存データのバックフィル — 既存レコードに遡及的に値を付与
- 読み取りの切り替え — 新カラムベースのクエリに段階的に移行
- 旧カラムの参照停止 — 旧キーへの依存を完全に除去
- クリーンアップ — 旧カラム削除、不要コードの除去
各フェーズが独立してデプロイ・ロールバックできるのがポイント。途中で問題が起きても前のフェーズに戻せる。
ADRとissue管理を連携させると効果的:
- ADRからissueへの参照を張る — 「なぜこの順番か」「完了条件は何か」をトレースできる
- フェーズごとにissueを切る — 進捗が可視化され、レビュー単位も小さくなる
- 設計の根拠がADRに残る — 半年後に「なぜこうしたか」を追える
「書き込みを先に切り替え → バックフィル → 読み取りを切り替え」の順序が重要。逆にすると、バックフィル前の古いデータが新しいクエリで漏れる。