様々なツールで利用されているYAMLの書き方について解説します。「コメント」「配列」「アンカー」「エイリアス」「改行」について取り上げます。
目次
YAMLとは?
構造化されたデータを表現するためのフォーマットです。ツールの設定ファイル などで利用されることが多いです。例えば、CloudFormationdocker-composeansibleCircleCIなどで利用されています。
同じ用途で使われるフォーマットにJSONがありますが、YAMLは人間の読みやすさを重視しています。例えば、JSONだとコメントが書けませんが、YAMLだとコメントが書けます。
JSONからYAMLに変換
既にJSONで書かれた内容をYAMLに変換したい場合、http://j2y.link/ などのサービスを利用すると良いです。
YAMLはあくまで「仕様」
各ライブラリ、ツールによって実装されます。そのため、ツールによっては「サポートされていない部分」や「拡張機能」があるケースがあります。
コメント
# の後にコメント可能です。
スカラー
以下の値を利用できます。
- 文字列
- 数値
- 整数
- 浮動小数
- 真偽値
truefalseyesno
- Null
null~
- 日付
- yyyy-mm-dd
コレクション
シーケンス(配列)
- "110:110"
- "143:143"
- "993:993"- の後ろにはスペースが必要です。
マッピング(連想配列)
image: blackfire/blackfire
context: ./workspace
tty: true: の後ろにはスペースが必要です。
マッピングのマッピング
run:
name: Run tests
command: bundle exec rake1文字以上の空白で字下げします。
tabは利用できません。
マッピングのシーケンス
environment:
- cluster.name=laradock-cluster
- bootstrap.memory_lock=true
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"1文字以上の空白で字下げします。
tabは利用できません。
ブロックスタイルとフロースタイル
先述したシーケンスとマッピングはブロックスタイルの記述です。
あまり利用しているのを見かけませんが、フロースタイルで書くと以下のようになります。
["110:110", "143:143", "993:993"]{ image: blackfire/blackfire, context: ./workspace, tty: true }記述をまとめる
アンカーとエイリアス
- アンカー
&を利用して、他の場所でも参照できるようにします。
- エイリアス
*を利用して、アンカーで定義した内容を参照します。
以下のように、同じ記述を1箇所にまとめることができます。
common: &common
aaa: 1111
bbb: 2222
dev:
build: *common
environment: aaa
stg:
build: *common
environment: bbb
prod:
build: *common
environment: cccマッピングをマージしたい場合は、以下のように << を利用します。
common: &common
aaa: 1111
bbb: 2222
dev:
ccc: xxxx
<<: *common
stg:
ccc: yyyy
<<: *common
prod:
ccc: zzzz
<<: *common改行の扱い
改行させる
test: |
aaa
bbb
ccc| を利用すると各行に改行( "aaa\nbbb\nccc\n" )が入ります。
最後の行だけ改行させる
test: >
aaa
bbb
ccc> を利用すると最後の行だけ改行( "aaa bbb ccc\n" )が入ります。他の行はスペースになります。
参考
- https://yaml.org/
- プログラミング言語ごとに、yamlをパースするライブラリが紹介されています。
- https://yaml.org/spec/1.2/spec.html
- yamlの書式を確認できます。