JSON と YAML の使い分け
JSON と YAML はどちらもデータ記述言語ですが、設定ファイル・API レスポンス・機械可読性など用途で向き不向きが明確です。決定表と実例で解説。
公開 · 更新 · yuzlrin
代表的な使い分け
JSON は以下で選ばれます:
・Web API のレスポンス(REST / GraphQL)
・JavaScript/TypeScript からの読み書き(JSON.parse/stringify 標準)
・ブラウザ ↔ サーバー間でのデータ交換(JSONを使う場合は形式を明示)
・スキーマ自動生成が必要なデータ(JSON Schema 対応ツール多数)
YAML は以下で選ばれます:
・CI/CD 設定(GitHub Actions、GitLab CI、CircleCI)
・Kubernetes マニフェスト / Helm Chart
・Ansible / Salt など IaC ツールの playbook
・Docker Compose、Prometheus 設定など DevOps 系
なぜ YAML は DevOps で多い?
YAML は空行・コメント・複数行文字列をそのまま書けるので、人間が長い設定ファイルを読み書きするのに向きます。一方 JSON はコメント非対応、末尾カンマ禁止など制約が多く、手書き設定ではしんどい。
ただし YAML はインデントや型解決の設定に注意が必要です。例えば 'no' を真偽値として解決するYAML 1.1系と、文字列として扱うYAML 1.2のcore schemaでは挙動が異なります。正確性はJSON/YAMLという形式だけでは決まらず、パーサー・スキーマ・生成器と利用先に依存します。
相互変換するときの注意
YAML 1.2.2はJSONとの互換性を定めていますが、実際の変換はパーサー/バージョンに依存します。重複キーの扱い、タグ・型解決、数値表現、Unicode、実装の最大深さ(このサイトの変換器は200階層まで)などで意味が変わったり失敗したりする場合があります。大きな数値や重複キーを含むデータは特に、変換後の構造・値を比較してください。
Kubernetes等の利用先も、受け付ける形式とスキーマを確認してから選んでください。
関連ツール
よくある質問
JSON にコメントは書けない?
標準 JSON(RFC 8259)はコメント非対応です。設定ファイルで必要なら JSONC(JSON with Comments、VSCode が採用)や JSON5 のような拡張形式を使うか、YAML / TOML に切り替えます。
YAML の 'no' 問題とは?
YAML 1.1系の一部実装は 'yes', 'no', 'on', 'off' を真偽値として扱います。YAML 1.2 Core Schemaではtrue/false表記が異なりますが、実際の解釈は利用するパーサーとスキーマを確認してください。
JSON5 や HJSON って何?
JSON の拡張で、コメント、末尾カンマ、単一引用符などを許容する人間向け variant。設定ファイル用途に向きますが、機械連携には素の JSON に戻すのが無難です。
出典・参考資料
本文は上記資料を参考にした解説です。仕様やサービスの運用は変更されることがあるため、実際の利用時は公式資料も確認してください。