Prisma 7 の Rust を使用しない TypeScript ORM について説明します。v6 から v7 への破壊的変更(プロバイダー名を `prisma-client-js` から `prisma-client` に変更、出力パスが必須に変更、インポート元が `@prisma/client` から生成先パスに変更、データベースドライバーアダプターが必須に変更――PostgreSQL の場合は `@prisma/adapter-pg` など――、設定を TypeScript 設定ファイルに移動――7.10 以降は `prisma7.config.ts`(フォールバックとして `prisma.config.*` も読み込み)、7.0~7.9 は `prisma.config.ts`)を扱います。また、スキーマモデリング、CRUD/リレーション/フィルタリング/ページネーション/トランザクション、型安全な生クエリを実現する TypedSQL、機密フィールドを除外する Omit API についても説明します。
さらに、マイグレーション(ベースライン設定、シャドウデータベース、スキーマの統合、ゼロダウンタイム)、パフォーマンス(N+1 の検出、コネクションプーリング、Accelerate)、セキュリティ(SQL インジェクションの防止、行レベルセキュリティ、暗号化)、データベース別ガイド(PostgreSQL、MySQL、SQLite、CockroachDB、Turso――MongoDB は 7.10 までの Prisma 7.x の全リリースでサポートされていないため、6.19 を使い続けてください)、フレームワークとの統合(Next.js、Astro、SvelteKit、Remix など)、Vercel/Netlify/Railway/AWS Lambda/Cloudflare Workers/Docker へのデプロイも扱います。スキーマ設計向けの SOLID 準拠の TypeScript インターフェースのリファレンスも含みます。Better Auth 独自のデータベースアダプター設定(better-auth)については詳しく扱いません。このスキルの対象は ORM レイヤー自体です。
Prisma 7 ORM
バンドルサイズを 90%削減し、クエリを 3 倍高速化する、Rust を使用しない TypeScript ORM です。
エージェントのワークフロー(必須)
実装の前に、必ず 3 つのエージェントを並列で起動してください。それぞれ name を指定して Agent を 1 回ずつ呼び出します。
- fuse-ai-pilot:explore-codebase - 既存のスキーマとデータベースのパターンを分析します
- fuse-ai-pilot:research-expert - Context7/Exa を使って Prisma 7 の最新ドキュメントを確認します
- mcp__context7__query-docs - 破壊的変更とマイグレーションガイドを確認します
実装後、検証のために fuse-ai-pilot:sniper を実行してください。
概要
使用する場面
- Next.js 16 アプリケーションでのデータベースアクセス
- TypeScript の完全な推論を備えた型安全なクエリ
- スキーマファーストのデータベースモデリングとマイグレーション
- TypedSQL を必要とする複雑なクエリ
- Omit API による機密フィールドの除外
Prisma 7 を選ぶ理由
| 機能 | メリット |
|---|
| Rust を使用しないクライアント | バンドルサイズを 90%削減(14MB → 1.6MB) |
| クエリパフォーマンス | 大規模なデータセットで最大 3 倍高速 |
| ESM ファースト | ネイティブ ES モジュール、モダンなアーキテクチャ |
| TypedSQL | 型安全な生 SQL クエリ |
| Omit API | 機密フィールドをグローバルに除外 |
| ドライバーアダプター | データベースドライバーとの直接統合 |
v6 からの破壊的変更
重要なマイグレーション項目
| 変更点 | v6 | v7 |
|---|
| プロバイダー | prisma-client-js | prisma-client |
| 出力パス | 任意 | 必須 |
| インポート | @prisma/client | ./generated/prisma/client |
| ドライバー | 組み込み | アダプターが必須 |
| 設定 | スキーマのみ | prisma7.config.ts(7.10 以降。prisma.config.* にフォールバック);prisma.config.ts(7.0~7.9) — prisma init が作成したファイルを編集してください |
必須のスキーマ変更
プロバイダーには prisma-client を指定し、出力パスを明示してください。node_modules への生成は行われなくなりました。
ドライバーアダプターが必須
PostgreSQL では @prisma/adapter-pg、MySQL では @prisma/adapter-mariadb、SQLite では @prisma/adapter-better-sqlite3 が必要です。
主な 7.x マイナーリリース(現在の安定版:7.10.0)
| バージョン | 変更点 |
|---|
| 7.4 | Prisma Client のクエリプランキャッシュ、partialIndexes プレビュー機能(@@index(..., where: raw("..."))) |
| 7.5 | セーブポイントによるネストされたトランザクションのロールバック |
| 7.6 | prisma postgres link、@prisma/adapter-pg が接続文字列を直接受け付けるように |
| 7.7 | prisma bootstrap コマンド |
| 7.8 | PrismaClient の queryPlanCacheMaxSize オプション(0 でキャッシュを無効化) |
| 7.9 | CLI のタブ補完、AI エージェントの安全性チェックを db push --accept-data-loss に拡張、7.0 からの TypeScript パフォーマンス低下を修正 |
| 7.10 | Prisma Studio を 127.0.0.1 にバインドし、オリジンをチェック、@prisma/adapter-mariadb が既存のプールを受け付けるように |
Prisma 8 はリリース候補版のみです(npm の latest タグは 8.0.0-rc.* を指しています)。安定版をインストールするには、prisma@7 / @prisma/client@7 を固定してください。
SOLID アーキテクチャ
モジュール構成
データベースコードは modules/cores/db/ にまとめられています。
modules/cores/db/prisma.ts - PrismaClient のシングルトン
modules/cores/db/generated/ - 生成されたクライアント
prisma/schema.prisma - スキーマ定義
prisma/migrations/ - マイグレーション履歴
prisma7.config.ts - Prisma の設定(7.0~7.9:prisma.config.ts)
ファイル構成
| ファイル | 用途 |
|---|
prisma.ts | シングルトンクライアント |
schema.prisma | モデル、リレーション |
seed.ts | データベースのシード |
主な概念
シングルトンパターン(Next.js)
ホットリロード時に複数の PrismaClient インスタンスが作成されるのを防ぎます。開発時には globalThis を使用してインスタンスをキャッシュします。
出力先パス
生成されたクライアントは node_modules ではなく、カスタムパスに出力されます。生成されたフォルダーからインポートしてください。
ドライバーアダプター
パフォーマンスと制御性を向上させるため、データベースドライバーを直接統合します。接続プーリングはドライバーレベルで設定します。
TypedSQL
型安全性を完全に保ちながら、生の SQL を記述できます。クエリに基づいて結果に型が付与されます。
Omit API
フィールドをグローバルまたはクエリごとに除外できます。パスワードや機密データに最適です。
リファレンスガイド(130 ファイル)
基本設定
| 必要な項目 | リファレンス |
|---|
| 初期設定 | installation.md |
| PrismaClient のシングルトン | client.md |
| クライアント API メソッド | client-api.md |
| 設定 | prisma-config.md |
| CLI コマンド | cli-reference.md |
| エディターの設定 | editor-setup.md |
スキーマとモデリング
| 必要な項目 | リファレンス |
|---|
| スキーマ設計 | schema.md |
| スキーマ構文 | schema-reference.md |
| データモデリング | data-modeling.md |
| フィールド属性 | field-attributes.md |
| モデル属性 | model-attributes.md |
| 列挙型 | enums.md |
| デフォルト値 | default-values.md |
| 複合型 | composite-types.md |
| スカラーリスト/配列 | scalar-lists.md |
| 参照アクション | referential-actions.md |
クエリと操作
| 必要な項目 | リファレンス |
|---|
| CRUD 操作 | queries.md |
| リレーション | relations.md |
| フィルタリング | filtering.md |
| ソート | sorting.md |
| Select と Include | select-include.md |
| ページネーション(カーソル) | pagination-cursor.md |
| ページネーション(オフセット) | pagination-offset.md |
| Distinct | distinct.md |
| Count と exists | count-exists.md |
| 大文字と小文字の区別 | case-sensitivity.md |
| 集計 | aggregations.md |
| トランザクション | transactions.md |
高度なクエリ
| 必要な項目 | リファレンス |
|---|
| TypedSQL | typedsql.md |
| 生のクエリ | raw-queries.md |
| JSON フィールド | json-fields.md |
| 全文検索 | full-text-search.md |
| ビュー | views.md |
| ストアドプロシージャ | stored-procedures.md |
| トリガー | triggers.md |
| 制約 | constraints.md |
| 高度なインデックス | indexes-advanced.md |
Migrations
| Need | Reference |
|---|
| Migration workflow | migrations.md |
| Seeding | seeding.md |
| Baselining | baselining.md |
| Shadow database | shadow-database.md |
| Migration history | migration-history.md |
| Squashing | squashing.md |
| Hotfixing | hotfixing.md |
| Down migrations | down-migrations.md |
| Data migrations | data-migrations.md |
| Zero-downtime | zero-downtime.md |
Performance
| Need | Reference |
|---|
| Optimization | optimization.md |
| Query optimization | query-optimization.md |
| N+1 problem | n-plus-one.md |
| Batching | batching.md |
| Lazy loading | lazy-loading.md |
| Caching strategies | caching-strategies.md |
| Connection limits | connection-limits.md |
| Cold starts | cold-starts.md |
| Bundle size | bundle-size.md |
| Accelerate | accelerate.md |
| Connection pooling | connection-pooling.md |
Security
| Need | Reference |
|---|
| Connection URLs | connection-urls.md |
| Environment variables | environment-variables.md |
| SSL/TLS | ssl-tls.md |
| SQL injection | sql-injection.md |
| Row-level security | row-level-security.md |
| Encryption | encryption.md |
| Audit logging | audit-logging.md |
| GDPR compliance | gdpr-compliance.md |
Databases
| Need | Reference |
|---|
| PostgreSQL | postgresql.md |
| MySQL | mysql.md |
| SQLite | sqlite.md |
| MongoDB (deprecated) | mongodb.md |
| CockroachDB | cockroachdb.md |
| PlanetScale | planetscale.md |
| Supabase | supabase.md |
| Neon | neon.md |
| Turso | turso.md |
Extensions & Integrations
| Need | Reference |
|---|
| Extensions | extensions.md |
| Driver adapters | driver-adapters.md |
| Omit API | omit-api.md |
| Middleware (deprecated) | middleware.md |
| Soft delete | soft-delete.md |
| Read replicas | read-replicas.md |
| Multi-database | multi-database.md |
| Multi-schema | multi-schema.md |
Framework Integrations
| Need | Reference |
|---|
| Next.js | nextjs-integration.md |
| Astro | astro.md |
| Nuxt | nuxt.md |
| SvelteKit | sveltekit.md |
| SolidStart | solidstart.md |
| Remix | remix.md |
| React Router | react-router.md |
| Hono | hono.md |
| Express | express.md |
Auth Integrations
| Need | Reference |
|---|
| Clerk | clerk.md |
| Auth.js | authjs.md |
| Better Auth | betterauth.md |
| Permit.io | permit-io.md |
Deployment
| Need | Reference |
|---|
| Deployment guide | deployment.md |
| Vercel | vercel.md |
| Netlify | netlify.md |
| Railway | railway.md |
| Render | render.md |
| Fly.io | flyio.md |
| AWS Lambda | aws-lambda.md |
| Cloudflare Workers | cloudflare-workers.md |
| Docker | docker.md |
| Heroku | heroku.md |
| Deno Deploy | deno-deploy.md |
Tooling
| Need | Reference |
|---|
| VS Code | vscode.md |
| GitHub Copilot | github-copilot.md |
| Tabnine | tabnine.md |
| SafeQL | safeql.md |
| Prisma AI | prisma-ai.md |
| MCP Server | mcp-server.md |
| Turborepo | turborepo.md |
| pnpm workspaces | pnpm-workspaces.md |
Monitoring
| Need | Reference |
|---|
| Error handling | error-handling.md |
| Error codes | error-codes.md |
| Logging | logging.md |
| OpenTelemetry | opentelemetry.md |
| DataDog | datadog.md |
| Studio | studio.md |
| Testing | testing.md |
ORM Comparisons
| Need | Reference |
|---|
| vs TypeORM | vs-typeorm.md |
| vs Sequelize | vs-sequelize.md |
| vs Drizzle | vs-drizzle.md |
| vs Mongoose | vs-mongoose.md |
| vs Kysely | vs-kysely.md |
Migration Guides
| Need | Reference |
|---|
| From TypeORM | migrate-from-typeorm.md |
| From Sequelize | migrate-from-sequelize.md |
| From Drizzle | migrate-from-drizzle.md |
TypeScript インターフェース(SOLID)
references/interfaces/ には、実装とは分離された、SOLID に準拠する Prisma 7 スキーマ設計用の型定義があります。型付きスキーマコードの作成またはレビュー時に読み込んでください。
| 必要な内容 | リファレンス |
|---|
| すべてのインターフェースファイルの概要 | interfaces/INDEX.md |
スキーマ型:GeneratorConfig、ModelDefinition、FieldAttribute、EnumDefinition | interfaces/schema.types.md |
| データモデリング型:正規化、多重度 | interfaces/data-modeling.types.md |
| Enum 型:値の定義、ステータス/ロールのパターン | interfaces/enums.types.md |
| フィールド属性型:識別子、一意性、デフォルト、マッピング | interfaces/field-attributes.types.md |
| モデル属性型:複合キー、複合インデックス | interfaces/model-attributes.types.md |
| リレーション型:一対一、参照アクション、カスケード | interfaces/relations.types.md |
| マイグレーション型:ワークフロー、デプロイ、シーディング | interfaces/migrations.types.md |
ベストプラクティス
- Next.js でのシングルトン - PrismaClient を globalThis にキャッシュします
- 出力パスが必須 - node_modules には生成しないでください
- ドライバーアダプター - パフォーマンス向上のため、ネイティブドライバーを使用します
- 機密フィールドを除外 - パスワードにはグローバルな omit を設定します
- 複雑なクエリには TypedSQL - Prisma で表現できないクエリに使用します
- インデックスの検証 - N+1 の問題がないか、クエリプランを確認します
禁止されているパターン
| パターン | 理由 | 代替案 |
|---|
@prisma/client からインポートする | v7 では生成先のパスが必須です | ./generated/prisma/client からインポートする |
prisma-client-js プロバイダー | v7 で非推奨です | prisma-client を使用する |
| 出力パスを指定しない | v7 では必須です | generator に output を設定する |
| MongoDB | v7.x(7.0-7.10)ではサポートされていません | Prisma 6.19 を使い続ける |
| datasource 内の url | 非推奨です | 設定ファイルを使用する(7.10 以降は prisma7.config.ts、7.0~7.9 は prisma.config.ts) |