YAML1.1の記号、結構ググりにくいものが多いので
よく使われそうなものだけまとめました。
また、配列やハッシュに親しい表現になるということを文字列だけで表すと直感的にわかりにくいので
Rubyで読み込んだ後の状態を、プログラム上でのイメージとして今回載せています。
調査した環境
$ ruby -v
ruby 2.5.0p0 (2017-12-25 revision 61468)
ruby2.5なのでYAMLのバージョンは1.1です。
参考:Ruby2.5時点のYAML標準ライブラリはYAML1.1 - コード日進月歩
それぞれの記号の意味
-(ハイフン)
2つ使い方の用途がある。
配列
1つの場合は配列として利用できる。
- aaa
- bbb
- ccc
Ruby的な表現をすると以下のイメージです。(あくまでもイメージ)
["aaa", "bbb", "ccc"]
ファイル始端
3つ重ねて使うとファイルの始端の意味を表す。
.
の項で詳しく説明します。
:(コロン)
コロンを境に左側がキー、右側が値というのを表します。
主にHashのようなキーと値のセットのイメージです。
必ずコロンの後はスペースまたは改行をいれること。
key: value
Ruby的な表現をすると以下のイメージです。(あくまでもイメージ)
{"key"=>"value"}
多重階層表現の場合
多重階層で表す場合はインデントで下げます。
main:
sub1: value
sub2: value
Ruby的な表現をすると以下のイメージです。(あくまでもイメージ)
{"main"=>{"sub1"=>"value", "sub2"=>"value"}}
&(アンパサンド)
YAMLの用語としては「アンカー」と呼びます。
変数のような使いかたをし、後述のエイリアスと併せて使います。
&
で記述した内容自体は反映されません
key: &vars value
これをrubyで変換すると以下のイメージ
{"key"=>"value"}
実際の使い方はアスタリスクの項目で説明します。
*(アスタリスク)
YAMLの用語としては「エイリアス」と呼びます
アンカーで設定した値をセットすることができます。
アンカーが変数定義で、エイリアスが変数利用のイメージです。
key1: &vars same_value
key2: *vars
上記は、以下の内容と同じになります
key1: same_value
key2: same_value
<(小なり)
<<:
と記述することでハッシュのマージができます。
これはエイリアスとセットで使われる事が多いです。
以下に例を示します。
group1: &main_group
member1: taro
member2: sato
member3: kato
group2:
<<: *main_group
member4: ito
これは以下の内容と同義になります。
group1:
member1: taro
member2: sato
member3: kato
group2:
member1: taro
member2: sato
member3: kato
member4: ito
.(ドット)
3つ重ねて使うことでファイル終端を表します。
---
と併せて使うケースが多いです。
以下の場合、ファイルをロードするとkey1
とkey2
が読みこまれて終端扱いになり、key3
は読み込まれません。
---
key1: value1
key2: value2
...
key3: value3
#(シャープ)
コメントアウトです。
先頭行に書く場合には素直にコメントされるが
テキスト途中で行う場合はうまく挙動しない場合があるので注意してください
?(はてな/クエスチョン)
?
以降のものは明示的にキーであることを表す
使い所としてはキーが nil
にしたい時に使う
? : "key is nil"
※ ?
に関してはYAML1.2の定義と若干振る舞いが違うので動きは要確認
参考サイト
- プログラマーのための YAML 入門 (初級編)
- YAML 基本記法まとめ - Qiita
- YAML入門 - Qiita
- YAMLにコメントを書くときの注意 - Qiita
- YAMLでnilをキーにしたハッシュを扱う | おおたの物置
- YAMLをRubyへ変換する時に困らなくなる記事 - Qiita
タイトルの元ネタ