様々なツールで利用されているYAMLの書き方について解説します。「コメント」「配列」「アンカー」「エイリアス」「改行」について取り上げます。
目次
YAMLとは?
構造化されたデータを表現するためのフォーマットです。ツールの設定ファイル
などで利用されることが多いです。例えば、CloudFormation
docker-compose
ansible
CircleCI
などで利用されています。
同じ用途で使われるフォーマットにJSON
がありますが、YAML
は人間の読みやすさを重視しています。例えば、JSON
だとコメントが書けませんが、YAML
だとコメントが書けます。
JSONからYAMLに変換
既にJSONで書かれた内容をYAMLに変換したい場合、http://j2y.link/ などのサービスを利用すると良いです。
YAMLはあくまで「仕様」
各ライブラリ、ツールによって実装されます。そのため、ツールによっては「サポートされていない部分」や「拡張機能」があるケースがあります。
コメント
#
の後にコメント可能です。
スカラー
以下の値を利用できます。
- 文字列
- 数値
- 整数
- 浮動小数
- 真偽値
true
false
yes
no
- 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 rake
1文字以上の空白で字下げします。
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の書式を確認できます。