Standard Schemaで何が実現できる?
初めに
本記事では先日v1.0.0
が公開されたStandard Schame
について紹介します。
本記事で紹介すること
-
Standard Schema
とは何か -
Standard Schema
で実現できること -
Standard Schema
に準拠済みのツール・フレームワーク
本記事で紹介しないこと
- スキーマライブラリでの準拠方法
Standard Schemaとは
Standard Schema
はzod
やvalibot
といったスキーマバリデーションライブラリの共通インターフェースの仕様です。
主にzod
やvalibot
, ArkType
の開発者により設計されています。
先日、v1.0.0
が公開となり徐々に対応するツールも多くなっています。
これにより何を実現したいのか
現状、各ツール・フレームワークはそれぞれのスキーマライブラリに対応するためのロジックやアダプター(ex. xxx/zod
,xxx/arktype
,xxx/valibot
..)を作成する必要があります。
これらは実装コストやメンテナンスコストが非常に高くなります。
Standard Schema
に準拠することでスキーマライブライブラリ独自のロジックやアダプターの実装が不要となり、エコシステムツールがユーザー定義の型バリデーターの受け入れを容易にします。
準拠するとどうなるのか
t3-env
を例に準拠前後を比較してみます。
t3-env
はv0.12.0
でStandard Schema
に準拠しており、公式ドキュメントにも以下のような追記がなされています。
準拠前のv0.11.0
と準拠後のv0.12.0
とではvalibot
で指定しているプロパティがエラーにならなくなることがわかります。
このように極端な例ではありますが、例のように複数ライブラリの併用も可能です。
設計目標
この仕様は以下の目標を満たすよう設計されています。
ランタイムバリデーションのサポート
このインターフェースに準拠したバリデータを使うことでデータの検証できます。すべてのエラーは標準化された形式のエラーを出力します。
静的型インターフェースのサポート
TypeScriptライブラリの型推論のために、仕様は推論された型を「公開」する標準的な方法を提供し、外部ツールで抽出して使用できるようにします。
最小限
ライブラリが既存の関数やメソッドを呼び出す数行のコードでこの仕様を実装することが容易であるべきです。
APIコンフリクトを回避
仕様全体は~standard
という単一のオブジェクトプロパティ内に収められており、既存ライブラリのAPIサーフェスとの名前の競合を避けています。
開発者体験(DX)を損なわない。
~standard
プロパティはチルダ(~)プレフィックスを付けることで、オートコンプリートの優先順位を下げています。対照的に、アンダースコアプレフィックスのプロパティは英数字の名前のプロパティやメソッドより前に表示されてしまいます。
準拠済のスキーマライブラリ
2025/01/30時点で 以下のスキーマライブラリはStandard Schema
に対応済みです。
インストールするバージョンには気を付けてください。
*サポートリストに追加してもらう場合は、自身でPRを作れば良いようです。(参考)
ライブラリ | バージョン |
---|---|
Zod | 3.24.0+ |
Valibot | v1.0+ |
ArkType | v2.0+ |
Arri Schema | v0.71.0+ |
TypeMap | v0.8.0+ |
準拠済のツール / フレームワーク
2025/01/30時点で、以下のツール / フレームワークはStandard Schema
に準拠しています。
*サポートリストへの追加手順はスキーマライブラリと同じです。
インテグレーター | 説明 |
---|---|
tRPC | 型安全かつ高速で安全なe2eのAPIを簡単に作成 |
TanStack Form | TS/JS、React、Vue、Angular、Solid、Lit向けのヘッドレスで高性能な型安全なフォーム状態管理 |
TanStack Router | データフェッチング、stale-while-revalidateキャッシング、ファーストクラスの検索パラメータAPIを備えた完全な型安全なReactルーター |
Hono Middleware 🚧 | Web標準に基づいた高速で軽量なサーバー |
Qwik 🚧 | 必要最小限のJavaScriptのみを読み込むことで高速で即時起動が可能なモダンなWebフレームワーク |
UploadThing | モダンなWeb開発者向けのファイルアップロード |
T3 Env | フレームワークに依存しない型安全な環境変数のバリデーション |
OpenAuth | ユニバーサルな標準ベースの認証プロバイダー |
renoun | React用ドキュメンテーションツールキット |
Formwerk | 高品質でアクセシブルなフォームを構築するためのVue.jsフレームワーク |
GQLoom | Standard Schemaを使用してGraphQLスキーマとリゾルバーを織り込む |
Nuxt UI (v3) | VueとTailwind CSSを使用して構築された、モダンなWebアプリのためのUIライブラリ |
oRPC | 型安全なAPIをシンプルに |
Regle | Vue.jsのための型安全なモデルベースのフォームバリデーションライブラリ |
upfetch | 小規模で組み合わせ可能なフェッチ設定ツール。適切なデフォルトと組み込みのスキーマバリデーションを備える |
まとめ
今回はStandard Schema
について紹介しました。
この仕様に準拠することでツール開発者の負担を軽減するだけでなく、使用者としては選択肢が広がるので非常に良い取り組みだなと個人的に感じました。
今後、ツールの採用基準の1つとして見てみようと思います。
Discussion