Ajv vs Zod: どちらのバリデーション手法を選ぶか
AjvはJSON Schemaに対して高いパフォーマンスで検証し、ZodはTypeScriptでスキーマを定義して静的な型を推論します。
AjvはJSON Schemaを高速なバリデータへコンパイルするため、すでにJSON Schema標準(OpenAPI、設定の検証、相互運用)を使っていて最大限のスループットが必要な場合に理想的です。ZodはスキーマをTypeScriptのコードとして定義し、静的な型を推論して優れたDXを提供しますが、標準ベースではなく、一般にコンパイルされたAjvより遅いです。AjvはJSON Schema標準と生の速度で優れ、ZodはTypeScript-firstのDXと型推論で優れます。
| Ajv | Zod | |
|---|---|---|
| 標準 | JSON Schema | TypeScriptネイティブ |
| 型推論 | ツール経由 | 組み込み (z.infer) |
| パフォーマンス | 非常に高速(コンパイル済み) | より遅い |
| 相互運用 | 広い(OpenAPI、設定) | TS中心 |
| 最適な用途 | JSON Schema、高スループット | TypeScript-firstのDX |
ユースケースと標準
Ajvは、JSON Schema上に構築されたシステム、OpenAPI駆動の検証、または最大限の検証スループットが必要なホットパスに適しています。Zodは、優れたDXとともに一つの定義からスキーマと型を得たいTypeScriptアプリに適しています。両者は異なる優先事項に応えます。標準/パフォーマンス vs 型推論とエルゴノミクスです。
テストとCI
どちらも決定論的に検証し、Ajvのコンパイル済みバリデータとZodのスキーマはきれいにunit testできます。いずれもmanaged runnerで動作し、高速なrunnerはバリデーションのテストスイートを短縮します。
Decide with your own numbers, not a feature table
Feature comparisons age badly and rarely decide anything, because both tools in a mature category can do the job. What differs is how each behaves on your repository, and that takes one afternoon to measure.
# time a cold install with each candidate, cache cleared
hyperfine --prepare "rm -rf node_modules" --warmup 1 \
"<tool-a> install" "<tool-b> install"
# and the thing CI actually pays for: a cold run with no local cache
docker run --rm -v "$(pwd):/w" -w /w node:22 sh -c "<tool> install"What actually changes when you switch
- Lockfile format. A switch is a one-way door for anyone still on the old tool until everyone migrates, so plan it as a single coordinated change.
- Resolution strictness. Tools differ on whether an undeclared transitive import works, and the stricter one will surface latent bugs as new failures.
- CI cache configuration. The cache path and key differ per tool; carrying over the old ones silently disables caching.
- Everyone on the team and every runner must move together. Pin the version so they cannot drift.
結論
JSON Schema、OpenAPI、または高スループットの検証を扱うなら: Ajv。推論された型とエルゴノミックなスキーマでTypeScript-firstに構築するなら: Zod。Ajvは標準と速度で、ZodはTypeScriptのDXで優れます。