運用と注意点

Edge / Serverless 対応、Connection Pool、本番マイグレーション、 パフォーマンス、ロギング、Drizzle との比較まで。

Edge / Serverless で動かす

Vercel(Node ランタイム)

Cloudflare Workers / Pages Functions

AWS Lambda

Connection 管理

Serverless でのつまずき

解決策

  1. Prisma Accelerate: HTTP 経由 + 公式 Pool(推奨)
  2. Supabase Supavisor / PgBouncer: 自前 Pool
  3. RDS Proxy: AWS 公式
  4. Neon Serverless Driver: WebSocket ベース

パフォーマンス Tips

SELECT で必要な列だけ

include を浅く

インデックス

クエリの並列化

// 直列(遅い)
const a = await prisma.post.count()
const b = await prisma.user.count()

// 並列
const [a, b] = await Promise.all([
  prisma.post.count(),
  prisma.user.count(),
])

大量バッチは createMany + chunk

ホット行は楽観ロック

「views を increment」のような頻出更新は updateMany + where 条件で原子的に。

本番マイグレーション

環境変数と Secret

監視・ロギング

テスト

テスト DB

シードデータ

// test/setup.ts
beforeAll(async () => {
  await prisma.$executeRaw`TRUNCATE "Post", "User" RESTART IDENTITY CASCADE`
})

afterAll(async () => {
  await prisma.$disconnect()
})

Mock

セキュリティ

機密フィールドの隠蔽(v5+)

model User {
  id           String  @id
  email        String  @unique
  passwordHash String
}
// $extends で常に exclude
const xprisma = prisma.$extends({
  result: {
    user: {
      passwordHash: { needs: { passwordHash: true }, compute: () => undefined }
    }
  }
})

Drizzle / Kysely との比較

PrismaDrizzleKysely
API独自オブジェクトSQL に近いSQL に近い
スキーマ独自 DSL(schema.prisma)TS で書くTS で書く
マイグレーション純正(強力)drizzle-kit外部
型推論
EdgeDriver Adapter / Accelerateネイティブ◎ネイティブ◎
バンドルサイズ
得意標準的な OLTPSQL 制御SQL ビルダ

Prisma を使い続けるか / 捨てるかの判断軸

運用チェックリスト

失敗事例から学ぶ

関連リソース

本セクションの総括

  1. セットアップ でローカルから始める
  2. schema.prisma でモデルを宣言
  3. migrate で履歴管理
  4. Client で型安全な CRUD
  5. リレーショントランザクション を押さえる
  6. 高度な機能 は必要になってから
  7. 本ページの運用を守る
最後に

Prisma は「型 + DX」を最大化する ORM。本物の SQL の理解とセットで使うと真価を発揮する。 DB を抽象化するツールではあるが、SQL から逃げるためのツールではない。