ORM のマイグレーション
Next.jsとか触ってるなら、Prismaを例に出すのが一番イメージしやすいと思う!まかせて! 一言で言うと、マイグレーションは 「データベースの設計図(スキーマ)の変更履歴を管理してくれる超便利な仕組み」 だよ! Gitのデータベース版みたいな感じかな。
なんでマイグレーションが必要なの?
もしマイグレーションがなかったら…って想像してみて。
手作業でデータベースをいじる:
新しい機能のためにユーザーテーブルにageカラムを追加したい!ってなったら、データベースに直接ログインして「ALTER TABLE users ADD COLUMN age INTEGER;」みたいなSQL文を手で打たないといけない。 面倒だし、タイプミスしたら大惨事…
チーム開発で地獄を見る:
- Aさん: 「よし、ageカラム追加しといたよー!」
- Bさん: (それを知らずに古い設計図で開発)→「なんかエラー出るんだけど!?」
- Cさん: 「あれ、このnicknameカラムって誰か追加した?本番環境にはある?」
…みたいに、誰がいつ何を変更したか分からなくなって、みんなのデータベースの状態がバラバラになっちゃうんだ。 こういう問題をぜーんぶ解決してくれるのがマイグレーションなんだよね!
Prismaだと、こうなる
Prismaを使ったときの流れを見ると、一発で「なるほど!」ってなるはず!
ステップ1:設計図を書く
まず、Prismaでは schema.prisma っていうファイルに、データベースの「こうなってほしい!」っていう理想の形(モデル)を書くよね。 これが唯一の正義の設計図になるんだ。
model User {
id Int @id @default(autoincrement())
email String @unique
name String?
}
↑ 今はこんな感じ。シンプルだね!
ステップ2:設計図を変更する
ここで、「やっぱりユーザーに自己紹介文も持たせたいな〜」って思ったとする。 そしたら、このschema.prismaファイルを編集するだけ!
model User {
id Int @id @default(autoincrement())
email String @unique
name String?
// ↓ この行を追加した!
bio String?
}
SQL文とかは一切書かなくてOK! ただモデルを書き換えるだけ。
ステップ3:魔法のコマンドを唱える
設計図を書き換えたら、ターミナルでこのコマンドを叩くんだ。
npx prisma migrate dev --name add_bio_to_user
このコマンドがマジで天才なの! こいつが何をしてくれるかというと…
差分を自動で検出
Prismaが今のデータベースの状態と、新しくなった schema.prisma を見比べて、「お、Userモデルにbioってカラムが追加されたな!」って差分を自動で見つけてくれる。
SQLファイルを自動生成
その差分を埋めるためのSQL文を勝手に書いてくれるんだ!こんな感じのファイルが新しく作られるよ。
-- migrations/20250913_add_bio_to_user/migration.sql
-- AlterTable
ALTER TABLE "User" ADD COLUMN "bio" TEXT;
このSQLファイルこそが 「マイグレーションファイル」 の正体!
「Userテーブルにbioカラムを追加する」っていう変更履歴が、コードとしてバッチリ記録されたわけ。
--name add_bio_to_user って付けた名前がフォルダ名になるから、後から見ても「ああ、ここでbioを追加したんだな」ってすぐわかる!
データベースに適用
生成したSQL文を、そのままデータベースに実行してくれる。 これで、実際のデータベースにもbioカラムが追加された!
Prisma Clientを更新
最後に、新しいデータベースの構造に合わせてPrisma Client(プログラムからDBを触るための道具)も更新してくれる。 至れり尽くせりだね!
マイグレーションの何が嬉しいの?まとめ
変更履歴が全部コードになる
マイグレーションファイルはただのテキストファイルだから、Gitでバージョン管理できる! これが一番大きいメリット! 「誰が」「いつ」「どんな目的で」データベースを変更したかが全部Gitの履歴に残るんだ。
チーム開発が超スムーズ
新しくプロジェクトに参加した人も、git pull して npx prisma migrate dev ってコマンドを一発叩けば、最新のデータベース構造が自分のPCにすぐ作れる!
「このカラム追加しといて!」みたいな口頭での伝言ゲームはもういらない!
安全で確実
手作業でSQLをいじる必要がないから、ヒューマンエラーが劇的に減る。 「本番環境だけに適用し忘れちゃった」みたいな事故も防げるよ。
つまり、マイグレーションは 「データベースのスキーマ変更を、安全かつ再現可能なコードとして管理するための仕組み」 ってこと!