[11] [DFN[[RUBY[[[YAML]]][ヤムル]]]] は、[[データ記述言語]]の一種です。

* 代替

[16] 互換性のためにやむを得ない場合を除き、 [[JSON]] を使うべきです。

* 特徴

[30] [[YAML]] はシンプルでわかりやすい、書きやすいといわれています。 (ここ笑うとこ?)

* 構文

[12] 一見わかりそうで実はよくわからない謎の構文を持っています。

[36] 
[[YAMLストリーム]]

* MIME 型

[5] [CODE(MIME)@en[[[text/x-yaml]]]],
[CODE(MIME)@en[[[text/yaml]]]],
[CODE(MIME)@en[[[application/yaml]]]],
[CODE(MIME)@en[[[application/x-yaml]]]]
が使われています。

[7] [CODE(MIME)@en[[[application/raml+yaml]]]] のように[[構造化構文接尾辞]] [CODE(MIME)@en[[[+yaml]]]]
も使われています。

[37] 
[CITE@en[Registered MIME type? · Issue #49 · yaml/yaml-spec · GitHub]], [TIME[2024-03-06T03:53:28.000Z]] <https://github.com/yaml/yaml-spec/issues/49>

* 文脈

[14] [[Ruby]] でよく使われます。かつては [[Perl]] でもよく使われていましたが、
[[Perl]] が衰退したためか余り見かけなくなりました。
[[クラウド]]系 [[Webサービス]]の設定ファイルとして使われることがしばしばあります
([[JSON]] の方が一般的ですが、 [[YAML]] しか選択できないこともよくあります)。
かつては [[Web API]] の入出力形式としても用いられることがありましたが、
現在では [[JSON]] に置き換わっています。

[FIG(short list)[ [25] [[YAML]] の[[応用]]
- [CODE[.travis.yml]]
- [CODE[circle.yml]]
- [[kramdown-rfc2629]]
- [[RAML]]
- [CODE[.drone.yml]]


]FIG]

* なぜなくならないのか

[13] [[JSON]] が普及した現在、完全に置き換えられていても良さそうなものですが、
謎の支持層により一部で未だに根強く使われ続けています。

[22] 
[[JSON]] は[[プログラミング言語]]に寄りすぎていて、
しかも[[コメント]]が無いなど[[機械処理]]寄りで、
[[設定ファイル]]の[[手書き]]には使いにくいという問題があります。

[23] 
[[JSON]] と同じ[[データモデル]]で[[手書き]]に適したわかりやすい単純な構文があって普及すれば良いのですが...
そういう目論見の [[JSON]] の派生構文のようなものはいくつかありますが ([[JSON]] 参照)、
普及させるところがネックのようです。

* YAML は JSON (笑)

[4] [[JSON]] は [[YAML]] の[[部分集合]]であると [[YAML]] 信者は主張していますが、実際には異なります。

;; [CITE[JSON::XS - search.cpan.org]] ([TIME[2011-04-15 12:50:01 +09:00]] 版) <http://search.cpan.org/dist/JSON-XS/XS.pm#JSON_and_YAML>

[31] ただ、そのおかげで [[YAML]] が求められているところで [[JSON]]
を与えてもだいたい動きます。 [[YAML]] につらみを感じるときは、
[[JSON]] で書けばいいのです。

;; [32] ただし [[YAML]] の構文が [[JSON]] のどの構造に対応しているのかを覚える必要が出てきてしまいますが...
(これが意外と難しい。)

* 関連

[35] 
[[ICL]]

* 歴史

[15] [[データ構造]]の記述に [[XML]] が使われ始めた00年代初頭に、 [[XML]]
は複雑過ぎるとして対抗馬として開発されたようです。

;; [24] 個人的には [[XML]] の方がずっと単純に見えますが...



[1]
[CITE[Matzにっき(2003-05-08)]] <http://www.rubyist.net/~matz/?date=20030508#p04>

[2]
[CITE[ただ、風のために。5 (2003/May)]] <http://www.rubycolor.org/maki/d/200305b.html#11>

[6] [CITE[YAML::XS - search.cpan.org]]
( ([TIME[2012-07-10 10:42:09 +09:00]] 版))
<http://search.cpan.org/dist/YAML-LibYAML/lib/YAML/XS.pm>

[3] [[YAML]] 使うのまじでやめてほしい・・・。

[8] なんでみんな [[YAML]] なんて使うんだろう。わけのわからない構文エラーとか出るし意味不明すぎる。早く滅んで欲しい。

[FIG(quote)[
[FIGCAPTION[
[9] [CITE[Apache2::UploadProgress - search.cpan.org]]
( ([TIME[2012-03-20 16:33:52 +09:00]] 版))
<http://search.cpan.org/~ceeshek/Apache2-UploadProgress-0.2/lib/Apache2/UploadProgress.pm>
]FIGCAPTION]

> [CODE(MIME)@en[application/x-yaml]]
]FIG]

[FIG(quote)[
[FIGCAPTION[
[10] [CITE@ja[ただ、風のために。5 (2003/May)]]
([TIME[2015-10-30 09:59:06 +09:00]] 版)
<http://www.rubycolor.org/maki/d/200305b.html#11>
]FIGCAPTION]

> xmlhack.comのYAMLの紹介記事にあるとおり、YAMLはsml-dev ML(メーリングリストのほう)で 議論していたSML(マークアップ言語のほう)から派生してできたものです。
> sml-dev MLは、XMLのごちゃごちゃした仕様に嫌気が差してきたひとたちが 「もっとシンプルなXMLを!」という思いのもと、 xml-dev MLから分離して作ったMLです。

]FIG]


[FIG(quote)[
[FIGCAPTION[
[17] [CITE[Re: '''['''Json''']''' Human JSON (Hjson)]]
( ([TIME[2016-05-25 16:50:03 +09:00]]))
<https://www.ietf.org/mail-archive/web/json/current/msg03855.html>
]FIGCAPTION]

> > People seem to prefer JSON for
> > configuration over YAML and other config formats.
> Can't be.  YAML *contains* JSON.
> If you like JSON, you already like YAML, because every JSON file is a
> YAML file.

]FIG]

[18] [[YAML]] では [CODE[true]] は特別な意味を持つ値です。
[[YAML]] を使って実行する[[コマンド]]を記述する場合に、 [CODE[true]]
[[コマンド]]のつもりで [CODE[true]] と書いても実行されずエラーになる場合があります。

;; だから [[YAML]] なんて使うべきではないのですが。。。

[19] [CITE[YAML: Keys like "yes" or "no" evaluate to true and false - makandropedia]]
( ([TIME[2017-01-19 15:13:07 +09:00]]))
<https://makandracards.com/makandra/24809-yaml-keys-like-yes-or-no-evaluate-to-true-and-false>

[20] [[YAML]] 好きな人はこういうの全部暗記してるのかな?? 罠過ぎるよ・・・

[21] 
[[インデント]]の深さのルールが難しすぎる。意味わからない。

[FIG(quote)[
[FIGCAPTION[
[26] [CITE[What is the difference between YAML and JSON? When to prefer one over the other - Stack Overflow]]
( ([TIME[2017-06-10 02:50:22 +09:00]]))
<https://stackoverflow.com/questions/1726802/what-is-the-difference-between-yaml-and-json-when-to-prefer-one-over-the-other/1729545>
]FIGCAPTION]

> YAML is a superset of JSON

]FIG]


[27] [CITE@en[JSON == YAML? It’s getting closer to truth - Ajaxian]]
( ([TIME[2017-06-10 02:52:26 +09:00]]))
<http://ajaxian.com/archives/json-yaml-its-getting-closer-to-truth>

[FIG(quote)[
[FIGCAPTION[
[28] [CITE@en[Frequently asked questions | Docker Documentation]]
( ([TIME[2017-06-10 02:19:32 +09:00]]))
<https://docs.docker.com/compose/faq/#can-i-use-json-instead-of-yaml-for-my-compose-file>
]FIGCAPTION]

>  Yaml is a superset of json so any JSON file should be valid Yaml. 

]FIG]


[FIG(quote)[
[FIGCAPTION[
[29] [CITE@en[Compose file version 3 reference | Docker Documentation]]
([TIME[2017-06-10 10:22:23 +09:00]])
<https://docs.docker.com/compose/compose-file/#short-syntax>
]FIGCAPTION]

> When mapping ports in the HOST:CONTAINER format, you may experience erroneous results when using a container port lower than 60, because YAML will parse numbers in the format xx:yy as sexagesimal (base 60). For this reason, we recommend always explicitly specifying your port mappings as strings.

]FIG]


[33] [CITE[What valid JSON files are not valid YAML 1.1 files? - Stack Overflow]]
([TIME[2018-06-24 03:35:38 +09:00]])
<https://stackoverflow.com/questions/21584985/what-valid-json-files-are-not-valid-yaml-1-1-files>

[34] [CITE[Timestamp Language-Independent Type for YAML™ Version 1.1]]
([TIME[2018-06-15 05:26:46 +09:00]])
<http://yaml.org/type/timestamp.html>



[38] 
[CITE@en[Specifying the string-value 'Yes' in YAML - Stack Overflow]], [TIME[2024-11-18T12:16:49.000Z]] <https://stackoverflow.com/questions/53648244/specifying-the-string-value-yes-in-yaml/53648738>

[39] >>38
聞いてた以上にやば気なことが書かれてるぞ...

- [40] そもそもの仕様がやばい
- [41] 版が変わって[[非互換変更]]されている
- [42] 実装はばらばら


[43] 何も信用できないってことか。。。

