allOf — 全てのスキーマに同時に一致
JSON Schemaの allOf キーワードで、複数のスキーマの全てに同時に一致するバリデーションを定義する方法を解説します。
Composition
JSON Schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"allOf": [
{
"properties": {
"id": { "type": "integer", "minimum": 1 },
"createdAt": { "type": "string", "format": "date-time" },
"updatedAt": { "type": "string", "format": "date-time" }
},
"required": ["id", "createdAt", "updatedAt"]
},
{
"properties": {
"title": { "type": "string", "minLength": 1, "maxLength": 200 },
"content": { "type": "string", "maxLength": 50000 },
"status": { "type": "string", "enum": ["draft", "published", "archived"] }
},
"required": ["title", "status"]
}
]
}Test Data
{
"id": 42,
"createdAt": "2025-01-15T10:30:00Z",
"updatedAt": "2025-01-20T14:00:00Z",
"title": "Getting Started with JSON Schema",
"content": "JSON Schema is a powerful tool for validating JSON data...",
"status": "published"
}詳細な説明
JSON Schemaの allOf キーワードは、指定した全てのスキーマに値が同時に一致する必要がある論理AND条件を定義します。スキーマの合成(コンポジション)やミックスインの実現に使用されます。
基本構文:
{
"allOf": [
{
"type": "object",
"required": ["name"],
"properties": { "name": { "type": "string" } }
},
{
"type": "object",
"required": ["age"],
"properties": { "age": { "type": "integer" } }
}
]
}
このスキーマは name(文字列)と age(整数)の両方を持つオブジェクトを要求します。
主な用途:
- スキーマの継承: ベーススキーマに追加フィールドを拡張
- ミックスイン: 複数のスキーマ断片を1つに合成
$refとの組み合わせ: 共通スキーマを参照しつつ追加制約を適用
allOf 内の各スキーマが矛盾する制約を持つ場合(例: 一方が maxLength: 5、他方が minLength: 10)、どの値も検証に成功しないスキーマになるため注意が必要です。
ユースケース
基本エンティティの拡張、共通フィールドのミックスイン、APIバージョン間のスキーマ合成などで使用します。