メインコンテンツにスキップ

ジェネレーター

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バイナリターゲットは特別です。具体的なオペレーティングシステムにはマッピングされません。代わりに、nativebinaryTargetsで指定されている場合、Prisma Clientは現在のオペレーティングシステムを検出し、自動的に正しいバイナリターゲットを指定します。

例として、macOSを実行していて、次のジェネレーターを指定すると仮定します。

prisma/schema.prisma
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.prismaprisma-clientジェネレーターを構成する

generatorブロックを更新します。

prisma/schema.prisma
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に追加します。

.gitignore
# Keep the generated Prisma Client + query engine out of version control
/src/generated/prisma

将来、Prisma ORMがRustからTypeScriptに完全に移行すると、生成されたディレクトリをバージョン管理に安全に含めることができます。

4. アプリケーションでPrisma Clientを使用する

Prisma Clientを生成したら、指定したパスから型をインポートします。

src/index.ts
import { PrismaClient } from "./generated/prisma/client"

const prisma = new PrismaClient()

これで、Prisma Clientをプロジェクトで使用する準備が整いました。

フィールドリファレンス

generator client { ... }ブロックで次のオプションを使用します。outputのみが必須です。他のフィールドにはデフォルト値があるか、環境とtsconfig.jsonから推測されます。

schema.prisma
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
runtimenodejsターゲットランタイム環境。
サポートされている値
nodejs (エイリアス node)、denobundeno-deployworkerd (エイリアス cloudflare)、edge-light (エイリアス vercel)、react-native
moduleFormat環境から推測モジュール形式(esmまたはcjs)。import.meta.urlまたは__dirnameのどちらを使用するかを決定します。
generatedFileExtensionts生成されたTypeScriptファイルのファイル拡張子(tsmtscts)。
importFileExtension環境から推測importステートメントで使用されるファイル拡張子。tsmtsctsjsmjscjs、または空(ベアインポートの場合)にすることができます。

制限事項

  • 名前空間の使用:生成されたコードは、namespaceのようなTypeScript機能に依然として依存しており、特定のランタイムのみのセットアップ(例:--experimental-transform-typesなしのNode.js 22+)との互換性の問題を引き起こす可能性があります。標準ランタイム、tsxts-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 Typed 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 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インターフェースを生成します。