Slide 1

Slide 1 text

バリデーションライブラリ 徹底比較 田中勇太

Slide 2

Slide 2 text

自己紹介 田中勇太 2024年卒 フロントエンドエンジニア 趣味は音楽と洋服とサッカー観戦 最近はロケットリーグにハマってます

Slide 3

Slide 3 text

はじめに(本発表の目的) 1.TypeScriptのバリデーションライブラリについて知ってもらう 2.どのような特徴を持つライブラリなのか理解してもらう 3.バリデーションライブラリを選定する際の参考になる

Slide 4

Slide 4 text

目次 1.各ライブラリの紹介 a.Zod b.Typia c.ArkType d.Valibot 2.バンドルサイズについて 3.パフォーマンスの比較 4.まとめ

Slide 5

Slide 5 text

Zodの特徴 Zod 1.依存関係がない 2.メソッドチェーンでのスキーマ定義 3.JSON Schema への変換機能(zod 4 で追加) 4.(強み)圧倒的な採用事例 + エコシステム

Slide 6

Slide 6 text

Zodの記法 Zod スキーマ + 型定義 パース

Slide 7

Slide 7 text

Zod Zodの弱点 「スキーマから型を生成できる」 ⇨型がスキーマに依存する 全ての型を書き換える 必要がある

Slide 8

Slide 8 text

Typia Typiaの特徴 1.型安全性 2.高速なバリデーション 3.LLM Function へのサポート 4.Protocol Buffer へのサポート

Slide 9

Slide 9 text

Typia Typiaの記法 Type Tags 記法 Comment Tags 記法

Slide 10

Slide 10 text

Typia Typiaの弱点 型から関数を生成するためにTypia独自の トランスパイルのロジックを挟む必要がある

Slide 11

Slide 11 text

ArkTypeの特徴 ArkType 1.シンプルな構文 2.エディタ補完 3.match構文(2.1.0で追加) match構文

Slide 12

Slide 12 text

ArkTypeの記法 ArkType 複雑なスキーマの例 スキーマ定義

Slide 13

Slide 13 text

エディタ補完やエラー ArkType ArkTypeの補完の例 zodの補完の例

Slide 14

Slide 14 text

Valibotの特徴 Valibot 1.API設計 2.バンドルサイズが小さくなりやすい 3.記法がzodと似ている

Slide 15

Slide 15 text

Valibotの記法 Valibot custom関数 スキーマ定義

Slide 16

Slide 16 text

バンドルサイズの比較 ライブラリ名 バンドルサイズ gzip後 ArkType 153KB 47KB Zod v4 217KB 42KB Valibot 9.9KB 3.4KB Typia 7.0KB 2.1KB バンドラー: esbuild(minify + gzip) 比較ライブラリ Zod v4.x Valibot v1.1.0 Typia v9.3.0 ArkType v2.1.20 実験方法 1ファイルに同条件のスキーマ定義+バリデーシ ョン関数のみ記述 全てimport * をする 計測方法 各ファイルを esbuild でバンドル・minify さらにgzip圧縮し、ファイルサイズを比較

Slide 17

Slide 17 text

パフォーマンス比較 オブジェクトのバリデーション 実験環境 OS: macOS Sequoia 15.4 (64-bit) CPU: Apple M3 Pro(12コア, 3.5GHz) メモリ: 36GB Node.js: v24.1.0 使用ライブラリ Zod v4 Valibot v1.1.0 Typia v9.3.0 ArkType v2.1.20 ベンチマーク方法 ツール: Benchmark.js 指標: 1秒あたりのバリデーション回数 (ops/sec)

Slide 18

Slide 18 text

パフォーマンス比較 オブジェクトの配列のバリデーション 実験環境 OS: macOS Sequoia 15.4 (64-bit) CPU: Apple M3 Pro(12コア, 3.5GHz) メモリ: 36GB Node.js: v24.1.0 使用ライブラリ Zod v4 Valibot v1.1.0 Typia v9.3.0 ArkType v2.1.20 ベンチマーク方法 ツール: Benchmark.js 指標: 1秒あたりのバリデーション回数 (ops/sec)

Slide 19

Slide 19 text

まとめ 1.移行の容易性・依存度 どれも同じぐらい剥がすのが大変そう 2.記法については好み 3.現状ではパフォーマンス・バンドルサイズはTypiaに分がある