😽

Prismaのgeneratorが便利すぎた

2024/10/14に公開

はじめに

新規開発のアーキテクチャにT3-Turbo、ORMにPrismaを採用しています。PrismaのGenerator機能を新規開発で導入しました。積極的に使われている印象はないですが、基本的でかなり便利な機能だったので、紹介したいと思います。

公式ページは以下になります。

https://www.prisma.io/docs/orm/prisma-schema/overview/generators

便利なgenerator

個人的に「これは便利だな」と思ったgeneratorを挙げていきます。

  • prisma-erd-generator:エンティティ関係図を生成します。
  • prisma-docs-generator:Prisma Clientの個別のAPIリファレンスを生成します。

補助的機能が充実してますね。ERD生成は記事にしてる人も多かったです。


  • prisma-joi-generator:Prismaスキーマから完全なJoiスキーマを生成します。
  • prisma-yop-generator:Prismaスキーマから完全なYupスキーマを生成します。
  • prisma-zod-generator:Prismaスキーマから完全なZodスキーマを生成します。

スキーマ定義とバリデーションは自動生成されるのか!これで世界は平和に保たれる。


  • typegraphql-prisma:Prisma モデルの TypeGraphQL CRUD リゾルバーを生成します。
  • nexus-prisma:GraphQL Nexus を介して Prisma モデルを GraphQL に投影できるようにします。
  • prisma-generator-pothos-codegen:入力タイプ (引数として使用するため) を自動生成し、分離されたタイプセーフなベース ファイルを自動生成することで、Prisma スキーマから Pothos のカスタマイズ可能なオブジェクト、クエリ、ミューテーションを簡単に作成できます。オプションで、ベース ファイルからすべてのクラッドを一度に生成します。

実装の面倒なCode-FirstなGraphQLも、だいぶラクになりそう。


  • prisma-generator-express:Express CRUDおよびRouterジェネレーター機能を生成します。
  • prisma-nestjs-graphql:@nestjs/graphqlモジュールで使用するためにPrisma スキーマからオブジェクト タイプ、入力、引数などを生成します。
  • prisma-generator-nestjs-dto:NestJSリソースと @nestjs/swaggerで使用するリレーション接続および作成オプションを使用してDTOクラスとエンティティクラスを生成します
  • nestjs-prisma-graphql-crud-gen:NestJSとPrismaを使用してGraphQLスキーマからCRUDリゾルバーを生成します。

バックエンドTSのフレームワークにExpressかNestJSを選択したそこのあなた、もはや神様に愛されている。人類はCRUD生成から解放されました。

実践編

zodを導入することになったので、prisma-zod-generatorをインストールしてみましょう。T3-Turboを前提としているので、適宜Turborepo内での動きとして読み替えてください。T3-Turboについては以下の記事で解説しています。

https://zenn.dev/ficilcom/articles/t3-turbo-architecture

まずは必要なライブラリをpackages/database内にインストールします。(パッケージ管理ツールはpnpm)

$ pnpm install zod prisma-zod-generator --filter=database

prismaの定義ファイルに、インストールしたgeneratorを追加します。

prisma.schema
generator zod {
  provider = "prisma-zod-generator"
  isGenerateSelect  = true
  isGenerateInclude = true
}

対象のフォルダでgenerateします。

$ cd pakagages/database
$ npx prisma generate

というわけで/generatedフォルダ配下にファイルがたくさん出来上がります。このPRが通れば世界が平和になるはずです。

https://x.com/Kokage73812195/status/1844337403693236726

30個のテーブルスキーマに対して2000弱のファイルが出来上がり、Macbook Pro M3 Maxも悲鳴をあげているようです。

フィシルコム

Discussion