Zodとは — TypeScriptで実行時バリデーションを実現するスキーマライブラリ
ZodはTypeScriptファーストのスキーマバリデーションライブラリです。型定義とバリデーションを一箇所で管理でき、APIのレスポンス検証・フォームバリデーション・環境変数の型安全な読み込みなどに広く使われています。
Zodの基本的な使い方
import { z } from "zod" でインポートし、z.object({name: z.string(), age: z.number()})のようにスキーマを定義します。schema.parse(data) で検証し失敗時はエラーをthrow、schema.safeParse(data) で{success, data/error}オブジェクトを返します。z.infer<typeof schema> でTypeScriptの型を自動抽出できます。
JSONからZodスキーマを生成するメリット
APIのレスポンスを手動でZodスキーマに変換する作業はミスが起きやすく時間がかかります。JSON to ZodにJSONを貼り付けるとネスト・配列・null・boolean・数値を含む構造を自動解析してZodスキーマを生成します。生成されたスキーマは必要に応じて.optional()を追加したりバリデーションルールを強化して使います。
よく使うZodメソッド
z.string().min(1)(最小文字数)・z.string().email()(メールアドレス)・z.string().url()(URL)・z.number().int()(整数のみ)・z.number().min(0)(0以上)・z.array(z.string())(文字列配列)・z.union([z.string(), z.null()])(nullableな文字列)などが頻出です。z.enum(["a","b","c"])で取りうる値を限定できます。
Zodの活用シーン
Next.jsのAPIルートでリクエストボディを検証する・React Hook Formのresolverとして使う・環境変数をz.object({DATABASE_URL: z.string().url()})で型安全に読み込む・tRPCのルーター定義に使うなど、TypeScriptプロジェクトの様々な場面でZodは活躍します。JSON to Zodで生成したスキーマをベースにプロジェクト固有のバリデーションルールを追加できます。