設定ファイルやデータのシリアライズでよく登場するYAMLとJSON。
「YAMLとJSONって何が違うの?」「どちらを使えばいいの?」「変換はどうするの?」と迷う方も多いでしょう。
本記事では、YAMLとJSONの違い・それぞれのメリット・デメリット・変換方法・使い分けのポイントをわかりやすく解説していきます。
実際のコード例を交えながら説明しますので、ぜひ最後までご覧ください。
YAMLとJSONの基本的な違い
それではまず、YAMLとJSONの基本的な違いについて解説していきます。
YAMLとJSONはどちらもデータを構造化して表現するためのフォーマットですが、書き方・用途・特性に違いがあります。
【同じデータのYAMLとJSON表記の比較】
— YAMLの書き方 —
name: Tanaka
age: 30
skills:
– Python
– JavaScript
— JSONの書き方 —
{“name”: “Tanaka”, “age”: 30, “skills”: [“Python”, “JavaScript”]}
YAMLはインデントで構造を表現し、クォートや括弧が不要なため人間にとって読みやすいという特徴があります。
JSONはすべてのキーと文字列をダブルクォートで囲む厳格な書式で、プログラムで処理しやすいという特徴があります。
主な仕様の違い
| 比較項目 | YAML | JSON |
|---|---|---|
| コメント | 可能(# を使用) | 不可 |
| インデント | 必須(構造を表現) | 任意(整形のみ) |
| データ型 | 豊富(日付・Nullなど) | 限定的(文字列・数値・bool・null・配列・オブジェクト) |
| 記述の冗長性 | 少ない(クォート不要) | 多い(クォート必須) |
| 可読性 | 高い | 中程度 |
| パース速度 | やや遅い | 高速 |
| アンカー・エイリアス | あり(DRY原則) | なし |
コメントが書けることはYAMLの大きなメリットであり、設定ファイルに説明を加えられます。
YAMLのメリットとデメリット
YAMLのメリットは可読性の高さ・コメント記述可能・アンカーによるDRY記述・豊富なデータ型対応です。
デメリットはインデントミスによるバグが起きやすいこと・パーサーによる仕様の差異・JSONより処理がやや遅いことが挙げられます。
JSONのメリットとデメリット
JSONのメリットはほぼすべてのプログラミング言語でネイティブサポートされること・パース速度が速いこと・仕様が厳格でパーサーの差異が少ないことです。
デメリットはコメントが書けないこと・記述が冗長になりやすいこと・YAMLに比べて人間が読みにくいことです。
APIのレスポンスやプログラム間のデータ交換にはJSON、設定ファイルにはYAMLが向いています。
YAMLとJSONの変換方法
続いては、YAMLとJSONを相互に変換する方法を確認していきます。
PythonでのYAML→JSON変換
【PythonでのYAML→JSON変換】
import yaml
import json
with open(‘data.yaml’, ‘r’) as f:
data = yaml.safe_load(f)
json_str = json.dumps(data, ensure_ascii=False, indent=2)
print(json_str)
PyYAMLライブラリを使えばYAMLを読み込んでJSONとして出力できます。
オンラインツールでの変換
「yaml to json online」などで検索すると、ブラウザ上でYAMLとJSONを相互変換できるツールが多数見つかります。
コードを書かずに手軽に変換したい場合はオンラインツールが便利でしょう。
変換時はデータ型の違い(YAML特有の日付型など)に注意する必要があります。
yqコマンドによるCLI変換
コマンドラインで作業する場合は「yq」というツールが便利です。
【yqコマンドでのYAML→JSON変換】
yq -o json input.yaml > output.json
yqはYAMLを処理・変換・フィルタリングできるコマンドラインツールで、CI/CDパイプラインやシェルスクリプトでよく使われます。
YAMLとJSONの使い分けポイント
続いては、YAMLとJSONをどのように使い分けるべきかを確認していきます。
設定ファイルにはYAMLが向いている
DockerCompose・Kubernetes・GitHub Actions・Ansibleなどの設定ファイルにはYAMLが標準で使われます。
コメントで意図や注意点を記述できること・インデントによる構造のわかりやすさが設定ファイルに適しています。
人間が直接書き・読む設定ファイルにはYAMLが最適です。
API・データ交換にはJSONが向いている
REST API・WebAPI・データのシリアライズ・プログラム間通信にはJSONが標準です。
ほぼすべての言語でJSONをネイティブにサポートしており、パース速度・互換性の面で優れています。
フロントエンドとバックエンドのデータ通信・NoSQLデータベースのドキュメント形式にもJSONが広く使われています。
どちらか迷ったときの判断基準
最終的な判断基準として覚えておくと便利なのが次のポイントです。
「人間が書く・読む→YAML」「プログラムが処理する→JSON」という使い分けが大原則です。
既存のツール・フレームワークが指定するフォーマットに従うのが最も確実な選択でもあるでしょう。
まとめ
本記事では、YAMLとJSONの違い・それぞれのメリット・デメリット・変換方法・使い分けのポイントまで詳しく解説しました。
YAMLは可読性・コメント・アンカーが強みで設定ファイルに向き、JSONはプログラム処理の速度・互換性が強みでAPI・データ交換に向いています。
「人間が読み書きする設定にはYAML、プログラム間通信にはJSON」という基本的な使い分けを押さえておくと判断が迷いません。
ぜひ本記事を参考に、用途に応じてYAMLとJSONを使い分けてみてください。