基本的なワークフロー
上はprisma generate
を使った場合のワークフローだが、prisma migrate
でもほとんど同じ:
-
prisma
と@prisma/client
をインストール-
prisma
はコマンドラインツール(以前は@prisma/cli
だった)。--save-dev
で構わない -
@prisma/client
はJavaScript/TypeScriptから操作するためのインターフェースライブラリ。
-
-
prisma init
で初期化。- この段階で、設定ファイル類(
prisma/schema.prisma
,.env
など)が自動的に生成される。 - 「次のステップ」がコンソール上に表示されるので、そこまで迷わないはず
- この段階で、設定ファイル類(
- スキーマを設定ファイル
prisma/schema.prisma
で編集- 編集するごとに
prisma migrate
でマイグレーションをすると、データベースのアップデート以外にJavaScript/TypeScriptのファイルが自動生成される。 -
@prisma/client
から、データベース操作用クラスをインポートして使える。
- 編集するごとに
インストール
npm i prisma --save-dev
npm i @prisma/client
設定ファイルの生成・初期化
npx prisma init
-
--datasource-privider
オプションをつけることで、データベースのタイプを指定できる(デフォルトだとpostgresql
だったはず) -
prisma/schema.prisma
上で、データベースのタイプを指定。 -
.env
上で、データベースのURLを指定- ふつうのデータベースなら
<provider-type>://<host>:<port>
でよい - SQLiteなら
file:./<database-name>.db
のような相対パスとして指定
- ふつうのデータベースなら
スキーマの編集
例:
"schema.prisma"
// ...
model Post {
id Int @id @default(autoincrement())
title String @db.VarChar(200)
published Boolean @default(true)
content String
authorId Int
author User @relation(fields: [authorId], references: [id])
categories Category[]
}
// ...
関連付けの方法:
- *-to-oneの関係の場合:
@relation
を使う(上のauthor User
)。fields
で指定、関連づけるエンティティのID(上ではauthorId
)を保持しておいて、「このフィールドを使って別のエンティティを関連づける」ことを指示できる。 - one-to-manyの関係の場合:配列型の属性を定義(上の
categories Category[]
)。逆側のエンティティで@relation
の指定をしている場合、references
で指定したフィールドを用いた関連付けが行われる(上のauthor User
の例なら、User
はそのフィールドPosts[]
の関連付けに、Post
のid
を使用する)。
マイグレーション
npx prisma migrate dev ...
-
--create-only
を入れると、マイグレーション用のSQL文は生成するがデータベースには適用しない。生成された文を自分でカスタマイズすることも可能。 -
--preview-feature
を入れると、(おそらく)どういうことをするかをコンソール上に表示してくれる(のだと思う)。 -
--name <stage name>
を入れると、マイグレーション名を指定できる。自分なりのマイグレーション内容の説明を入れたりするのに使う。
いちおうprisma db push
というコマンドも存在している。これはマイグレーションを「オフィシャル」なものにする前にプロトタイピングをして動作を確認したい場合に使うようだけれど、詳細は今のところ知らない。
参考
一般
- https://www.prisma.io/docs/getting-started/setup-prisma/start-from-scratch
- https://www.freecodecamp.org/news/build-nodejs-database-using-prisma-orm/
- https://dev.to/aryanjnyc/introduction-to-prisma-with-next-js-1l0
マイグレーション
- https://www.prisma.io/docs/guides/database/developing-with-prisma-migrate
- https://www.prisma.io/blog/prisma-migrate-preview-b5eno5g08d0b
- https://www.prisma.io/docs/guides/database/prototyping-schema-db-push