UGA Boxxx

つぶやきの延長のつもりで、知ったこと思ったこと書いてます

【Zod】TypeScript First なバリデーションライブラリ

TypeScript First なバリデーションライブラリのZodというのを知ったので調べた

github.com

Zodは「スキーマ」を定義しそれに基づいてバリデーションを行うライブラリ

特徴

  • 依存関係ゼロ
  • Node.jsとすべての最新のブラウザで動作する
  • サイズが8kbでミニマイズして圧縮している
  • イミュータブル
  • 簡潔で連鎖可能なインターフェース
  • 「Parse, don’t validate」への機能的アプローチ
  • プレーンなJavaScriptでも動作する

Parse, don’t validateとは

「Parse, don’t validate」 とは以下のAlexis King氏のブログで紹介されたアプローチで、構造化されていないデータを構造化する(parse

validateは値が正しいかを検証するにとどまるため、外部のデータはちゃんとparseをしようというもの

lexi-lambda.github.io

このときparseできない場合は例外をthrowする

zodもこれを機能として提供する

サンプル

基本的な使い方は以下

import { z } from "zod";

const User = z.object({
  username: z.string(),
});

User.parse({ username: "Ludwig" });

// extract the inferred type
type User = z.infer<typeof User>;
// { username: string }

他にも機能が充実していて、かなり良さそう

他参考

https://zenn.dev/uttk/articles/bd264fa884e026

https://zenn.dev/takepepe/articles/nextjs-service-layer

https://qiita.com/kjkj_ongr/items/0eff5173b6e4fce7fbe8