YAMLとJSONの違いと相互変換方法
YAMLとJSONは、設定ファイルやデータ交換で広く使われるデータ形式です。Docker Compose、Kubernetes、GitHub ActionsなどではYAMLが標準的に使われる一方、Web APIのレスポンスにはJSONが主流です。この記事では、両者の違いと使い分け、そして相互変換の方法を解説します。
YAMLとJSONの基本
JSON(JavaScript Object Notation)は、JavaScriptのオブジェクト構文をベースにしたデータ形式です。波括弧({} )とダブルクォートを使い、厳密な構文を持ちます。
YAML(YAML Ain't Markup Language)は、インデントベースの人間が読みやすいデータ形式です。コメントが書ける、クォートが不要など、設定ファイルに適した特徴があります。
構文の違いを比較
同じデータをJSON・YAMLそれぞれで表現した例です:
JSON形式
{
"name": "my-app",
"version": "1.0.0",
"dependencies": {
"express": "^4.18.0",
"lodash": "^4.17.0"
},
"scripts": ["build", "test", "deploy"]
}YAML形式
# アプリケーション設定 name: my-app version: "1.0.0" dependencies: express: "^4.18.0" lodash: "^4.17.0" scripts: - build - test - deploy
主な違いの比較表
| 特徴 | JSON | YAML |
|---|---|---|
| 可読性 | 普通 | 高い(インデントベース) |
| コメント | 不可 | 可能(#記号) |
| データ型 | 文字列・数値・真偽値・null・配列・オブジェクト | JSON全型 + 日付・タイムスタンプ |
| ファイルサイズ | やや大きい(括弧・クォート) | コンパクト |
| 主な用途 | API通信・Webアプリ | 設定ファイル・CI/CD |
| パース速度 | 高速 | やや遅い |
どちらを使うべきか
JSONが適している場面:APIレスポンス、ブラウザとの通信、データベース保存、パフォーマンスが重要な場面
YAMLが適している場面:Docker Compose、Kubernetes manifests、GitHub Actions、Ansible playbooks、人間が編集する設定ファイル全般
YAMLの注意点
- インデント:タブは使えず、半角スペースのみ対応(通常2スペース)
- 文字列の暗黙変換:
yes/noが真偽値に解釈される場合がある - 複数行文字列:
|(改行保持)と>(折りたたみ)の違い
よくある質問
YAMLはJSONのスーパーセットですか?
YAML 1.2以降、有効なJSONはすべて有効なYAMLとして解釈できます。ただし実際のパーサーによっては完全な互換性がない場合もあります。
YAMLのインデントはスペース何個が標準ですか?
2スペースが最も一般的です。4スペースも使われますが、Kubernetes やDocker Composeの公式ドキュメントは2スペースを採用しています。
TOML(Tom's Obvious Minimal Language)との違いは?
TOMLはINIファイルに近いフラットな構文で、Rust(Cargo.toml)やPython(pyproject.toml)の設定で使われます。深いネストにはYAMLのほうが適しています。