ジェネレーター
Prisma スキーマは、generator ブロックで表される1つ以上のジェネレーターを持つことができます。
generator client {
provider = "prisma-client-js"
output = "./generated/prisma-client-js"
}
ジェネレーターは、prisma generate コマンドを実行したときにどの資産が作成されるかを決定します。
Prisma クライアントには2つのジェネレーターがあります。
prisma-client-js: Prisma Client をnode_modulesに生成します。prisma-client(早期アクセス): ESM サポートを備えたprisma-client-jsの新しくより柔軟なバージョン。プレーンな TypeScript コードを出力し、カスタムのoutputパスを**必要とします**。
または、当社のジェネレーター仕様に準拠する任意の npm パッケージを設定できます。
prisma-client-js
prisma-client-js は、Prisma ORM 6.X 以前のバージョンにおけるデフォルトのジェネレーターです。@prisma/client npm パッケージを必要とし、Prisma Client を node_modules に生成します。
フィールドリファレンス
Prisma の JavaScript クライアントのジェネレーターは、複数の追加プロパティを受け入れます。
previewFeatures: 含めるプレビュー機能binaryTargets:prisma-client-js用のエンジンバイナリターゲット(例: Ubuntu 18+ にデプロイする場合はdebian-openssl-1.1.x、ローカルで作業する場合はnative)。
generator client {
provider = "prisma-client-js"
previewFeatures = ["sample-preview-feature"]
binaryTargets = ["debian-openssl-1.1.x"] // defaults to `"native"`
}
バイナリターゲット
v6.7.0以降、Prisma ORM には queryCompiler プレビュー機能があります。
有効にすると、Prisma Client はRustベースのクエリエンジンバイナリなしで生成されます。:
generator client {
provider = "prisma-client-js"
previewFeatures = ["queryCompiler", "driverAdapters"]
}
queryCompiler とともにドライバアダプタプレビュー機能が必要であることに注意してください。
queryCompiler プレビュー機能を使用する場合、binaryTargets フィールドは廃止され、不要になります。
prisma-client-js ジェネレーターはいくつかのエンジンを使用します。エンジンは Rust で実装されており、実行可能でプラットフォームに依存するエンジンファイルの形で Prisma Client によって使用されます。コードを実行するプラットフォームに応じて、正しいファイルが必要です。「バイナリターゲット」は、ターゲットプラットフォームにどのファイルが存在すべきかを定義するために使用されます。
正しいファイルは、多くの場合ローカル開発環境とは異なる本番環境にアプリケーションをデプロイする際に特に重要です。
native バイナリターゲット
native バイナリターゲットは特別です。具体的なオペレーティングシステムにマッピングされません。代わりに、native が binaryTargets で指定されている場合、Prisma Client は*現在の*オペレーティングシステムを検出し、それに対して正しいバイナリターゲットを自動的に指定します。
例として、**macOS** を実行していると仮定し、次のジェネレーターを指定します。
generator client {
provider = "prisma-client-js"
binaryTargets = ["native"]
}
その場合、Prisma Client はオペレーティングシステムを検出し、サポートされているオペレーティングシステムのリストに基づいて適切なバイナリファイルを見つけます。macOS Intel x86 (darwin) を使用している場合、darwin 用にコンパイルされたバイナリファイルが選択されます。macOS ARM64 (darwin-arm64) を使用している場合、darwin-arm64 用にコンパイルされたバイナリファイルが選択されます。
注:
nativeバイナリターゲットはデフォルトです。異なる環境へのデプロイのために追加のバイナリターゲットを含めたい場合は、明示的に設定できます。
prisma-client (早期アクセス)
新しい prisma-client ジェネレーターは、さまざまな JavaScript 環境(ESM、Bun、Denoなど)で Prisma ORM を使用する際に、より高い制御と柔軟性を提供します。
このジェネレーターは、アプリケーションのコードベース内のカスタムディレクトリに Prisma Client を生成します。このディレクトリは、generator ブロックの output フィールドで指定されます。これにより、生成されたコードの完全な可視性と制御が得られます。また、生成された Prisma Client ライブラリを複数のファイルに分割します。
現在早期アクセス中のこのジェネレーターは、隠れたり自動的な動作に依存することなく、アプリケーションコードを正確にバンドルできるようにします。
prisma-client-jsとの主な違いは次のとおりです。
outputパスが必要です。node_modulesへの「魔法の」生成はもうありません。moduleFormatフィールドを介して ESM と CommonJS をサポートします。- 追加のフィールドにより、より柔軟です。
- 残りのアプリケーションコードと同様にバンドルされる、プレーンな TypeScript を出力します。
prisma-client ジェネレーターは、Prisma ORM v7 で新しいデフォルトになります。
始める
新しい prisma-client ジェネレーターをプロジェクトで使用するには、以下の手順に従ってください。
1. schema.prisma で prisma-client ジェネレーターを設定する
generator ブロックを更新します。
generator client {
provider = "prisma-client" // Required
output = "../src/generated/prisma" // Required path
}
output オプションは必須です。これはPrisma ORMに生成されたPrisma Clientコードをどこに配置するかを指示します。プロジェクト構造に適した任意の場所を選択できます。例えば、次のレイアウトがある場合
.
├── package.json
├── prisma
│ └── schema.prisma
├── src
│ └── index.ts
└── tsconfig.json
この場合、../src/generated/prisma は、schema.prisma を基準として src/generated/prisma に生成されたコードを配置します。
2. Prisma Client を生成する
以下を実行して Prisma Client を生成します。
npx prisma generate
これにより、Prisma Client のコード(クエリエンジンのバイナリを含む)が、指定された output フォルダに生成されます。
3. 生成されたディレクトリをバージョン管理から除外する
新しいジェネレーターには、TypeScript クライアントコード**および**クエリエンジンの両方が含まれています。クエリエンジンをバージョン管理に含めると、異なるマシンで互換性の問題を引き起こす可能性があります。これを避けるため、生成されたディレクトリを .gitignore に追加してください。
# Keep the generated Prisma Client + query engine out of version control
/src/generated/prisma
将来的には、Prisma ORM が Rust から TypeScript に完全に移行すれば、生成されたディレクトリをバージョン管理に安全に含めることができます。
4. アプリケーションで Prisma Client を使用する
Prisma Client のインポート
Prisma Client を生成したら、指定したパスからインポートします。
import { PrismaClient } from "./generated/prisma/client.js"
const prisma = new PrismaClient()
Prisma Client がプロジェクトで使用できるようになりました。
生成されたモデルタイプのインポート
モデル用に生成された型をインポートする場合は、次のように行います。
import { User, Post } from "./generated/prisma/models.js"
生成されたEnum型のインポート
Enum用に生成された型をインポートする場合は、次のように行います。
import { Role } from "./generated/prisma/enums.js"
フィールドリファレンス
generator client { ... } ブロックで以下のオプションを使用します。output のみが必須です。他のフィールドにはデフォルト値があるか、環境および tsconfig.json から推論されます。
generator client {
// Required
provider = "prisma-client"
output = "../src/generated/prisma"
// Optional
runtime = "nodejs"
moduleFormat = "esm"
generatedFileExtension = "ts"
importFileExtension = "ts"
}
以下は prisma-client ジェネレーターのオプションです。
| オプション | デフォルト | 説明 |
|---|---|---|
output (必須) | Prisma Client が生成されるディレクトリ(例: ../src/generated/prisma)。 | |
runtime | nodejs | ターゲットランタイム環境。 サポートされる値 nodejs (エイリアス node), deno, bun, deno-deploy, workerd (エイリアス cloudflare), edge-light (エイリアス vercel), react-native. |
moduleFormat | 環境から推論 | モジュールフォーマット (esm または cjs)。import.meta.url または __dirname のどちらが使用されるかを決定します。 |
generatedFileExtension | ts | 生成される TypeScript ファイルの拡張子 (ts, mts, cts)。 |
importFileExtension | 環境から推論 | インポート文で使用されるファイル拡張子です。ts、mts、cts、js、mjs、cjs、または空(bare importsの場合)のいずれかになります。 |
出力の分割と型のインポート
prisma-client-js ジェネレーターは、以前はすべての型定義を単一の index.d.ts ファイルに生成していました。これにより、大規模なスキーマの場合、エディターの速度が低下する(例: 自動補完の機能停止)原因となる可能性がありました。
新しい prisma-client ジェネレーターは、生成された Prisma Client ライブラリを複数のファイルに分割することで、単一の大きな出力ファイルの問題を回避します。
以前 (prisma-client-js)
generated/
└── prisma
├── client.ts
├── index.ts # -> this is split into multiple files in 6.7.0
└── libquery_engine-darwin.dylib.node
以降 (prisma-client)
generated/
└── prisma
├── client.ts
├── commonInputTypes.ts
├── enums.ts
├── internal
│ ├── class.ts
│ └── prismaNamespace.ts
├── libquery_engine-darwin.dylib.node
├── models
│ ├── Post.ts
│ └── User.ts
└── models.ts
コミュニティジェネレーター
ジェネレーターがスキーマを手動で読み取る場合を除き、複数ファイルPrismaスキーマを使用している場合は、既存のジェネレーターまたは新しいジェネレーターが影響を受けることはありません。
以下は、コミュニティで作成されたジェネレーターのリストです。
prisma-dbml-generator: PrismaスキーマをDatabase Markup Language (DBML) に変換し、簡単な視覚的表現を可能にします。prisma-docs-generator: Prisma Client の個別の API リファレンスを生成します。prisma-json-schema-generator: Prisma スキーマをJSON スキーマに変換します。prisma-json-types-generator: すべてのデータベースで強力な型付きJsonフィールドのサポートを追加します。prisma-client-jsの出力に基づいて、json フィールドを提供された型に一致するように変更します。コードジェネレーターや IntelliSense などに役立ちます。これらすべてがランタイムコードに影響を与えることはありません。typegraphql-prisma: Prisma モデルのTypeGraphQL CRUD リゾルバーを生成します。typegraphql-prisma-nestjs:typegraphql-prismaのフォークで、Prisma モデルの CRUD リゾルバーを NestJS 用に生成します。prisma-typegraphql-types-gen: Prisma 型定義からTypeGraphQLクラス型とEnumを生成し、生成された出力は次の生成時に上書きされることなく編集でき、型を編集で誤った場合でも修正する機能があります。nexus-prisma: GraphQL Nexusを介してPrismaモデルをGraphQLに投影することを可能にします。prisma-nestjs-graphql:@nestjs/graphqlモジュールで使用するためのオブジェクト型、入力、引数などを Prisma スキーマから生成します。prisma-appsync: AWS AppSync用の完全な GraphQL API を生成します。prisma-kysely: TypeScript SQL クエリビルダーである Kysely の型定義を生成します。これは、エッジランタイムからデータベースに対してクエリを実行したり、Prisma で型安全性を損なうことなくより複雑な SQL クエリを記述したりするのに役立ちます。prisma-generator-nestjs-dto: NestJS Resources および @nestjs/swagger で使用するための、関連のconnectおよびcreateオプションを含む DTO およびエンティティクラスを生成します。prisma-erd-generator: エンティティ関連図を生成します。prisma-generator-plantuml-erd: PlantUML 用の ER 図を生成するジェネレーターです。オプションを有効にすることで、Markdown および Asciidoc ドキュメントも生成できます。prisma-class-generator: Prisma スキーマからクラスを生成し、DTO、Swagger Response、TypeGraphQLなどとして使用できます。zod-prisma: Prisma モデルから Zod スキーマを作成します。prisma-pothos-types: Prisma ベースのオブジェクト型の定義を容易にし、関連の N+1 クエリ問題を解決するのに役立ちます。また、Relay プラグインとの連携により、ノードと接続の定義を簡単かつ効率的に行えます。prisma-generator-pothos-codegen: Prisma スキーマからPothos用のカスタマイズ可能なオブジェクト、クエリ、ミューテーションを簡単に作成するための入力型(引数として使用)と、結合されていない型安全なベースファイルを自動生成します。オプションで、ベースファイルからすべての CRUD を一度に生成することもできます。prisma-joi-generator: Prisma スキーマから完全な Joi スキーマを生成します。prisma-yup-generator: Prisma スキーマから完全な Yup スキーマを生成します。prisma-class-validator-generator: Prisma スキーマからクラスバリデーターのバリデーションが設定された TypeScript モデルを出力します。prisma-zod-generator: Prisma スキーマから Zod スキーマを出力します。prisma-trpc-generator: 完全に実装された tRPC ルーターを出力します。prisma-json-server-generator: json-server で実行可能な JSON ファイルを出力します。prisma-trpc-shield-generator: Prisma スキーマから tRPC シールドを出力します。prisma-custom-models-generator: Prisma の推奨事項に基づいて、Prisma スキーマからカスタムモデルを出力します。nestjs-prisma-graphql-crud-gen: GraphQL スキーマから NestJS と Prisma を使用して CRUD リゾルバーを生成します。prisma-generator-dart: to- and fromJson メソッドを持つ Dart/Flutter クラスファイルを生成します。prisma-generator-graphql-typedef: GraphQL スキーマを生成します。prisma-markdown: ERD図とその説明で構成されたMarkdownドキュメントを生成します。@namespaceコメントタグを介したERD図のページネーションをサポートしています。prisma-models-graph: スキーマに厳密な関係が定義されていないスキーマに対して、双方向のモデルグラフを生成します。カスタムスキーマアノテーションを介して機能します。prisma-generator-fake-data: Prisma モデルのリアルな偽データを生成し、単体/結合テスト、デモなどで使用できます。prisma-generator-drizzle: Drizzle スキーマを簡単に生成するための Prisma ジェネレーターです。prisma-generator-express: Express CRUD および Router 生成関数を生成します。prismabox: Prisma モデルから多用途なTypeBoxスキーマを生成します。prisma-generator-typescript-interfaces: Prisma スキーマからゼロ依存の TypeScript インターフェースを生成します。prisma-openapi: Prisma モデルから OpenAPI スキーマを生成します。