【ゾッド】

Zod とは?

💡 データの「門番」→ 怪しいデータは通さない!
📌 このページのポイント
Zod バリデーションフロー 外部データ API / フォーム スキーマ定義 z.object({ name→ z.string(), age→ z.number() }) バリデーション .parse(data) ✓ 型チェック ✓ 値の検証 型安全 推論された型 ZodError 詳細なエラー z.infer<typeof schema> スキーマから TypeScript の型を自動推論 → 二重定義不要!
Zodによるバリデーションフローのイメージ
ひよこ ひよこ

TypeScriptで型を書いてるのに、なんでさらにバリデーションが必要なの?

ペンギン先生 ペンギン先生

いい質問だね。TypeScriptの型はコンパイル時にだけ有効で、実行時には完全に消えてしまうんだ。APIから返ってきたデータや、ユーザーが入力した値は「本当にその型かどうか」実行時には分からないんだよ

ひよこ ひよこ

じゃあ、ifで1個ずつチェックするしかないの?

ペンギン先生 ペンギン先生

それだと大変だよね。Zodを使えば、スキーマを定義するだけでバリデーション型推論を同時にやってくれるんだ。たとえば「nameは文字列、ageは0以上の数値」みたいなルールを簡潔に書けるよ

ひよこ ひよこ

スキーマ定義とTypeScriptの型を両方書かなきゃいけないの?

ペンギン先生 ペンギン先生

そこがZodのすごいところで、スキーマから自動的にTypeScriptの型を推論してくれるんだ。z.inferを使えば型の二重管理が不要になるよ

ひよこ ひよこ

どういう場面で使うことが多いの?

ペンギン先生 ペンギン先生

一番多いのはAPIレスポンスの検証だね。外部APIが仕様どおりのデータを返してくるとは限らないから、受け取った瞬間にZodで検証するパターンが定番だよ。フォームのバリデーションにも使えるし、環境変数の型チェックにも便利だね

ひよこ ひよこ

他のバリデーションライブラリと何が違うの?

ペンギン先生 ペンギン先生

TypeScriptとの統合が段違いに優れているのが最大の特徴だね。Joiやyupもあるけど、Zodは最初からTypeScriptファーストで設計されているから型推論が完璧なんだ。tRPCReact Hook Formなどの人気ライブラリとも連携が強いから、今のTypeScriptエコシステムでは事実上の標準になりつつあるよ

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「Zod」って出てきたら「TypeScriptで実行時にもデータの型をチェックしてくれるライブラリ」と思えればだいたいOK!
📖 おまけ:英語の意味
「Zod」 = ゾッド
💬 DCコミックスのスーパーマンに登場する将軍ゾッドが名前の由来と言われているよ。データを厳格に統制するイメージだね
← 用語集にもどる