JSON Schema:基礎から本番まで
キーワードは多くありますが、日常的に使うのは十数個だけです。type/properties/required/$ref を正しく押さえ、エラーメッセージを適切に扱えば、実務の八割をカバーできます。
JSON Schema でデータの形を記述し、口頭の合意を実行可能な検証に変え、さらに TypeScript の型やフォーム生成まで駆動させます。
7 件の記事キーワードは多くありますが、日常的に使うのは十数個だけです。type/properties/required/$ref を正しく押さえ、エラーメッセージを適切に扱えば、実務の八割をカバーできます。
型とスキーマはそれぞれ一つの区間を担当します。一方はコンパイル時、もう一方は実行時です。問いはどちらを選ぶかではなく、二つをどう自動で同期させるかです。
生成したスキーマは正しいデータをしばしば妨げます。サンプルが豊かになるほどスキーマが悪くなる理由と、複数レコードのサンプリング、意味論の補完、エラー位置の特定という手順を学びます。
$ref は再利用を、allOf と oneOf は合成を解決し、両者を重ねたところで問題が起きます。$id、$defs、条件、再帰、バンドル、デバッグを扱います。
バリデータは機械的なエラーを出し、ユーザーはどの入力欄が間違っているかを知りたいのです。Ajv の errors 配列、instancePath と schemaPath、グルーピングと文言を扱います。
検証を通過してもデータが clean とは限りません。Pydantic は未知フィールドを無視し、Zod は剥離し、Ajv は素通し—— hallucination された引数やタイプミスのキーが静かに通り抜けます。本稿は沈黙の受入れの3形態を示し、オブジェクトを閉じ、強制変換を制御し、ネスト全層で締める完全なレシピを提供します。
schema は書いて終わりではなく、そこから壊れ始めます。typo 一つでバリデーションが静かに緩み、リファクタリング一つで fixture が全滅します。本記事では正例・負例・スナップショットの三点セット、schema 自体の lint、コンパイル once の再利用、そして CI に据える四つのゲートという実践的な契約テスト構成を解説します。