yamlの書き方(コメント, 配列, アンカー, エイリアス)

様々なツールで利用されている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" )が入ります。他の行はスペースになります。

参考