YAML Schemaで必須フィールドを定義する

JSONから生成されるYAML Schema定義で必須フィールドを指定する方法を学びます。requiredキーワード、オプション vs 必須フィールド、条件付き要件、検証動作を解説します。

Validation Rules

詳細な説明

YAML Schemaの必須フィールド

YAML Schemaのrequiredキーワードは、有効なドキュメントに存在しなければならないプロパティ名を列挙します。JSONからの変換時、コンバーターは通常すべての存在するフィールドを必須としてマークし、その後実際の要件に基づいて調整します。

JSON入力の例

{
  "name": "web-api",
  "version": "2.0.0",
  "port": 3000,
  "host": "0.0.0.0",
  "debug": false,
  "logLevel": "info"
}

生成されるYAML Schema

type: object
properties:
  name:
    type: string
  version:
    type: string
  port:
    type: integer
  host:
    type: string
  debug:
    type: boolean
  logLevel:
    type: string
required:
  - name
  - version
  - port
additionalProperties: false

必須 vs オプションフィールド

生成後に、どのフィールドが本当に必須かを判断します:

フィールド 必須? 理由
name はい サービスを識別する
version はい 互換性に必要
port はい ポートなしではサービスが起動できない
host いいえ デフォルトは0.0.0.0
debug いいえ デフォルトはfalse
logLevel いいえ デフォルトはinfo

additionalProperties

リストにないキーが許可されるかを制御します:

type: object
properties:
  name:
    type: string
additionalProperties: false    # propertiesにないキーを拒否
additionalProperties:
  type: string                  # 追加キーを許可するが、値はstringでなければならない

条件付き要件

特定の条件下でのみ必須となるフィールドにはif/thenを使用します:

properties:
  database:
    type: string
    enum: [postgres, mysql, sqlite]
  connectionString:
    type: string
  filePath:
    type: string
if:
  properties:
    database:
      const: sqlite
then:
  required:
    - filePath
else:
  required:
    - connectionString

ネストされた必須フィールド

各ネストされたオブジェクトには独自のrequired配列があります:

properties:
  server:
    type: object
    properties:
      host:
        type: string
      port:
        type: integer
    required:
      - port
required:
  - server

ここでは、serverオブジェクト自体が必須であり、その中のportは必須ですがhostはオプションです。

検証動作

必須フィールドが欠落している場合、バリデーターはフィールドパスを指定するエラーを返します:

Error: Required property 'port' is missing at path '/server'

この正確なエラー報告により、設定の問題を簡単に特定して修正できます。

ユースケース

チーム環境では、明確に定義された必須フィールドを持つYAMLスキーマは、どの設定値が必須でどれがオプションかの生きたドキュメントとして機能します。これにより、重要な設定の欠落によるデプロイ失敗を防ぎ、スキーマを読んで最小限の有効な設定を理解できるため、新しい開発者のオンボーディング時間を短縮します。

試してみる — JSON to YAML Schema

フルツールを開く