Guide 27 Mar 2026 12 分で読めます

JSONスキーマバリデーション:JSONデータの定義と検証の完全ガイド

JSONスキーマがデータの契約としてどのように機能するかを学びましょう -- 基本型と必須フィールドからフォーマット検証、ドラフトバージョン、APIや設定ファイルの実用的なユースケースまで。

JSON Schema Validation Guide

JSONスキーマとは?

JSONスキーマは、JSONドキュメントの構造、内容、制約を記述できる宣言型言語です。データの生産者と消費者の間の契約として考えてください。生産者は「常にnameという文字列とageという整数を持つオブジェクトを送信します」と宣言し、消費者は処理する前に、受信したすべてのペイロードが実際にその約束に適合しているかを検証できます。

これが重要なのは、JSON自体にはスキーマがないからです。文字列、数値、ランダムなキーを持つ深くネストされたオブジェクトなど、あらゆる有効なJSON値は完全に合法です。この自由はラピッドプロトタイピングには素晴らしいですが、2つのシステムがデータの形状について合意する必要がある瞬間に負債となります。

なぜJSONスキーマがAPIにとって重要なのか

REST APIはJSONペイロードを通じて通信し、各エンドポイントには暗黙の形状があります。JSONスキーマはその形状を明示的で機械可読にします。スキーマがあれば:

  • リクエストを検証 -- ビジネスロジックに到達する前にサーバー側で、不明瞭な500エラーの代わりに明確な400エラーを返します。
  • レスポンスを検証 -- 統合テストで、本番環境に到達する前に破壊的変更を検出します。
  • ドキュメントを自動生成 -- Swagger/OpenAPIなどのツールはJSONスキーマを型定義の基盤として使用します。
  • コードを生成 -- スキーマからTypeScript、GoのStruct、PythonのDataclassへの変換ツールが手動の型定義を排除します。
重要な洞察: JSONスキーマは単なるバリデーションツールではありません。ドキュメント生成、コード生成、テスト、ランタイムチェックを駆動する唯一の信頼できる情報源です -- すべて1つのファイルから。

JSONスキーマの基本

すべてのJSONスキーマ自体がJSONオブジェクトです。最も単純なスキーマは空のオブジェクト{}で、あらゆる有効なJSONを受け入れます。

プリミティブ型

typeキーワードが基盤です。JSONスキーマは6つのプリミティブ型を認識します:

JSONの例 備考
string"こんにちは"テキスト値。minLength、maxLength、patternで制約可能。
number3.14小数を含む任意の数値。minimum、maximum、multipleOfを使用。
integer42整数のみ。numberと同じ制約。
booleantruetrueまたはfalseのみ。
object{"キー": "値"}キーと値のペア。properties、required、additionalPropertiesで定義。
array[1, 2, 3]順序付きリスト。items、minItems、maxItems、uniqueItemsを使用。
nullnull値の不在。他の型と組み合わせることが多い。

プロパティと必須フィールド

propertiesキーワードはどのキーが期待されるかを定義します。requiredキーワードはそのうちどれが必須かをリストします。

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "name": { "type": "string", "minLength": 1 },
    "email": { "type": "string", "format": "email" },
    "age": { "type": "integer", "minimum": 0 }
  },
  "required": ["name", "email"]
}

追加プロパティの制御

"additionalProperties": falseはスキーマを厳格にします -- リストされたキーのみが許可されます。

注意: additionalProperties: falseallOfなどの合成キーワードと一緒に使用すると、他のサブスキーマで定義されたプロパティが拒否される可能性があります。これはJSONスキーマで最も一般的な落とし穴の一つです。

フォーマット検証

formatキーワードは基本型を超えたセマンティック検証を提供します。

組み込みフォーマット

フォーマット 値の例 ユースケース
date-time2026-03-27T10:30:00Zイベントやログ用のISO 8601タイムスタンプ
date2026-03-27時間なしのカレンダー日付
email[email protected]問い合わせフォーム、ユーザー登録
urihttps://example.com/apiWebhookのURL、リソースリンク
uuid550e8400-e29b-41d4-a716-446655440000一意識別子、主キー
ipv4192.168.1.1ネットワーク設定、サーバーアドレス

アノテーションとしてのフォーマット vs アサーション

デフォルトでは、formatはアサーションではなくアノテーションです。Draft 2020-12では、フォーマットアサーションを明示的に有効にする必要があります。

実践的なヒント: 厳格な検証が重要な場合は、formatpattern正規表現を常に組み合わせてください。

ドラフトバージョン:Draft-07 vs 2020-12

最も頻繁に遭遇する2つのバージョンはDraft-07Draft 2020-12です。

主な違い

機能 Draft-07 Draft 2020-12
prefixItems利用不可タプル検証を置き換え
$dynamicRef利用不可新機能 -- 動的スキーマ参照
unevaluatedProperties利用不可additionalProperties + allOfの問題を解決
ライブラリサポート優秀良好で成長中

どのバージョンを選ぶべきか?

Draft-07を選択 -- エコシステムが既に使用している場合、または最大限の互換性が必要な場合。

Draft 2020-12を選択 -- レガシー制約のない新しいプロジェクトを開始する場合。

結論

2026年のほとんどの新規プロジェクトでは、Draft 2020-12がより良いデフォルト選択です。

JSONスキーマジェネレーターの使い方

無料のJSONスキーマジェネレーターは、任意のJSONペイロードを受け取り、自動的に有効なスキーマを生成します。すべてブラウザ内で動作します。

ステップバイステップガイド

  1. JSONスキーマジェネレーターツールを開きます
  2. 入力エリアにJSONを貼り付けます
  3. 生成をクリックすると、ツールが各フィールドを分析し、型を推論し、フォーマットを検出します。
  4. 出力を確認 -- 生成されたスキーマが出力パネルに表示されます。
  5. 検証タブに切り替えて、新しいJSONペイロードに対してスキーマをテストします。
  6. ワンクリックでスキーマをコピーし、プロジェクトに統合します。
プライバシーに関する注意

JSONスキーマジェネレーターは100%ブラウザ内で動作します。JSONデータ、生成されたスキーマ、検証結果がデバイスから外部に送信されることは一切ありません。

JSONスキーマを即座に生成

任意のJSONペイロードを貼り付けて、型推論、必須フィールド、フォーマット検出を備えたすぐに使えるスキーマを取得 -- 100%ブラウザ内で処理。