"YAMLは人間にとって読みやすいが、なぜデータ交換の王座はJSONが占めたのか?"
"YAMLはどこが強く、JSONはなぜ勝てたのか?"
🔥 1. データフォーマット戦争の幕開け
昔々、プログラマーたちは データを保存し、やり取りする方法が必要だった。
初期の頃には XMLが王座を占めていた。
<person>
<name>アリス</name>
<age>25</age>
<skills>
<skill>Python</skill>
<skill>Django</skill>
</skills>
</person>
しかし、XMLはあまりにも冗長で重いため、読みづらかった。
そこで登場したのがJSONとYAMLだった。
🤖 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のタブ対スペース
の問題 🤯)
- パース速度が遅い
- JSONは迅速にパース可能だが、
- YAMLは文法が柔軟なので解釈することが多く、速度が遅い。
-
大量のデータを処理する際にJSONより効率的でない。
-
YAMLはセキュリティ問題がある
- YAMLは実行可能なコード(
!python/object
)を含むことができ、 - セキュリティリスク(RCE、リモートコード実行)が存在する。
-
JSONは純粋なデータなので安全!
-
ブラウザでの基本サポートがない
- JSONはJavaScriptの基本オブジェクト構造だが、
- 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はパース速度とセキュリティ問題のため広く使われていないからだ。
🎯 6. 結論: JSON vs YAML, どちらが優れているか?
✅ JSONを選ぶべき時:
- ウェブAPI、データ交換(速度 & 安定性が重要!)
- NoSQLデータ保存
- ブラウザで直接使用する場合
✅ YAMLを選ぶべき時:
- 設定ファイル(Kubernetes、Docker、CI/CD)
- 人が読みやすい文書作成
- DevOps関連作業
一行の要約:
🚀 "JSONはデータ交換の王、YAMLは設定ファイルの王!"
Add a New Comment