【ゾッド】

Zod とは?

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

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

📌 このページのポイント
受け取ったデータを、ルールと照合する スキーマ:検証する条件name: 文字列age: 0以上の数値Zodで、実行時に入力を確認name: "A"age: 24name: "A"age: -1成功ZodError検証したデータ条件に合わないparse:成功時はデータ、失敗時は例外認証や権限の確認は、別の役割
条件と入力は説明用の例です。図の成功はスキーマの条件に合う意味で、入力者の本人確認や操作する権限まで確認した意味ではありません。
ひよこ ひよこ
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を重視したスキーマ検証ライブラリの名前だよ。型を推論する機能と、実行時にデータを検証する機能を備えているんだ

参考資料

← 用語集にもどる