Dockerを触ってみたりする中で、他の方が書いたMysqlとPHPMyAdminのコンテナをたてるdocker-compose.ymlとかをなんとなく調べて解読しながら読んだ事はありますが、、
そもそもYAMLの書き方について基礎的な知識がなく、基本的には読めないし書けないので、一度ゼロから入門してみたいと思います。
YAMLとは
正式名称は「YAML Ain’t Markup Language」。マークアップ言語ではなく、
構造化されたデータを表現するためのフォーマット。
拡張子は「.yml」または「.yaml」を使用。
YAMLで扱えるデータ型3つ
スカラー
数字や文字列、真偽値などの基本的な値を表現できる。
※文字列のダブルクォートは省略も可
counts:3author:"Qiita"rating:3.3active:true
上記のYAMLデータをJSONに変換すると、以下のようになる。
{"counts":3,"author":"Qiita","rating":3.3,"active":true}
シーケンス(Sequence)
要素の集合で、配列・リストのこと。
YAMLでは、行頭に「-」をつけることで配列を表現する。
「-」のあとに半角スペースを入れる。
languages:-Ruby-JavaScript-PHP-SQL
上記のYAMLデータをJSONに変換すると、以下のようになる。
{"languages":["Ruby","JavaScript","PHP","SQL"]}
マッピング(Mapping)
YAMLではkey:value型のコレクションをマッピングとして表現できる。
spot:name:"EnoshimaAquarium"hours:"9:00〜17:00"price:2500kindOfFish:810
上記のYAMLデータをJSONに変換すると、以下のようになる。
{"spot":{"name":"Enoshima Aquarium","hours":"9:00〜17:00","price":2500,"kindOfFish":810}}
コメント
# 生き物の情報name:jellyfish
シーケンスとマッピングのネスト
シーケンスの中にマッピングをネストしたり、逆にマッピングの中にシーケンスをネストすることができる。
dolphin:-name:hopeage:9-name:ateneage:16-name :marinage:18
上記のYAMLデータをJSONに変換すると、以下のようになる。
{"dolphin":[{"name":"hope","age":9},{"name":"atene","age":16},{"name":"marin","age":18}]}
インライン記法
マッピングやシーケンスをJSONのようにインラインに記述可能
languages:[Ruby,PHP,JavaScript]student:{name:tanaka,age:14}
{"languages":["Ruby","PHP","JavaScript"],"student":{"name":"tanaka","age":14}}
マルチドキュメント
区切り文字としてアンダースコア3つ「___」を使うことで、1つのファイルに複数のドキュメントを区切って表現することが可能。
people:-name:abeage:65-name:trumpage:73---countory:-Japan-America
特殊文字の扱い
YAMLでは、 [] {} : > |. などを文字列としてそのまま使うとエラーになる。
これらの文字を使うときはクオートで囲みましょう。
greeting:"[hello]>{world.}"
改行を含む文字列
改行を含む文字列を扱うときは「|」を使う
introduction: |HIGHMIDLOW
{"introduction":"HIGH\nMID\nLOW\n"}