Zod Mini
注意 — Zod Mini のドキュメントは、タブ付きのコードブロックを通じて通常の Zod のドキュメントと混在しています。このページは、Zod Mini が存在する理由、いつ使用するか、および通常の Zod とのいくつかの重要な違いを説明するために設計されています。
Zod Mini バリアントは、Zod 4 のリリースとともに導入されました。試すには:
インポートするには:
Zod Mini は zod とまったく同じ機能を実装していますが、関数型 で ツリーシェイク可能 な API を使用しています。zod から移行する場合、これは通常、メソッドの代わりに 関数 を使用することを意味します。
ツリーシェイキング (Tree-shaking)
ツリーシェイキングは、最終的なバンドルから未使用のコードを削除するために最新のバンドラーで使用される技術です。デッドコード削除 とも呼ばれます。
通常の Zod では、スキーマは一般的な操作(例:文字列スキーマの .min())を実行するためのさまざまな便利なメソッドを提供します。バンドラーは通常、バンドルから未使用のメソッド実装を削除(「ツリーシェイク」)することはできませんが、未使用のトップレベル関数を削除することはできます。そのため、Zod Mini の API はメソッドよりも多くの関数を使用します。
バンドルサイズの削減に関する一般的なアイデアを提供するために、次の単純なスクリプトを検討してください。
これを Zod と Zod Mini でバンドルすると、次のバンドルサイズになります。Zod Mini では 64% 削減されます。
| パッケージ | バンドルサイズ (gzip) |
|---|---|
| Zod Mini | 2.12kb |
| Zod | 5.91kb |
オブジェクト型を含むわずかに複雑なスキーマを使用した場合:
| パッケージ | バンドルサイズ (gzip) |
|---|---|
| Zod Mini | 4.0kb |
| Zod | 13.1kb |
これにより、関係するバンドルサイズの感覚がつかめるはずです。これらの数値をよく見て、独自のベンチマークを実行し、Zod Mini を使用する価値がユースケースにあるかどうかを判断してください。
いつ Zod Mini を使用する(しない)か
一般的に、バンドルサイズに関して特に厳しい制約がない限り、おそらく通常の Zod を使用すべきです。多くの開発者は、アプリケーションのパフォーマンスに対するバンドルサイズの重要性を過大評価しています。実際には、Zod の規模(通常 5-10kb)のバンドルサイズは、地方や発展途上国の低速なモバイルネットワーク接続を持つユーザーベース向けにフロントエンドバンドルを最適化する場合にのみ意味のある懸念事項です。
いくつかの考慮事項を見てみましょう。
DX (開発者体験)
Zod Mini の API はより冗長で、発見しにくいです。Zod の API のメソッドは、Zod Mini のトップレベル関数よりも、Intellisense を通じてはるかに簡単に発見でき、オートコンプリートも容易です。チェーンされた API でスキーマをすばやく構築することはできません。(Zod の作成者として言えば:私は Zod Mini API を可能な限り人間工学に基づいたものにするために多くの時間を費やしましたが、それでも標準の Zod API を強く好みます。)
バックエンド開発
バックエンドで Zod を使用している場合、Zod の規模のバンドルサイズは意味がありません。これは、Lambda のようなリソースに制約のある環境でも当てはまります。この投稿 は、さまざまなサイズのバンドルでのコールドスタート時間をベンチマークしています。以下は結果の一部です。
| バンドルサイズ | Lambda コールドスタート時間 |
|---|---|
1kb | 171ms |
17kb (非 Mini Zod の gzip サイズ) | 171.6ms (補間値) |
128kb | 176ms |
256kb | 182ms |
512kb | 279ms |
1mb | 557ms |
無視できるほどの 1kb バンドルの最小コールドスタート時間は 171ms です。テストされた次のバンドルサイズは 128kb で、これはわずか 5ms 追加されただけです。gzip 圧縮すると、通常の Zod 全体のバンドルサイズはおよそ 17kb であり、これは起動時間の 0.6ms の増加に相当します。
インターネット速度
一般的に、サーバーへのラウンドトリップ時間 (100-200ms) は、追加の 10kb をダウンロードするのに必要な時間をはるかに上回ります。低速な 3G 接続(1Mbps 未満)でのみ、追加の 10kb のダウンロード時間はより重要になります。地方や発展途上国のユーザー向けに特別に最適化していない場合は、他の何かを最適化することに時間を費やす方がおそらく良いでしょう。
ZodMiniType
すべての Zod Mini スキーマは z.ZodMiniType 基底クラスを継承しており、これはさらに zod/v4/core の z.core.$ZodType を継承しています。このクラスは zod の ZodType よりもはるかに少ないメソッドを実装していますが、いくつかの特に便利なメソッドは残っています。
.parse
これは明らかです。すべての Zod Mini スキーマは、zod と同じ解析メソッドを実装しています。
.check()
通常の Zod には、一般的なチェックを実行するための専用のメソッドがスキーマサブクラスにあります。
Zod Mini では、そのようなメソッドは実装されていません。代わりに、これらのチェックを .check() メソッドを使用してスキーマに渡します。
以下のチェックが実装されています。これらのチェックの一部は、特定のタイプのスキーマ(例:文字列や数値)にのみ適用されます。API はすべて型安全です。TypeScript は、サポートされていないチェックをスキーマに追加することを許可しません。
.register()
レジストリにスキーマを 登録 するため。
.brand()
スキーマを ブランド化 するため。詳細については、ブランド化された型 のドキュメントを参照してください。
.clone(def)
提供された def を使用して、現在のスキーマの同一のクローンを返します。
デフォルトのロケールなし (No default locale)
通常の Zod は英語 (en) ロケールを自動的に読み込みますが、Zod Mini は読み込みません。これにより、エラーメッセージが不要な場合、英語以外の言語にローカライズされている場合、またはその他の方法でカスタマイズされている場合に、バンドルサイズが削減されます。
つまり、デフォルトでは、すべての問題の message プロパティは単に "Invalid input" と表示されます。英語ロケールを読み込むには:
ローカリゼーションの詳細については、ロケール のドキュメントを参照してください。

