JSONからYAML SchemaのBoolean型とNull型を定義する

JSONのbooleanとnull値がYAML Schema型定義にどのようにマッピングされるかを学びます。booleanのデフォルト、nullable型、混合型のoneOf、YAML固有のtruthy/falsy落とし穴を解説します。

Type Mapping

詳細な説明

Boolean型とNull型のマッピング

JSONのtrue/false値はYAML Schemaでtype: booleanにマッピングされます。JSONのnullはnullable型を導入し、スキーマ定義で特別な処理が必要です。

Booleanプロパティ

{
  "debug": true,
  "enableCache": false,
  "verbose": true
}
type: object
properties:
  debug:
    type: boolean
    default: false
  enableCache:
    type: boolean
    default: true
  verbose:
    type: boolean
    default: false

Nullableプロパティ

JSONフィールドがnullの場合、スキーマは期待される型とともにnull型を許可する必要があります:

{
  "name": "Alice",
  "nickname": null,
  "age": 30,
  "bio": null
}
type: object
properties:
  name:
    type: string
  nickname:
    type:
      - string
      - "null"
  age:
    type: integer
  bio:
    type:
      - string
      - "null"

Draft 2020-12のNullable構文

JSON Schema draft 2020-12ではnullable型は配列構文を使用します:

nickname:
  type: [string, "null"]

以前のドラフトではoneOfを使用します:

nickname:
  oneOf:
    - type: string
    - type: "null"

YAMLのBoolean落とし穴

YAMLパーサーはいくつかの値をbooleanとして解釈します:yesnoonofftruefalse。YAMLスキーマ定義では、パーサーが特殊な値として解釈するのを防ぐため、常に"null"を引用符で囲んでください:

# 正しい
type: [string, "null"]

# 危険 -- YAMLがnullを空として解析する可能性
type: [string, null]

説明付きBoolean

booleanフィールドに説明を追加するとスキーマの使いやすさが向上します:

debug:
  type: boolean
  default: false
  description: >
    デバッグモードを有効にします。trueの場合、アプリケーションは
    詳細なリクエスト/レスポンスボディとスタックトレースをログに記録します。

Booleanと条件ロジックの組み合わせ

properties:
  tls:
    type: boolean
  certPath:
    type: string
if:
  properties:
    tls:
      const: true
then:
  required:
    - certPath

このスキーマはtlstrueの場合のみcertPathを必須にし、booleanフラグに基づく条件付き検証を可能にします。

ユースケース

フィーチャーフラグ、デバッグトグル、オプションの設定フィールドはbooleanとnullable値を頻繁に使用します。booleanのデフォルトとnullable型を正しく処理するYAMLスキーマは、'yes'/'no'文字列が誤ってbooleanとして解釈されるというYAMLの一般的な落とし穴を防ぎます。これは設定バグの頻繁な原因です。

試してみる — JSON to YAML Schema

フルツールを開く