GraphQL SDL to Zod バリデーションスキーマ生成
GraphQL & Zod Toolchain

GraphQL SDL to Zod Validation Schema Generator

GraphQL SDL の型定義、クエリ、入力を、Null 許容性を適切に制御したランタイム Zod バリデーションスキーマ(z.object、z.string、z.array)へ自動変換します。

100% クライアント側プライバシー
サーバー送信ゼロ
プリセット:
厳格な Null 許容処理
GraphQL SDL Definition
import { z } from "zod";

// =========================================
// Custom Scalars
// =========================================

export const DateTimeSchema = z.string().datetime();
export type DateTime = z.infer<typeof DateTimeSchema>;

// =========================================
// Enums
// =========================================

export const CurrencySchema = z.enum(["USD", "EUR", "GBP", "JPY"]);
export type Currency = z.infer<typeof CurrencySchema>;

export const OrderStatusSchema = z.enum(["PENDING", "PROCESSING", "SHIPPED", "DELIVERED", "CANCELLED"]);
export type OrderStatus = z.infer<typeof OrderStatusSchema>;

// =========================================
// Object Types
// =========================================

export const UserSchema = z.object({
  id: z.string(),
  email: z.string(),
  fullName: z.string(),
  phoneNumber: z.string().nullish(),
  addresses: z.array(AddressSchema),
  primaryPaymentMethod: PaymentMethodSchema.nullish(),
  createdAt: z.string().datetime(),
});
export type User = z.infer<typeof UserSchema>;

export const AddressSchema = z.object({
  id: z.string(),
  street: z.string(),
  city: z.string(),
  postalCode: z.string(),
  countryCode: z.string(),
  isDefault: z.boolean(),
});
export type Address = z.infer<typeof AddressSchema>;

export const MoneySchema = z.object({
  amount: z.number(),
  currency: CurrencySchema,
});
export type Money = z.infer<typeof MoneySchema>;

export const PaymentMethodSchema = z.object({
  id: z.string(),
  type: z.string(),
  last4: z.string(),
  expMonth: z.number().int(),
  expYear: z.number().int(),
});
export type PaymentMethod = z.infer<typeof PaymentMethodSchema>;

export const OrderSchema = z.object({
  id: z.string(),
  orderNumber: z.string(),
  customer: UserSchema,
  status: OrderStatusSchema,
  total: MoneySchema,
  itemsCount: z.number().int(),
  createdAt: z.string().datetime(),
});
export type Order = z.infer<typeof OrderSchema>;

// =========================================
// Input Object Types
// =========================================

export const CheckoutInputSchema = z.object({
  userId: z.string(),
  shippingAddressId: z.string(),
  paymentMethodId: z.string(),
  notes: z.string().nullish(),
  couponCode: z.string().nullish(),
});
export type CheckoutInput = z.infer<typeof CheckoutInputSchema>;
GraphQL 型の総数
9(5 types, 1 inputs)
フィールド数
32
28 non-null • 4 nullable
生成された Zod スキーマ
v3.x Runtime Schema
Zero Dependencies

ゼロナレッジ・完全ローカル実行

すべてのデータ処理、解析、コード生成はお使いのブラウザ内部メモリで完結します。外部サーバーへの送信はゼロです。

超高速・即時リアクティブ演算

最適化されたクライアント側解析パイプラインにより、キーストロークと同時に遅延なくリアルタイムで結果を生成します。

公式仕様準拠・高信頼アーキテクチャ

IETF RFCや公式業界仕様に厳格に準拠し、エッジケースの安全な処理とメモリリークのない堅牢な実行を保証します。

技術リファレンス&アーキテクチャガイド

GraphQL SDL to Zod バリデーションスキーマ生成 — リファレンスガイド

GraphQL SDL の型定義、クエリ、入力を、Null 許容性を適切に制御したランタイム Zod バリデーションスキーマ(z.object、z.string、z.array)へ自動変換します。

主要パラメータ&設定項目

nullabilityModestring

GraphQL の Null 許容フィールド(! のないフィールド)を Zod に変換する際のモードを指定します: 'nullable' (.nullable())、'optional' (.optional())、または 'nullish' (.nullish())。

初期値: "nullable"
scalarMappingobject

カスタムスカラー(DateTime、UUID、JSON など)を対応する Zod バリデータ式にマッピングするディクショナリ設定です。

初期値: { "DateTime": "z.string().datetime()", "UUID": "z.string().uuid()", "JSON": "z.record(z.any())" }
handleRecursionboolean

自己参照や相互循環参照を持つオブジェクト定義を z.lazy(() => Schema) でラップし、循環依存によるランタイムクラッシュを防止します。

初期値: true
generateInferredTypesboolean

生成された各 Zod スキーマに対して、z.infer<typeof Schema> による TypeScript 型推論定義を出力コードへ自動付与します。

初期値: true

プロの活用テクニック&推奨設定

z.lazy() を活用した循環参照エラーの回避

GraphQL では User が posts を持ち、Post が author (User) を持つような双方向参照が一般的です。Zod 変換時は循環プロパティを z.lazy(() => TargetSchema) でラップし、明示的な型注釈を付与することでモジュール評価時の ReferenceError を防止できます。

Query 出力型と Mutation 入力型の分離

GraphQL の input 型は通常の type 型とは区別して Zod スキーマ化してください。入力型ではフィールドの省略(undefined)が許容されるケースが多く、出力型の厳格な null 処理とポリシーを分ける必要があります。

日付・時刻スカラーにおける型強制の使い分け

クライアントから送信される ISO 8601 文字列を Date インスタンスとして直接受け取りたい場合は z.coerce.date() を、文字列形式の完全性検証のみを求める場合は z.string().datetime() をスカラーマッピングに指定します。

よくあるトラブルと解決策

循環参照のある GraphQL 型で 'ReferenceError: Cannot access Schema before initialization' が発生する

JavaScript のモジュール巻き上げでは循環参照される const スキーマを解決できません。'handleRecursion' オプションを有効にし、該当プロパティを z.lazy(() => RelatedSchema) で遅延解決してください。

DateTime や JSON などの独自スカラーが z.unknown() にフォールバックするか検証に失敗する

scalarMapping 設定に該当スカラーの定義を追加してください。例: DateTime には z.string().datetime()、JSON には z.record(z.any()) を割り当てます。

よくある質問 (FAQ)

GraphQL の Null 許容フィールドはどのように Zod に変換されますか?▼

GraphQL SDL では感嘆符 (!) がないフィールドはデフォルトで Null 許容です。非 Null フィールド (String!) は z.string() に変換され、通常のフィールド (String) は nullabilityMode 設定に応じて z.string().nullable() や z.string().nullish() に変換されます。

GraphQL の Enum や Union はサポートされていますか?▼

はい。enum 定義は z.enum(['VAL1', 'VAL2']) に変換され、union 定義(例: union Result = Success | Failure)は z.union([SuccessSchema, FailureSchema]) として出力されます。

生成された Zod スキーマを Apollo Server や tRPC で利用できますか?▼

利用可能です。生成された入力スキーマ (InputSchema) をリゾルバ引数の検証層や tRPC の input 定義に組み込むことで、API 境界で厳密なバリデーションを実行できます。

GraphQL の多重リスト型([Type!]! など)は正しく解釈されますか?▼

はい。配列と要素それぞれの Null 許容性が正確に反映されます。[String] は z.array(z.string().nullable()).nullable()、[String!] は z.array(z.string()).nullable()、[String!]! は z.array(z.string()) と変換されます。

関連するおすすめ開発ツール

すべてのツール →
GraphQL SDL to TypeScript 型・インターフェース変換ツール開発ツール

GraphQL スキーマ定義言語 (SDL) の type、input、enum をクリーンで依存関係ゼロの TypeScript インターフェースや型エイリアスにブラウザ上で直接変換します。

ツールを開く→
Kubernetes ConfigMap & Secret YAML ジェネレーター開発ツール

Base64データエンコード、stringData、TLS、Dockerレジストリ認証、およびimmutableリソースフラグに対応したKubernetes ConfigMapおよびSecretマニフェスト生成ユーティリティ。

ツールを開く→
Kubernetes HorizontalPodAutoscaler (HPA v2) 生成ツール開発ツール

CPU・メモリ使用率ターゲット、カスタムメトリクス、スケールアップ/ダウンの安定化ポリシーを含む Kubernetes HPA v2 (autoscaling/v2) マニフェストを生成します。

ツールを開く→
Redis (redis.conf) 本番運用設定ビルダー&チューニングガイド開発ツール

maxmemory退避ポリシー、RDB/AOF永続化、ネットワークバインド、セキュリティACL認証を最適化したredis.conf設定ファイルを即座に生成・調整します。

ツールを開く→
PostgreSQL (postgresql.conf) ハードウェアチューニング&構成ビルダー開発ツール

ハードウェアスペック(RAM、CPU、ストレージ種別)に基づき、shared_buffers、work_mem、effective_cache_size、max_connections などの最適化された postgresql.conf 設定を自動計算・生成します。

ツールを開く→
Linux Systemd (.timer & .service) ユニット生成ツール開発ツール

OnCalendar スケジューリング、OnBootSec インターバル、Persistent 実行、ランダム遅延(ジッター)を備えた実用的な systemd タイマーおよびコンパニオンサービスユニットを設計・生成します。

ツールを開く→