ネストされたJSONオブジェクトをYAML Schemaに変換する
ネストされたJSON構造のYAML Schema定義を生成する方法を学びます。再帰的なプロパティマッピング、サブオブジェクトスキーマ、深いネスト戦略、スキーマ構成を解説します。
Basic Schemas
詳細な説明
ネストされたJSONからYAML Schemaへ
実際のJSONにはほぼ必ずネストされたオブジェクトが含まれます。YAMLスキーマは各ネスト構造を独自のtype: objectと独自のpropertiesブロックとして定義する必要があります。
JSON入力の例
{
"server": {
"host": "0.0.0.0",
"port": 3000,
"tls": {
"enabled": true,
"certPath": "/etc/ssl/cert.pem",
"keyPath": "/etc/ssl/key.pem"
}
},
"logging": {
"level": "info",
"format": "json"
}
}
生成されるYAML Schema
type: object
properties:
server:
type: object
properties:
host:
type: string
port:
type: integer
tls:
type: object
properties:
enabled:
type: boolean
certPath:
type: string
keyPath:
type: string
required:
- enabled
required:
- host
- port
logging:
type: object
properties:
level:
type: string
format:
type: string
required:
- level
- format
required:
- server
- logging
YAML Schemaでのネストの仕組み
各ネストされたJSONオブジェクトはスキーマツリーに新しいtype: objectノードを導入します。コンバーターはJSONを再帰的に走査し、遭遇するすべてのキーに対してプロパティ定義を作成します。各レベルのrequired配列は存在しなければならないキーを列挙します。
深いネスト戦略
深くネストされた設定(4レベル以上)の場合:
$ref定義を使用 -- 再利用可能なサブスキーマをdefinitionsブロックに抽出し、$ref: "#/definitions/TlsConfig"で参照します。- 可能な限りフラット化 -- ネストが組織的な目的のみの場合、ドット表記キーによるフラットな構造を検討します。
additionalProperties: falseを追加 -- 予期しないキーが検証を通過するのを防ぎます。
$refによるスキーマ構成
definitions:
TlsConfig:
type: object
properties:
enabled:
type: boolean
certPath:
type: string
keyPath:
type: string
required:
- enabled
type: object
properties:
server:
type: object
properties:
tls:
$ref: "#/definitions/TlsConfig"
このアプローチはスキーマをDRYに保ち、個々のセクションを独立してテスト可能にします。
ユースケース
Webサーバー、データベース、クラウドサービスのアプリケーション設定ファイルは通常、複数レベルのネスト(サーバー設定、TLSオプション、ログ、キャッシュ)を持ちます。サンプル設定からネストされたYAMLスキーマを生成することで、すべてのチームメンバーの設定ファイルが完全に同じ構造に従うことが保証されます。