関連記事:データベース設計入門
Prisma ORMは、Node.js / TypeScript向けの次世代ORMです。スキーマファイルからTypeScriptの型を自動生成し、型安全なデータベース操作ができるのが最大の特徴です。
Prismaの特徴
- 型安全:スキーマから自動生成されたクライアントで、型の不一致をコンパイル時に検出
- 直感的なAPI:SQLを書かずにリレーションを含む複雑なクエリが可能
- マイグレーション管理:スキーマの変更履歴をコードで管理
- 対応データベース:PostgreSQL、MySQL、SQLite、MongoDB など
セットアップ
npm install prisma @prisma/client
npx prisma init
スキーマ定義
prisma/schema.prisma にデータモデルを定義します。
datasource db {
provider = "postgresql"
url = env("DATABASE_URL")
}
generator client {
provider = "prisma-client-js"
}
model User {
id Int @id @default(autoincrement())
email String @unique
name String?
posts Post[]
}
model Post {
id Int @id @default(autoincrement())
title String
content String?
published Boolean @default(false)
author User @relation(fields: [authorId], references: [id])
authorId Int
createdAt DateTime @default(now())
}
マイグレーション
# マイグレーションの作成・実行
npx prisma migrate dev --name init
# クライアントの再生成
npx prisma generate
CRUD操作
import { PrismaClient } from '@prisma/client';
const prisma = new PrismaClient();
// Create
const user = await prisma.user.create({
data: {
email: '[email protected]',
name: 'テスト太郎',
},
});
// Read
const users = await prisma.user.findMany({
where: { name: { contains: '太郎' } },
orderBy: { createdAt: 'desc' },
});
// Update
const updated = await prisma.user.update({
where: { id: 1 },
data: { name: '新しい名前' },
});
// Delete
await prisma.user.delete({
where: { id: 1 },
});
リレーションを含むクエリ
// ユーザーと投稿を同時に取得
const userWithPosts = await prisma.user.findUnique({
where: { id: 1 },
include: { posts: true },
});
// ネストした作成
const userWithPost = await prisma.user.create({
data: {
email: '[email protected]',
name: '著者',
posts: {
create: {
title: '最初の投稿',
content: 'Prismaで作成しました',
},
},
},
include: { posts: true },
});
Prisma Studio
GUIでデータベースの中身を確認・編集できるツールです。
npx prisma studio
ブラウザが開き、テーブルの内容をスプレッドシートのように操作できます。開発時のデバッグに便利です。
Prismaが向いている場面
- TypeScriptプロジェクトで型安全を重視する場合
- Next.jsやExpressでのAPI開発
Next.js入門も参考にしてください。
- スキーマファーストで開発したい場合
- チームでの開発でマイグレーション管理が必要な場合
他のORMとの比較
| 項目 | Prisma | TypeORM | Sequelize |
|---|---|---|---|
| 型安全 | 自動生成 | デコレータ | 手動定義 |
| 学習コスト | 低い | 中程度 | 中程度 |
| スキーマ定義 | 独自DSL | TypeScript | JavaScript |
| マイグレーション | 標準搭載 | 標準搭載 | 標準搭載 |
まとめ
Prismaは、TypeScriptとの相性が非常に良いORMです。スキーマ定義から型が自動生成されるため、データベース操作のミスをコンパイル時に防げます。Next.jsやExpressと組み合わせて、まず小さなCRUDアプリから試してみましょう。