ジェネレーター
Prismaスキーマには、generator
ブロックで表される、1つまたは複数のジェネレーターを含めることができます。
generator client {
provider = "prisma-client-js"
output = "./generated/prisma-client-js"
}
ジェネレーターは、prisma generate
コマンドを実行したときに作成されるアセットを決定します。
Prisma Clientには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"`
}
バイナリターゲット
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を使用する際に、より優れた制御と柔軟性を提供します。
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 Clientコードを配置する場所をPrisma ORMに指示します。プロジェクト構造に適した任意の場所を選択できます。たとえば、次のレイアウトがある場合:
.
├── 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を生成したら、指定したパスから型をインポートします。
import { PrismaClient } from "./generated/prisma/client"
const prisma = new PrismaClient()
これで、Prisma Clientをプロジェクトで使用する準備が整いました。
フィールドリファレンス
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 | 環境から推測 | importステートメントで使用されるファイル拡張子。ts 、mts 、cts 、js 、mjs 、cjs 、または空(ベアインポートの場合)にすることができます。 |
制限事項
- 名前空間の使用:生成されたコードは、
namespace
のようなTypeScript機能に依然として依存しており、特定のランタイムのみのセットアップ(例:--experimental-transform-types
なしのNode.js 22+)との互換性の問題を引き起こす可能性があります。標準ランタイム、tsx
、ts-node
、およびほとんどのバンドラーとの完全な互換性は維持されます。 - ブラウザバンドルなし:現在、公式のブラウザビルドはなく、フロントエンドコードでの型またはenumのインポートはサポートされていません。
どちらの制限事項も、今後のリリースで間もなく解決される予定です。
コミュニティジェネレーター
ジェネレーターがスキーマを手動で読み込まない限り、複数のスキーマファイルを管理するためにprismaSchemaFolder
プレビュー機能を使用している場合、既存のジェネレーターまたは新しいジェネレーターは影響を受けないはずです。
以下は、コミュニティによって作成されたジェネレーターのリストです。
prisma-dbml-generator
: PrismaスキーマをDatabase Markup Language (DBML) に変換します。これにより、簡単な視覚的表現が可能になります。prisma-docs-generator
: Prisma Clientの個別のAPIリファレンスを生成します。prisma-json-schema-generator
: PrismaスキーマをJSONスキーマに変換します。prisma-json-types-generator
: すべてのデータベースでStrongly TypedJson
フィールドのサポートを追加します。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 Schemaからオブジェクト型、入力、引数などを生成します。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
: DTO、Swagger Response、TypeGraphQLなどとして使用できるクラスをPrisma Schemaから生成します。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
: クラスバリデーターのバリデーションがすぐに使えるTypeScriptモデルをPrismaスキーマから出力します。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
: NestJSとPrismaを使用してGraphQLスキーマからCRUDリゾルバーを生成します。prisma-generator-dart
: Dart/FlutterクラスファイルをtoJsonおよびfromJsonメソッドとともに生成します。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およびルータージェネレーター関数を生成します。prismabox
: Prismaモデルから汎用性の高いtypeboxスキーマを生成します。prisma-generator-typescript-interfaces
: Prismaスキーマから依存関係のないTypeScriptインターフェースを生成します。