【ゾッド】

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コミックスのスーパーマンに登場する将軍ゾッドが名前の由来と言われているよ。データを厳格に統制するイメージだね
← 用語集にもどる