zod
公式サイトzodとは
zodは、「このデータはこういう形で、各項目はこういう条件を満たすべき」という定義をTypeScriptのコードとして書き、実際のデータがその定義に合っているかを検証するためのライブラリです。定義した内容からTypeScriptの型を自動的に導き出せるため、検証ルールと型定義を別々に書いて食い違う、という問題を防げます。フォームの入力チェック、APIが受け取るデータの検証、設定ファイルや環境変数の確認など、外部から入ってくるデータの入口で使われます。
弊社が採用する理由
弊社では、Next.jsやReactで作る画面の入力チェックと、Node.jsで作るサーバー側のデータ検証にzodを採用しています。この会社サイトでも、ページの内容を記述したデータがルールどおりかをzodで検証してから公開しています。採用の理由は、要件定義で決めた「必須項目」「文字数の上限」「選べる値の種類」といった業務ルールを、一か所に宣言としてまとめられることです。同じ定義を画面側とサーバー側の両方で使えるため、片方だけ更新して食い違うことを防げます。TypeScriptの型が定義から導かれるので、項目を追加したときに影響する箇所がコードの実行前にわかります。また、生成AIの出力のように形が保証されないデータを扱う際にも、期待する形かどうかをzodで確認してから処理に進めることで、想定外の動作を減らしています。
向いている案件
- 入力項目が多く、業務ルールの厳密なチェックが必要なフォーム
- 画面とサーバーで同じ検証ルールを共有したいWebアプリケーション
- 外部APIや生成AIからの応答など、形が保証されないデータの受け取り
保守・移行の観点
zodは比較的安定したライブラリですが、大きな更新では記述方法やエラー内容の形式が変わることがあります。エラーメッセージを画面に表示している場合は、更新後に表示が崩れていないかを確認してください。検証ルールは業務ルールそのものなので、仕様変更の際はまずzodの定義を更新し、そこから影響する画面やサーバー処理を型チェックで洗い出す進め方が安全です。定義に対する単体テストを用意しておくと、ルール変更の意図しない影響を早く発見できます。
組み合わせて使う技術
よくあるご質問
入力チェックはサーバー側だけで十分ではないですか?
安全性の観点ではサーバー側の検証が必須ですが、画面側でも同じルールで即座に確認できると利用者の使い勝手が向上します。zodを使うと同じ定義を両方で使えるため、二重管理になりません。
Laravelで作ったシステムでもzodは使えますか?
zodはTypeScript用のライブラリなので、サーバー側がLaravelの場合は画面側で使います。APIの仕様をOpenAPIで管理していれば、そこから画面側の検証定義を生成することもできます。
関連するサービス
関連する開発ガイド
監修: Unlogical Systems合同会社(杉並区・西荻窪)公開