Zod

TypeScript ファーストのスキーマバリデーションライブラリ。型推論と実行時バリデーションを同一スキーマで行える。

バリデーションスキーマ型推論z.infersafeParse

よく使う場面

  • ·フォーム入力値のバリデーション
  • ·API レスポンスの型安全な検証
  • ·環境変数のスキーマ定義
  • ·Frontmatter・設定ファイルの検証

主要機能

  • ·z.object / z.string / z.number など豊富なプリミティブ
  • ·z.infer による TypeScript 型の自動導出
  • ·safeParse によるエラーハンドリング
  • ·transform / refine による変換・カスタムバリデーション

概要

Zod は TypeScript ファーストのスキーマバリデーションライブラリです。 スキーマ定義から TypeScript の型を自動導出できるため、型定義とバリデーションロジックの二重管理が不要になります。

基本的な使い方

import { z } from "zod";

const userSchema = z.object({
  name: z.string().min(1),
  age: z.number().int().min(0),
  email: z.string().email().optional(),
});

type User = z.infer<typeof userSchema>; // 型を自動導出

const result = userSchema.safeParse({ name: "Alice", age: 30 });
if (result.success) {
  console.log(result.data); // User 型
} else {
  console.error(result.error.issues);
}

transform と refine

const schema = z
  .string()
  .transform((v) => v.trim())
  .refine((v) => v.length > 0, { message: "空文字は不可" });

React Hook Form との組み合わせ

@hookform/resolvers/zod を使うと、フォームバリデーションに Zod スキーマをそのまま利用できます。

import { useForm } from "react-hook-form";
import { zodResolver } from "@hookform/resolvers/zod";

const { register, handleSubmit } = useForm<User>({
  resolver: zodResolver(userSchema),
});

注意点

  • z.infer<typeof schema> で型を導出し、別途 type 定義を書かない
  • parse はエラー時に例外を throw する。safeParse を基本とする
  • ネストが深いスキーマは .merge().extend() で分割管理する

関連ドキュメント

関連サンプル

同じテーマや技術スタックを使った実装例