Prisma頻出コマンドとマイグレーションの運用

Prisma頻出コマンドとマイグレーションの運用

2023-06-286 min read

目次

  1. 概要
  2. コマンド一覧
  3. 個人的な運用方法
  4. 参考

概要

TypeScript の ORM であるPrismaについて、 しばしば利用するコマンドを一覧にしました。

注意事項

参考にされる際には以下の点についてご留意いただいた上で、本家のドキュメントをご覧ください。

  • DB によってはサポートしていないコマンドがあります。
  • 破壊的な変更が発生するものがあります。

コマンド一覧

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

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

prisma init
# 利用するDBを指定できる
prisma init --datasource-provider sqlite
# 接続先(url)を指定できる
prisma init --url mysql://username:password@localhost:3306/mydb

バージョンを確認する

prisma version
# or
prisma -v
# jsonでもできます
prisma version --json

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

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

prisma generate
# ./prisma/schema.prisma 以外のパスを指定できる
prisma generate --schema=./alternative/schema.prisma
# ファイルの変更を監視できる
prisma generate --watch
# 特定のジェネレータを指定して生成できる。複数も可能。
prisma generate --generator client --generator zod_schemas

Prisma スキーマを検証する

prisma validate
# ./prisma/schema.prisma 以外のパスを指定できる
prisma validate --schema=./alternative/schema.prisma

Prisma スキーマをフォーマットする

prisma format
# ./prisma/schema.prisma 以外のパスを指定できる
prisma format --schema=./alternative/schema.prisma

既存のデータベースからスキーマを取得し、Prisma スキーマを更新する

prisma db pull
# ./prisma/schema.prisma 以外のパスを指定できる
prisma db pull --schema=./alternative/schema.prisma
# ファイルではなく標準出力に結果を表示する
prisma db pull --print
# 強制オプション
prisma db pull --force

Prisma スキーマの状態をデータベースにプッシュする

prisma db push
# ./prisma/schema.prisma 以外のパスを指定できる
prisma db push --schema=./alternative/schema.prisma
# アーティファクト生成をスキップ
prisma db push --skip-generate
# データベースをリセットしてからスキーマを更新。
prisma db push --force-reset
# データが消える警告を無視。
prisma db push --accept-data-loss

Seedを利用する。

prisma db seed
# パスの指定や接続先の指定も可能
prisma db seed --schema=./hoge/schema.prisma --url=mysql://username:password@localhost:3306/mydb

prisma studioの起動。

prisma studio
# 8080ポートで起動
prisma studio --port 8080

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

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

# マイグレーションを実行する
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

マイグレーションの解決

# マイグレーション名を指定して移行を適用済みにする
prisma migrate resolve --applied ”20201231000000_add_users_table”
# マイグレーション名を指定してロールバックする
prisma migrate resolve --rolled-back "20201231000000_add_users_table"

マイグレーション状況の確認

prisma migrate status

diff の取得

# diffを表示する
prisma migrate diff \
  --from-url "$DATABASE_URL" \
  --to-url "postgresql://login:password@localhost:5432/db2"
# diffをsqlとして書き出す
prisma migrate diff \
 --from-url "$DATABASE_URL" \
 --to-migrations ./migrations \
 --script > script.sql

マイグレーションのリセット (本番環境では利用するものではないと思われる)

# リセットを行う。
prisma migrate reset
# 警告をスキップ
prisma migrate reset --force
# generatorやseedをスキップ
prisma migrate reset --skip-generate --skip-seed
# ./prisma/schema.prisma 以外のパスを指定できる
prisma migrate reset --schema=./alternative/schema.prisma

SQL を実行する

# ファイルを指定してSQLを実行する
prisma db execute --file ./script.sql --schema schema.prisma
# 標準出力を利用してSQLを実行する
echo 'TRUNCATE TABLE dev;' | prisma db execute --stdin --url="mysql://username:password@localhost:3306/mydb"

個人的な運用方法

ステージング環境とプロダクション環境でマイグレーション履歴を同期することを前提に 次のような手順で管理するのが良いのかなと思います。

ステージング

# マイグレーションファイルを生成
prisma migrate dev --name migration1 --create-only

プロダクション

# マイグレーションファイルをプロダクション環境に適用
prisma migrate deploy

参考

Prisma CLI Command Reference

Tags
javascript(110)
node.js(54)
linux(54)
amazon%20aws(47)
typescript(45)
%E3%82%A2%E3%83%AB%E3%82%B4%E3%83%AA%E3%82%BA%E3%83%A0(36)
%E7%94%BB%E5%83%8F%E5%87%A6%E7%90%86(30)
html5(29)
php(24)
centos(24)
python(22)
%E7%AB%B6%E6%8A%80%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0(21)
mac(21)
mysql(20)
canvas(19)
opencv(17)
%E9%9B%91%E8%AB%87(16)
docker(16)
wordpress(15)
atcoder(14)
apache(12)
%E6%A9%9F%E6%A2%B0%E5%AD%A6%E7%BF%92(12)
%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9(12)
amazon%20s3(12)
red%20hat(12)
prisma(12)
ubuntu(11)
github(10)
git(10)
vue.js(10)
%E7%94%BB%E5%83%8F%E5%87%A6%E7%90%86100%E6%9C%AC%E3%83%8E%E3%83%83%E3%82%AF(10)
mariadb(10)
react(9)
aws%20cdk(9)
css3(8)
%E5%8F%AF%E8%A6%96%E5%8C%96(8)
%E5%B0%8F%E3%83%8D%E3%82%BF(8)
nestjs(8)
amazon%20lightsail(7)
next.js(7)
%E3%83%96%E3%83%AD%E3%82%B0(6)
cms(6)
oracle(6)
perl(6)
gitlab(6)
iam(5)
amazon%20ec2(5)
%E8%B3%87%E6%A0%BC%E8%A9%A6%E9%A8%93(5)
aws%20amplify(5)
curl(4)
Author
githubzennqiita
ただの備忘録です。

※外部送信に関する公表事項