YAML vs JSON: どちらのconfigフォーマットか?
YAMLはコメントとanchorをサポートする人間に優しい設定フォーマット、JSONはコメントのない厳格で普及したデータ交換フォーマットです。
YAMLはインデントを使い、コメント、anchor、複数行文字列をサポートするため、設定(CIのworkflow、Kubernetes、Compose)で人気です。JSONはより厳格でコメントがなく、APIやマシン間交換の共通語です。YAMLは人間による記述を、JSONは曖昧さのないマシンパースを重視します。なおYAMLはJSONのスーパーセットなので、JSONは有効なYAMLです。
| YAML | JSON | |
|---|---|---|
| 可読性 | 高い(インデント) | 中程度(波括弧) |
| コメント | あり | なし |
| 再利用 | anchor / alias | なし |
| 厳格さ | 緩い、落とし穴あり | 厳格、予測可能 |
| 最適な用途 | config、CIのworkflow | API、データ交換 |
ユースケースと落とし穴
YAMLは、コメントと構造が可読性を助ける手編集の設定に適しますが、落とし穴に注意が必要です。意味を持つ空白、ノルウェー問題(noがfalseとしてパースされる)、タブのエラーなどです。JSONは、厳格さと普遍的なパースが重要となるAPIペイロードや生成データに適します。多くのツールは両方を受け付けます。
CIでは
YAMLをlint(yamllint)し、schemaに対して検証してインデントと型の落とし穴を早期に検出します。JSONはJSON Schemaに対して検証します。どちらもmanaged runner上で動作し、より高速なrunnerはlintとschema検証のステップを短縮します。
結論
コメントと再利用を伴う人間が記述する設定: YAML。ただし空白と型の落とし穴に注意します。厳格で曖昧さのないパースを必要とするマシン間交換とAPIペイロード: JSON。設定はYAML寄り、データ交換はJSON寄りです。
関連ガイド
TOML vs YAML: Which Config Format?TOML vs YAML: an explicit, minimal-footgun config format vs a flexible, deeply nestable one. Readability, str…
JSON vs XML: Which Data Format?JSON vs XML: a lightweight, ubiquitous data format vs a verbose, feature-rich markup format with schemas and…
Protobuf vs JSON: Binary or Human-Readable?Protocol Buffers vs JSON: compact, schema-driven binary serialization vs ubiquitous human-readable text. Size…