【でーたべーすまいぐれーしょん】

データベースマイグレーション とは?

最終更新:
💡 DBスキーマの「バージョン管理」

データベースの構造やデータを、ある状態から別の状態へ移すこと。アプリ開発では、テーブルやカラムなどの変更手順をファイルで管理し、順に適用するスキーママイグレーションをよく指す。

📌 このページのポイント
変更手順を共有して、順に適用 変更前:users id name 変更後:users id name email(追加) 適用 変更ファイル:emailカラムを追加 Gitで共有 + DB側で適用履歴を管理 戻せる範囲と、失うデータを事前に確認 カラムの作り直しだけでは、元の値は戻らない
スキーママイグレーションの概念例です。戻す機能や記述方法はツールによって異なります。適用時のロック、データ変換、アプリの切替えは別途計画します。
ひよこ ひよこ
手動でALTER TABLEするのと何が違うの?
ペンギン先生 ペンギン先生
SQLを手動で実行すること自体が禁止というわけではないよ。ただ、各自が別々に変更すると環境が食い違いやすい。変更手順をファイルに残してGitなどで共有し、順序や適用履歴を管理するのがスキーママイグレーションの利点なんだ。
ひよこ ひよこ
ファイルがあれば、いつでも元に戻せるの?
ペンギン先生 ペンギン先生
戻し方はツールと変更内容によるよ。Railsには変更から逆操作を判断するchangeや、適用と戻しを指定するup/downがある。でもカラムを削除した後に作り直しても、元の値までは戻らない。追加の修正で進める方法や、バックアップからの復旧も計画するんだ。
ひよこ ひよこ
本番で気をつけることは?
ペンギン先生 ペンギン先生
DBの種類や操作によって、ロックの強さや実行時間が違うよ。本番に近いデータ量で手順を試し、稼働中のアプリが新旧の構造を扱えるか確認する。ツールを使うだけで無停止になるとは限らないんだ。
ひよこ ひよこ
スキーマ変更とデータ移行はどう関係するの?
ペンギン先生 ペンギン先生
たとえば商品の価格表現を変更するなら、新しいカラムを追加し、既存値を変換して埋める。その間の更新も反映できるようにアプリを対応させ、読み書きを新しい構造へ切り替えるんだ。古いカラムを使うアプリがなくなったことを確認してから削除する。このように段階を分ける方法をexpand and contractと呼ぶよ。
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「DBマイグレーション」って出てきたら「DBの構造やデータを計画的に移行すること」と思えばだいたいOK!
📖 おまけ:英語の意味
「Database Migration」 = データベース移行・移植
💬 Migration(移行)。スキーマをある状態から次の状態に「移行」させるよ

参考資料

← 用語集にもどる