Prismaとは?
Prismaは、Node.js向けのORM(Object-Relational Mapping)ツールです。
最大の特徴は 型安全なデータベースアクセス にあり、
簡潔なコードでDB操作を記述でき、TypeScriptとの相性が非常に良いことが強みです。
- SQLを直接書かなくてもデータ操作ができる
- スキーマからTypeScriptの型が自動生成される
- 型ミスをコンパイル時に検知できる
※ ORMとは?
ORM(Object-Relational Mapping)とは、
プログラミング言語のオブジェクトを使って
SQLを書かずにデータベースを操作できる仕組み
のことです。
Prismaのデータモデル
Prismaでは、データベースの構造を schema.prisma ファイルで定義します。
model User {
id Int @id @default(autoincrement())
name String
age Int
posts Post[]
}
model Post {
id Int @id @default(autoincrement())
title String
content String
userId Int
user User @relation(fields: [userId], references: [id])
}
ポイント
model:データベースのテーブルを表す@id:主キー@relation:テーブル間のリレーション定義- 1対多の関係(User : Post)を直感的に表現できる
型安全なクエリの作成
Prismaは、スキーマを元にTypeScriptの型を自動生成します。
そのため、型が間違っている場合は
実行前にTypeScriptのエラーとして検知できます。
await prisma.user.create({ data: { name: "Taro", age: "twenty" } }); // age は number 型のため TypeScript エラーになる
Prismaのデータモデル
データベースのテーブル構造を schema.prisma ファイルで定義します。
model User {
id Int @id @default(autoincrement())
name String
age Int
posts Post[]
}
model Post {
id Int @id @default(autoincrement())
title String
content String
userId Int
user User @relation(fields: [userId], references: [id])
}
Prismaでできること
データの取得・作成・更新・削除(CRUD操作)
Prismaでは、以下の CRUD操作 を簡単に行えます。
| 操作 | 内容 |
|---|---|
| C(Create) | 新しいデータを作成 |
| R(Read) | データを取得 |
| U(Update) | 既存データを更新 |
| D(Delete) | データを削除 |
型安全なクエリの作成
データベースのスキーマ(構造)に基づいてTypeScriptの型が自動生成されます。
間違った型のデータを操作しようとすると、TypeScriptのエラーで気づくことができます。
Prismaはデータベース操作時に型安全を提供するためにTypeScriptの型を自動生成します。 Zodはクライアントサイドでのデータバリデーションを提供します。
await prisma.user.create({data: {name: 'Taro', age: 'twenty'}}); // ← ageは数値型なのでエラー
Prismaの主なメソッド
データの取得
findMany():複数のデータを取得findUnique():一意のデータを取得(id などのユニークキーを指定)findFirst():条件に一致する最初のデータを取得
データの作成
create():新しいデータを作成createMany():複数のデータを一括作成
データの更新
update():指定したデータを更新updateMany():条件に一致する複数のデータを一括更新
データの削除
delete(): 指定したデータを削除deleteMany():条件に一致する複数のデータを一括削除
SQLとPrismaの違い
従来のSQLでは、データベースに対して直接クエリを記述する必要があり、複雑なクエリを書くのに手間がかかります。
Prismaを使うことで、SQLに比べて可読性が向上し、型安全性が担保されるため、エラーの早期発見も可能になります。
SELECT 文の違い
-- SQL SELECT * FROM users;
// Prisma const users = await prisma.user.findMany(); console.log(users);
// Prismaでの取得結果 [ {"id": 1, "name": "Taro", "age": 25}, {"id": 2, "name": "Hanako", "age": 30} ]
WHERE 句の違い
-- SQL SELECT * FROM users WHERE age > 20;
// Prisma const users = await prisma.user.findMany({ where: {age: {gt: 20}}, });
// Prismaでの取得結果 [ {"id": 1, "name": "Taro", "age": 25}, {"id": 2, "name": "Hanako", "age": 30} ]
JOIN 句の違い
-- SQL SELECT users.id, users.name, posts.title FROM users JOIN posts ON users.id = posts.user_id;
// Prisma const usersWithPosts = await prisma.user.findMany({ include: {posts: true}, });
// Prismaでの取得結果 [ { "id": 1, "name": "Taro", "age": 25, "posts": [ { "id": 1, "title": "My First Post", "content": "Content of the post", "userId": 1 } ] }, { "id": 2, "name": "Hanako", "age": 30, "posts": [] // 投稿が無い場合 } ]
ORDER BY 句の違い
-- SQL SELECT * FROM users ORDER BY age DESC;
// Prisma const users = await prisma.user.findMany({ orderBy: {age: 'desc'}, });
// Prismaでの取得結果 [ {"id": 2, "name": "Hanako", "age": 30}, {"id": 1, "name": "Taro", "age": 25} ]
INSERT 文の違い
-- SQL INSERT INTO users (name, age) VALUES ('Taro', 25);
// Prisma const newUser = await prisma.user.create({ data: {name: 'Taro', age: 25}, });
// Prismaでの取得結果 { "id": 3, "name": "Taro", "age": 25 }
UPDATE 文の違い
-- SQL UPDATE users SET age = 30 WHERE id = 1;
// Prisma const updatedUser = await prisma.user.update({ where: {id: 1}, data: {age: 30}, });
// Prismaでの取得結果 { "id": 1, "name": "Taro", "age": 30 }
DELETE 文の違い
-- SQL DELETE FROM users WHERE id = 1;
// Prisma await prisma.user.delete({where: {id: 1}});
// Prismaでの取得結果は削除されたユーザーオブジェクト { "id": 1, "name": "Taro", "age": 30 }
まとめ
Prismaは、型安全・可読性・開発効率を大きく向上させてくれるNode.js向けORMです。 従来のSQL中心の開発では、
- クエリの記述ミス
- 型不一致による実行時エラー
- 複雑なJOINや条件分岐による可読性低下
といった課題がありました。 Prismaを使うことでこれらは大きく改善されます。
Prismaのメリットを振り返ると、
- スキーマからTypeScript型が自動生成される
- コンパイル時にエラー検知できる(実行前に気づける)
- SQLを書かずに直感的にDB操作できる
- コードの可読性が高く保守しやすい
特にTypeScriptと組み合わせることで、 「安全に・早く・安心して」バックエンド開発ができるのが最大の魅力です。
今後の学習ステップ
Prismaの基礎を理解したら、次は以下に進むのがおすすめです。
- Migration(DBマイグレーション)
- Seed(初期データ投入)
- Transaction(トランザクション処理)
- Relationの高度な扱い
- Zodとの連携によるフルスタック型安全
PrismaはモダンなNode.js開発ではほぼ標準ツールと言える存在です。 ぜひ実際のアプリ開発で活用してみてください。