🎉

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