Prisma 6の概要
Prisma 6は、Typed SQLの導入により、生SQLクエリにも型安全性をもたらします。また、クエリパフォーマンスの改善、新しいクライアント機能が追加されています。
Typed SQL
生SQLクエリに対して完全な型安全性を提供します。
// sql/getUserWithPosts.sql
-- @param {Int} $1:userId
SELECT
u.id,
u.name,
u.email,
json_agg(p.*) as posts
FROM users u
LEFT JOIN posts p ON p.author_id = u.id
WHERE u.id = $1
GROUP BY u.id;
// 生成された型安全な関数
import { getUserWithPosts } from '@prisma/client/sql';
const result = await prisma.$queryRawTyped(
getUserWithPosts(123)
);
// resultは完全に型付けされている
console.log(result.name); // string
console.log(result.posts); // Post[]
パフォーマンス改善
クエリエンジンの最適化
Prisma 5 vs Prisma 6 ベンチマーク:
- 単純なfindMany: 15%高速化
- リレーション含むクエリ: 25%高速化
- 大量データ取得: 30%高速化
バッチ処理の改善
// 自動バッチング
const users = await Promise.all([
prisma.user.findUnique({ where: { id: 1 } }),
prisma.user.findUnique({ where: { id: 2 } }),
prisma.user.findUnique({ where: { id: 3 } }),
]);
// 内部で1つのクエリにバッチ化
新しいクライアント機能
omit でフィールド除外
// パスワードフィールドを除外
const user = await prisma.user.findUnique({
where: { id: 1 },
omit: {
password: true
}
});
// user.password は存在しない
relationLoadStrategy
// 明示的なリレーション読み込み戦略
const user = await prisma.user.findUnique({
where: { id: 1 },
include: {
posts: true
},
relationLoadStrategy: 'join' // または 'query'
});
Prisma Client Extensions 強化
const prisma = new PrismaClient().$extends({
model: {
user: {
// カスタムメソッド
async signUp(email: string, password: string) {
const hashedPassword = await hash(password);
return prisma.user.create({
data: { email, password: hashedPassword }
});
}
}
},
query: {
$allModels: {
// 全モデルに適用するフック
async $allOperations({ model, operation, args, query }) {
const start = Date.now();
const result = await query(args);
console.log(`${model}.${operation}: ${Date.now() - start}ms`);
return result;
}
}
}
});
// 使用
await prisma.user.signUp('user@example.com', 'password123');
マイグレーションの改善
差分マイグレーション
# 差分を確認してからマイグレーション
prisma migrate diff \
--from-schema-datamodel prisma/schema.prisma \
--to-schema-datasource prisma/schema.prisma
# マイグレーション実行
prisma migrate dev --name add_user_profile
マイグレーションのロールバック
# 最後のマイグレーションをロールバック
prisma migrate rollback
Prisma Accelerate
エッジでのコネクションプーリングとキャッシュ機能。
import { PrismaClient } from '@prisma/client/edge';
import { withAccelerate } from '@prisma/extension-accelerate';
const prisma = new PrismaClient().$extends(withAccelerate());
// キャッシュ付きクエリ
const users = await prisma.user.findMany({
cacheStrategy: {
ttl: 60,
swr: 120
}
});
移行ガイド
# Prisma 6にアップグレード
npm install prisma@latest @prisma/client@latest
# クライアント再生成
npx prisma generate
破壊的変更
| 変更 | 対応 |
|---|---|
| Node.js 18以上が必須 | Node.jsをアップグレード |
| 一部のデフォルト値変更 | 明示的に設定 |
まとめ
Prisma 6は、Typed SQLによる生SQLの型安全性、パフォーマンス改善、新しいクライアント機能により、より強力なORMへと進化しました。特にTyped SQLは、複雑なクエリを書く必要がある場合に非常に有用です。
← 一覧に戻る