【ゾッド】

Zod とは?

最終更新:
💡 受け取ったデータを、決めたルールでチェック

TypeScript向けのスキーマバリデーションライブラリ。実行時の型検証を型安全に記述でき、APIレスポンスやフォーム入力の検証に活躍する。

📌 このページのポイント
ルールを定義し、実行時に検証する 検証ルールname:文字列age:0以上の数値外部データAPIの返答フォーム入力Zod.parse(data)条件を検証✓ 成功検証済みデータ× 失敗ZodErrorz.infer → スキーマから出力型を推論確認するのは、書いたルールの範囲
parseは条件に合うデータを返し、検証失敗時はZodErrorを投げます。型推論と実行時の検証は別の役割です。
ひよこ ひよこ
TypeScriptで型を書いてるのに、なんでさらにバリデーションが必要なの?
ペンギン先生 ペンギン先生
型注釈はJavaScriptに変換すると取り除かれ、実行時の動作は変えないんだ。APIの返答に型を付けたつもりでも、その値が本当に仕様どおりかを確認したことにはならないよ。
ひよこ ひよこ
Zodではどう確認するの?
ペンギン先生 ペンギン先生
スキーマというルールを作るんだ。たとえばnameは文字列、ageは0以上の数値と決め、受け取ったデータをそのスキーマのparseに渡して検証するよ。
ひよこ ひよこ
ルールに合わなかったら?
ペンギン先生 ペンギン先生
parseは検証に失敗するとZodErrorを投げるよ。safeParseなら成功か失敗かを表す結果が返るので、成功時のデータと失敗時のエラーを分けて扱えるんだ。
ひよこ ひよこ
TypeScriptの型も別に書くの?
ペンギン先生 ペンギン先生
z.inferでスキーマから出力の型を取り出せるよ。ただし変換を行うスキーマでは入力と出力の型が異なることもある。その場合はz.inputとz.outputで区別できるんだ。
ひよこ ひよこ
検証に通れば何でも安全?
ペンギン先生 ペンギン先生
確認したのはスキーマに書いた条件だよ。文字列であると分かっても、本人の入力か、変更する権限があるかまでは分からない。APIやフォームの検証に使い、認証・認可などは別に設計するんだ。
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「Zod」って出てきたら「TypeScriptで実行時にもデータの型をチェックしてくれるライブラリ」と思えればだいたいOK!
📖 おまけ:英語の意味
「Zod」 = ライブラリの名前
💬 TypeScriptを重視したスキーマ検証ライブラリの名前だよ。型を推論する機能と、実行時にデータを検証する機能を備えているんだ

参考資料

← 用語集にもどる