TL;DR
Node.js と TypeScript のためのオープンソースの ORM。主に次の 3 つで構成される。
- Prisma Client: 自動生成される型安全なクエリビルダ
- Prisma Migrate: マイグレーションの仕組み
- Prisma Studio: データベースのデータを表示・編集する GUI
仕組み
セットアップ
npm install prisma --save-dev で入れ、npx prisma init を実行すると、prisma/schema.prisma と .env が作られる。schema.prisma の generator ブロックは、prisma generate を実行したときに作るもの(言語ごとの Prisma Client など)を定義する。datasource ブロックは、データベースへの接続方法を定義する。
generator client {
provider = "prisma-client-js"
}
datasource db {
provider = "postgresql"
url = env("DATABASE_URL")
}モデルの定義
model ブロックでモデルを、enum ブロックで列挙型を定義する。
model Task {
id Int @id @default(autoincrement())
name String @db.VarChar(255)
dueDate String @db.VarChar(10)
status Status @default(NOT_STARTED)
description String?
createdAt DateTime @default(now()) @db.Timestamp(0)
updateAt DateTime @updatedAt @db.Timestamp(0)
}
enum Status {
NOT_STARTED
IN_PROGRESS
COMPLETED
}String はデフォルトで text 型になるので、varchar にしたいときは @db.VarChar で明示する。@db.Timestamp(0) は、時刻を秒の精度で持たせる指定である。
1 対多のリレーションでは、外部キーのフィールドと、関連するモデルを取得するフィールドを足す。後者には @relation を付け、fields に外部キーのフィールド名、references に参照先モデルの ID を書く。更新時(onUpdate)や削除時(onDelete)の動作も指定できる。
model Task {
// ...
userId Int
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
}
model User {
// ...
Task Task[]
}マイグレーション
npx prisma migrate dev --name <ファイル名> は、スキーマの変更からマイグレーションファイルを作り、開発環境のデータベースに適用する。実行すると、prisma/migrations に SQL のファイルと migration_lock.toml ができる。