概要
マイグレーション(migration)とは、データベースの構造を安全に変更するための仕組み。テーブルを追加したり、カラムを増やしたり、データを移し替えるといった変更を、手順として記録しておくことができる。
「migrate(移住する)」という英単語が語源で、データやデータベースの構造を新しい形に引っ越しさせるイメージ。
なぜ必要なのか
アプリを作っているとき、最初に決めたデータベースの設計を後から変えたくなることがよくある。
たとえば:
- 「ユーザーテーブルにプロフィール画像のカラムを追加したい」
- 「古いカラム名を分かりやすい名前に変えたい」
- 「複数人の開発者が同じDB構造で作業したい」
このとき、直接データベースをいじると何をいつ変えたか記録が残らない。チームメンバーや本番サーバーに同じ変更を漏れなく適用するのも難しくなる。
マイグレーションを使うと、変更手順をコードとして残せるので、誰でも同じ状態を再現できる。
基本的な構造
マイグレーションファイルは通常、変更の「適用(up)」と「元に戻す(down)」の2つをセットで定義する。
-- マイグレーション: usersテーブルにavatarカラムを追加する
ALTER TABLE users ADD COLUMN avatar TEXT DEFAULT ';
ファイル名に日時や連番を付けて管理するのが一般的。
migrations/
0001_create_users.sql
0002_add_avatar_to_users.sql
0003_create_posts.sql
数字の順番に実行することで、データベースが段階的に正しい状態になっていく。
このサイトでの使われ方
このサイトは Cloudflare D1(SQLiteベースのデータベース)を使っており、migrations/ ディレクトリに .sql ファイルとしてマイグレーションを管理している。
新しいテーブルが必要になったときは、新しい番号のSQLファイルを追加して wrangler d1 migrations apply コマンドで適用する。
まとめ
| やること | マイグレーションなし | マイグレーションあり |
|---|---|---|
| DB変更の記録 | 残らない | SQLファイルで残る |
| 他の環境への適用 | 手作業・漏れが出る | コマンド1つで揃う |
| 元に戻す | 難しい | ロールバックできる |
データベースの変更履歴をコードと一緒に管理できるのが最大のメリット。