Site cover image

Site icon imagemy-site-blog

Description is here. The icon, the title, the description can be modified in Notion.

prisma migrationで頻出コマンドと個人的運用をまとめる

プロジェクト初期化に利用するコマンド

新しい Prisma プロジェクトをセットアップする

prisma init

# 利用するDBを指定できる
prisma init --datasource-provider sqlite

# 接続先(url)を指定できる
prisma init --url mysql://username:password@localhost:3306/mydb

開発中に利用するコマンド

アーティファクトを生成する(例:Prisma クライアント)

アーティファクトとは

Prismaの文脈で言及される「リレーショナルアーティファクト(Relational Artifacts)」または単に「アーティファクト(Artifacts)」とは、Prismaがデータベーススキーマから生成するさまざまなファイルやコードのことを指します。

Prismaを使用する際、以下のようなアーティファクトが生成されることがあります

  1. Prisma Client
    Prismaは、モデル定義から自動的にタイプセーフなクライアントを生成します。これにより、開発者はデータベースへのクエリをシンプルで安全な方法で書くことができ、TypeScript や JavaScript で動作します。Prisma Clientは、Prisma Schemaから生成されたコードと、それに基づいたクエリエンジンを含みます。
  2. Prisma Migrations
    データモデルの変更履歴を追跡し、データベーススキーマと同期させるために使用されます。これらのマイグレーションファイルは、データモデルに加えられた変更をバージョン管理し、開発環境から本番環境まで一貫したデータベーススキーマの変更を保証します。
  3. Prisma Schema

.prisma ファイルで表されるスキーマ定義ファイルです。このファイルはデータモデル、データベース接続設定、およびその他のPrismaの設定を含みます。これらのアーティファクトは、Prismaツールチェーンの中心部となり、開発者がデータベース操作をより簡単かつ安全に扱えるようにするために不可欠です。Prismaはこれらを生成し、管理するためのコマンドラインツール(CLI)も提供しています。例えば、`prisma generate` コマンドはPrisma Clientの生成に使われ、`prisma migrate` コマンドはデータベースマイグレーションを扱います。リレーショナルアーティファクトという用語が用いられる場合、主にこれらPrismaによって生成されるファイルやコードの集まりを指すことが多いです。これにより、開発者はデータベースをより直感的に操作し、データベーススキーマの変更を効率的に管理できます。

prisma generate
Prisma スキーマを検証する
prisma validate
Prisma スキーマをフォーマットする
prisma format
既存のデータベースからスキーマを取得し、Prisma スキーマを更新する
prisma db pull
Prisma スキーマの状態をデータベースにプッシュする

db pushコマンドは、マイグレーションを使用せずにPrismaスキーマファイルの状態をデータベースにプッシュします。データベースが存在しない場合は、データベースを作成します。

prisma db push

# アーティファクト生成をスキップ
prisma db push --skip-generate

# データベースをリセットしてからスキーマを更新
prisma db push --force-reset

# データが消える警告を無視
prisma db push --accept-data-loss
Seedを利用する
prisma db seed
prisma studioの起動
prisma studio

# ポート指定可能 5050ポートで起動
prisma studio --port 5050

マイグレーションや運用作業で利用するコマンド

マイグレーションの実行、SQL作成

Prisma スキーマからマイグレーションを作成し、データベースに適用し、アーティファクトを生成する(例:Prisma クライアント)

  • migrate dev

開発環境でのみ使用、シャドウデータベースが必要

# マイグレーションを実行する
prisma migrate dev

# マイグレーションのSQLの生成のみを行う
prisma migrate dev --create-only

# マイグレーション名を指定する
prisma migrate dev --name

# seedの適用をスキップする
prisma migrate dev --skip-seed

# generatorの利用をスキップする
prisma migrate dev --skip-generate
マイグレーションの解決

migrate resolveコマンドを使用すると、失敗したマイグレーションを適用済み(ベースラインをサポート)またはロールバック済みとしてマークすることで、本番環境でのマイグレーション履歴の問題を解決できます。

このコマンドは失敗したマイグレーションに対してのみ使用できることに注意してください。成功したマイグレーションでこのコマンドを使用しようとすると、エラーが発生します。

# マイグレーション名を指定して適用済みにする
prisma migrate resolve --applied 20240101000000_add_posts_table

# マイグレーション名を指定してロールバックする
prisma migrate resolve --rolled-back 20240101000000_add_posts_table
マイグレーション状況の確認
prisma migrate status
マイグレーションのリセット

開発環境でのみ使用

  1. 可能であればデータベース/スキーマを削除し、データベース/スキーマを削除できない環境であればソフトリセットを実行する。
  2. データベース/スキーマが削除された場合、同じ名前で新しいデータベース/スキーマを作成します。
  3. すべてのマイグレーションを適用します。
  4. シードスクリプトの実行
# リセットを行う
prisma migrate reset

# 警告をスキップ
prisma migrate reset --force

# generatorやseedをスキップ
prisma migrate reset --skip-generate --skip-seed

本番環境でのみ使用するコマンド

migrationのデプロイ

migrate deploy コマンドは、保留中の移行をすべて適用し、データベースが存在しない場合は作成します。主に非開発環境で使用されます。このコマンドは

  • データベースのドリフトやPrismaスキーマの変更を検索しません。
  • データベースをリセットしたり、成果物を生成したりしません。
  • シャドウデータベースに依存しない
prisma migrate deploy