Prisma→Zodスキーマ生成
schema.prismaのmodel・enum定義を解析し、Zodのバリデーションスキーマ(z.object・z.enum)とz.inferによる型定義を生成するツールです。作成用スキーマの出力や、DateTimeのz.coerce.date()への変換にも対応し、すべてブラウザ内で処理されます。
使い方
- 左側にschema.prismaの内容を貼り付けるか、「ファイルを開く」やドラッグ&ドロップでschema.prismaを読み込みます。「サンプルを読み込む」で動作を試すこともできます。
- すべてのmodel・enumについて、Zodスキーマが右側に自動で生成されます。
- 「生成オプション」で、作成用スキーマの有無、DateTimeの扱い、型定義のエクスポートを切り替えます。
- 「クリップボードへコピー」または「schemas.ts をダウンロード」で生成結果を保存し、プロジェクトに追加します(zodパッケージが必要です)。
このツールについて
Zodは、TypeScriptでよく使われるスキーマ宣言・バリデーションライブラリです。APIのリクエストやフォームの入力を検証する際、Prismaで定義したデータベースのモデルと同じ構造のZodスキーマを手で書くのは手間がかかり、モデルの変更に追従し忘れる原因にもなります。このツールはschema.prismaからZodスキーマを自動で生成します。
Prismaの型は、String→z.string()、Int→z.number().int()、DateTime→z.date()、enum→z.enum() のように対応付けます。@db.VarChar(255) のような長さの指定は .max(255) に、null許容のフィールド(String?)は .nullable() になります。「作成用スキーマ」では、@default や @updatedAt でデータベースが値を補うフィールドを省略可能にしたスキーマも生成します。
リレーションフィールド(他のモデルへの参照)は循環参照を避けるために出力から除外し、外部キーのフィールドのみを含めます。schema.prismaの解析には、Prisma Repositoryコード生成器などと共通のパーサーを使用しています。入力内容がサーバーへ送信されることはありません。
よくある質問
生成したコードを使うには何が必要ですか?
プロジェクトにzodパッケージをインストールしてください(npm install zod)。生成されるコードはZod 3・Zod 4のどちらでも利用できる書き方にしています。
リレーションフィールドを含めることはできますか?
モデル同士が互いを参照する循環参照になりやすく、型推論が破綻するため出力していません。必要な場合は、生成したスキーマを .extend() で拡張してください。
Decimal型やJson型はどのように変換されますか?
DecimalはAPIでの扱いやすさを優先して z.number() に、Jsonは任意の値を受け付ける z.unknown() に変換します。用途に合わせて調整してください。
入力したスキーマはサーバーに送信されますか?
送信されません。解析とコード生成はすべてブラウザ内で行われます。