Prisma備忘録


基本的なワークフロー

上はprisma generateを使った場合のワークフローだが、prisma migrateでもほとんど同じ:

  1. prisma@prisma/clientをインストール
    • prismaはコマンドラインツール(以前は@prisma/cliだった)。--save-devで構わない
    • @prisma/clientはJavaScript/TypeScriptから操作するためのインターフェースライブラリ。
  2. prisma initで初期化。
    • この段階で、設定ファイル類(prisma/schema.prisma, .envなど)が自動的に生成される。
    • 「次のステップ」がコンソール上に表示されるので、そこまで迷わないはず
  3. スキーマを設定ファイル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[]の関連付けに、Postidを使用する)。

マイグレーション

npx prisma migrate dev ...
  • --create-onlyを入れると、マイグレーション用のSQL文は生成するがデータベースには適用しない。生成された文を自分でカスタマイズすることも可能。
  • --preview-featureを入れると、(おそらく)どういうことをするかをコンソール上に表示してくれる(のだと思う)。
  • --name <stage name>を入れると、マイグレーション名を指定できる。自分なりのマイグレーション内容の説明を入れたりするのに使う。

いちおうprisma db pushというコマンドも存在している。これはマイグレーションを「オフィシャル」なものにする前にプロトタイピングをして動作を確認したい場合に使うようだけれど、詳細は今のところ知らない。

参考

一般

マイグレーション

クライアント