Prismaマイグレーションコマンド完全ガイド
Prismaで開発していると、マイグレーション関連のコマンドを頻繁に使用します。この記事では、Prismaのマイグレーションコマンドを体系的にまとめ、それぞれの使い分けについて解説します。
通常のマイグレーションフロー
A-1. npx prisma migrate dev --name <migration_name>
このコマンドは開発環境でのマイグレーションの基本となるコマンドです。以下の3つの処理を一度に実行します:
- スキーマの変更を検出し、新しいマイグレーションファイルを作成
- 作成されたマイグレーションファイルをデータベースに即時適用
- Prisma Clientを自動的に再生成(schema.prismaの変更を反映)
npx prisma migrate dev --name add_user_role
💡 Tips:
--skip-seed
オプションを追加すると、シードの実行をスキップできます
マイグレーション名は具体的で分かりやすいものにしましょう(例:add_user_email、create_posts_table)
A-2. npx prisma generate
Prisma Clientを手動で再生成するコマンドです。以下の場合に使用します:
- schema.prismaファイルを変更したが、マイグレーションは実行しない場合
- 他の開発者が作成したマイグレーションをpullした後
- node_modulesを削除して再インストールした後
npx prisma generate
このコマンドを実行すると、node_modules/.prisma/client/
以下のTypeScript型定義が更新されます。
SQLを手動で編集する場合のフロー
より複雑なマイグレーションや、Prismaが自動生成するSQLをカスタマイズしたい場合は、以下のフローを使用します。
B-1. npx prisma migrate dev --name <migration_name> --create-only
マイグレーションファイルの作成のみを行い、データベースへの適用は行いません。
# マイグレーションファイルだけを作成
npx prisma migrate dev --name add_complex_index --create-only
生成されたSQLファイルは prisma/migrations/
ディレクトリに作成されるので、必要に応じて手動で編集できます。
B-2. npx prisma migrate dev
保留中のマイグレーションをデータベースに適用します。
npx prisma migrate dev
実行時の動作:
- 未適用のマイグレーションがある場合:マイグレーションを適用し、Prisma Clientを再生成
- 未適用のマイグレーションがない場合:No pending migrations to apply.というメッセージを表示
💡 Tips:
--skip-seed
オプションでシードの実行をスキップ可能
最後に自動的にprisma generate
も実行されます(おそらく)
B-3. npx prisma generate
A-2と同じコマンドです。SQLを手動編集した後も、schema.prismaに変更がある場合は実行が必要です。
その他の便利なコマンド
C. npx prisma migrate status
現在のマイグレーション状態を確認できます。
npx prisma migrate status
表示される情報:
- データベースに適用済みのマイグレーション一覧
- 未適用の保留中マイグレーション
- Prismaスキーマとデータベースの状態の差異
出力例:
Database schema is up to date!
2 migrations found in prisma/migrations
Status:
✅ 20230801120000_initial_setup (applied)
✅ 20230810143000_add_user_profile (applied)
番外編:npx prisma db push
マイグレーション履歴を作成せずに、現在のスキーマを直接データベースに反映させます。
npx prisma db push
使用場面:
- プロトタイピングや初期開発段階
- マイグレーション履歴が不要な開発環境
- スキーマの変更を素早く試したい場合
⚠️ 注意点:
- マイグレーション履歴が残らないため、本番環境では使用を避ける
- データ損失の可能性がある変更の場合は警告が表示される
コマンドの違いと使い分け
npx prisma migrate dev vs npx prisma generate
コマンド | 目的 | データベースへの影響 | Prisma Client |
---|---|---|---|
migrate dev |
スキーマ変更をDBに反映 | あり(マイグレーション適用) | 自動再生成 |
generate |
Prisma Clientの型を更新 | なし | 再生成のみ |
npx prisma migrate deploy vs npx prisma db push
コマンド | 環境 | マイグレーション履歴 | 用途 |
---|---|---|---|
migrate deploy |
本番環境 | 作成・管理する | 本番環境でのマイグレーション適用 |
db push |
開発環境 | 作成しない | プロトタイピング、素早い検証 |
まとめ
Prismaのマイグレーションコマンドは、開発フローに応じて使い分けることが重要です:
- 通常の開発: npx prisma migrate dev --name xxx
- 複雑なマイグレーション: --create-onlyでSQLを編集してから適用
- プロトタイピング: npx prisma db pushで素早く反映
- 本番環境: npx prisma migrate deployで安全に適用
これらのコマンドを適切に使い分けることで、効率的なデータベース管理が可能になります。
Discussion