💡

Rails経験者のためのPrismaコマンド早見表(マイグレーション周り)

2024/09/12に公開

【A】 npx prisma migrate dev --name xxxxxxx

  1. スキーマの変更を検出し、新しいマイグレーションファイルを作成します。 →【B-1】部分に該当
  2. 作成されたマイグレーションファイルをデータベースに即時適用します。→【B-2】部分に該当
  3. Prisma Clientを再生成します(必要な場合)。→【B-3】部分に該当

【A】はRailsではrails generate migration xxxxxxx + rails db:migrateに該当します。

【B-1】 npx prisma migrate dev --name xxxxxxx --create-only

スキーマの変更を検出し、新しいマイグレーションファイルを作成します。

【B-1】はRailsではrails generate migration xxxxxxxに該当します。

【B-2】 npx prisma migrate deploy

作成されたマイグレーションファイルをデータベースに即時適用します。
適用するマイグレーションがない場合の動作は、コマンドは実行されますが、データベースに変更は加えられません。
コンソールには、適用するマイグレーションがないことを示すメッセージが表示されます。通常、以下のようなメッセージが表示されます:

No pending migrations to apply.    

【B-2】はRailsではrails db:migrateに該当します。

【B-3】 npx prisma generate

Prisma Clientを再生成します。
node_modules/.prisma/client/index.d.tsが更新されるはずです。

【B-3】はRailsで該当するコマンドはありません。

【C】 npx prisma migrate status

データベースに適用済みのマイグレーションとまだ適用されていない保留中のマイグレーションを表示します。
Prismaスキーマとデータベースの状態の差異を報告します。
出力例

Prisma schema version: 
  Started:  2023-08-01T12:00:00.000Z
  Finished: 2023-08-01T12:00:05.000Z

Database schema version: 
  Started:  2023-08-01T12:00:00.000Z
  Finished: 2023-08-01T12:00:05.000Z

Status: 
  2 migrations applied
  1 migration pending

Pending migrations:
  20230815120000_add_user_roles

【C】はRailsではrails db:migrate:statusに該当します。

【D】 npx prisma db push

主に開発の初期段階や、迅速なプロトタイピングが必要な場面で使います。このコマンドは、Prismaスキーマの変更を即座にデータベースに反映させるため、アイデアを素早く検証したい場合や、頻繁なスキーマ変更が発生する探索的な開発フェーズで使います。

このコマンドはマイグレーション履歴を作成・管理しないため、本番環境や、データの整合性が重要な段階では使用を避けるべきです。特に、複数の開発者が関わるプロジェクトや、長期的なデータベース管理が必要な場合は、マイグレーションベースのアプローチ(prisma migrate)を使用する方が安全です。

db push は開発の初期段階や個人的な実験、迅速なプロトタイピングには適していますが、プロジェクトが成熟し、データの一貫性や履歴管理が重要になるにつれて、prisma migrate コマンドへの移行を検討すべきです。本番環境や重要なデータを扱う環境では、常に慎重なアプローチを取り、マイグレーションベースの方法を優先することが推奨されます。

【D】はRailsではrails db:schema:load に近いらしいですが、私は使ったことないです。

Discussion