Closed3
開発環境のデータを消さずにPrismaのmigration.sqlをスカッシュしてまとめる
はじめに
Prisma を使った開発中に、複数のマイグレーションファイルが積み重なると管理が面倒になる。
開発環境の既存データを保持しつつ、古いマイグレーションを “スカッシュ” して1つにまとめる手順をメモする。
前提
- 開発中にPrismaのモデルに微修正を複数回加えて
prisma migrate dev
した。 - デプロイ前に
migration.sql
を一つにスカッシュしたい。 - ここで普通にもう一度
prisma migrate dev
すると開発環境のデータを消すか聞かれるが、今回は既存データを保持したい。
前提
スカッシュ前の状態
おそらくお手元の環境は以下のようになっている、と仮定する。
- Prismaモデルを追加した
model User { id Int @id @default(autoincrement()) avatarURL String? }
- prisma migrate devしてmigration①が生成されたprisma\migrations\20250601094533_add_user_model\migration.sql
CREATE TABLE `User` ( `id` INTEGER NOT NULL AUTO_INCREMENT, `avatarURL` VARCHAR(191) NULL, ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
- Prismaモデルにメンバーを追加した
model User { id Int @id @default(autoincrement()) avatarURL String? + memberAvatarURL String? }
- もう一回
prisma migrate dev
するとmigration②が生成され、差分か書き込まれるprisma\migrations\20250605000735_add_member_avatar_url\migration.sqlALTER TABLE `User` ADD COLUMN `memberAvatarURL` VARCHAR(191);
理想
この状態では、migration.sqlが2つになっている。
これだと何回も少しずつモデルを修正したことがバレて恥ずかしいので、デプロイする前に以下のように1つにまとめておきたい。
prisma\migrations\20250601094533_add_user_model\migration.sql
CREATE TABLE `User` (
`id` INTEGER NOT NULL AUTO_INCREMENT,
`avatarURL` VARCHAR(191) NULL,
`memberAvatarURL` VARCHAR(191) NULL,
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
解決手順
- まずは手動でmigration①にmigration②の内容をマージする。prisma\migrations\20250601094533_add_user_model\migration.sql
CREATE TABLE `User` ( `id` INTEGER NOT NULL AUTO_INCREMENT, `avatarURL` VARCHAR(191) NULL, + `memberAvatarURL` VARCHAR(191) NULL, ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
- migration②は削除する。
- 開発環境のDBの
_prisma_migrations
テーブルをSQLエディタで開く。- 今回はHiediSQLを使用
- migration①の
migration_name
を控えておく。- 今回は
20250601094533_add_user_model
- 今回は
-
_prisma_migrations
のmigration①と②のレコードを削除する
SQL手打ちの場合以下のように消すDELETE FROM _prisma_migrations WHERE migration_name="20250601094533_add_user_model"; DELETE FROM _prisma_migrations WHERE migration_name="20250605000735_add_member_avatar_url";
-
prisma resolve
コマンドにて「適用済み」としてマーク
手順4で控えたマイグレーション名を指定する。npx prisma migrate resolve --applied 20250601094533_add_user_model
-
prisma migrate dev
コマンドを打って問題ないことを確認> npx prisma migrate dev Environment variables loaded from .env Prisma schema loaded from prisma\schema.prisma Datasource "db": MySQL database "s64_event" at "localhost:3306" Already in sync, no schema change or pending migration was found. ✔ Generated Prisma Client (v6.5.0) to .\node_modules\@prisma\client in 165ms
このスクラップは3ヶ月前にクローズされました