TL;DR

Node.js と TypeScript のためのオープンソースの ORM。主に次の 3 つで構成される。

仕組み

セットアップ

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 ができる。

関連

出典