"YAMLは人間にとって読みやすいが、なぜデータ交換の王座はJSONが占めたのか?"
"YAMLはどこが強く、JSONはなぜ勝てたのか?"


🔥 1. データフォーマット戦争の幕開け

昔々、プログラマーたちは データを保存し、やり取りする方法が必要だった。
初期の頃には XMLが王座を占めていた。

<person>
    <name>アリス</name>
    <age>25</age>
    <skills>
        <skill>Python</skill>
        <skill>Django</skill>
    </skills>
</person>

しかし、XMLはあまりにも冗長で重いため、読みづらかった。
そこで登場したのがJSONYAMLだった。


🤖 2. JSON: データ交換の王座を占める

2001年、ダグラス・クロックフォード(Douglas Crockford)はJavaScriptのオブジェクト表現に着想を得たJSONを発表した。
"シンプルで軽量、機械が理解しやすいデータ交換フォーマット!"

JSONの目標は明確だった:
人が読んでも良いが、コンピューターがよりよく読み取れる構造
ブラウザとサーバー間のデータ送信に最適化
オブジェクト指向言語(JavaScript、Pythonなど)と自然に連携可能

JSONの例:

{
    "name": "アリス",
    "age": 25,
    "skills": ["Python", "Django"]
}
  • {}[]だけでデータ構造を表現でき、
  • ウェブではJavaScriptがJSONを直接処理できたため、あっという間に普及した。
  • 特に、REST APIでデータフォーマットの標準となり、JSONは王座を占めることになった。

🧐 3. YAML: 人が理解しやすいデータフォーマット

しかし、JSONより人が見やすいフォーマットを望む人々もいた。
"データ構造を表現する際に、不必要な中かっこや引用符無しで書ければもっと良いのでは?"

そこで2001年、YAML(Ain’t Markup Language)が登場した。

name: アリス
age: 25
skills:
  - Python
  - Django

YAMLの特徴:
人が読みやすい (中かっこや引用符なしでスッキリ!)
コメントをサポートする#を使用可能)
設定ファイルで使いやすい

このためYAMLは設定ファイルの強者としての地位を確立した
Kubernetes、Docker、Ansible、CI/CD、GitHub ActionsなどではYAMLが基本フォーマットとして使用されている!

しかしデータ交換市場ではYAMLはJSONに勝てなかった。
なぜだろう? 🤔


🤯 4. YAMLはなぜJSONに勝てなかったのか?

YAMLが人に読みやすいのであれば、JSONよりもっと普及していた可能性があるのに…
しかし現実はそうではなかった。

✅ JSONが勝利した理由:
1. 文法があまりにも自由すぎる?
- JSONは{}[]で構造が明確だが,
- YAMLはインデントで構造を表現するためミスをしやすい
- スペース一つ間違えただけでエラーが発生する! (特にYAMLのタブ対スペースの問題 🤯)

  1. パース速度が遅い
  2. JSONは迅速にパース可能だが、
  3. YAMLは文法が柔軟なので解釈することが多く、速度が遅い
  4. 大量のデータを処理する際にJSONより効率的でない。

  5. YAMLはセキュリティ問題がある

  6. YAMLは実行可能なコード(!python/object)を含むことができ、
  7. セキュリティリスク(RCE、リモートコード実行)が存在する。
  8. JSONは純粋なデータなので安全!

  9. ブラウザでの基本サポートがない

  10. JSONはJavaScriptの基本オブジェクト構造だが、
  11. YAMLは別途ライブラリを使用する必要がある。

結局、ウェブとデータ交換の標準としてJSONが選ばれたのだ。


🚀 5. しかしYAMLは設定ファイルの王座を占めた!

だからといってYAMLが消えたわけではない。
JSONがデータ交換の標準となったなら、YAMLは設定ファイルの標準となったのだ。

🔥 YAMLが強力な理由:

  • コメントサポート可能 (#) → 設定ファイル作成時に便利
  • 人が見やすく、修正が簡単
  • Kubernetes、Docker、AnsibleなどDevOpsの中核フォーマットとして使用

実際の使用例:

  • docker-compose.yml
  • kubernetes.yml
  • github-actions.yml
  • ansible-playbook.yml

しかしYAMLをデータ交換に使うには注意点が多い。
特にDjango Rest Framework(DRF)でもシリアル化方式をYAMLRendererに設定できるが、
デフォルトは依然としてJSONRendererだ。

from rest_framework.renderers import JSONRenderer, YAMLRenderer
from rest_framework.response import Response
from rest_framework.views import APIView

class ExampleView(APIView):
    renderer_classes = [JSONRenderer, YAMLRenderer]

    def get(self, request):
        data = {"message": "こんにちは、YAML!"}
        return Response(data)

しかしほとんどのAPIはJSONが基本!
なぜならYAMLはパース速度とセキュリティ問題のため広く使われていないからだ。

JSON vs YAML Medieval Battle


🎯 6. 結論: JSON vs YAML, どちらが優れているか?

✅ JSONを選ぶべき時:
- ウェブAPI、データ交換(速度 & 安定性が重要!)
- NoSQLデータ保存
- ブラウザで直接使用する場合

✅ YAMLを選ぶべき時:
- 設定ファイル(Kubernetes、Docker、CI/CD)
- 人が読みやすい文書作成
- DevOps関連作業

一行の要約:
🚀 "JSONはデータ交換の王、YAMLは設定ファイルの王!"