wercker.yml における YAML のインデント

wercker

wercker.yml のサンプルをいろいろ見ていると、配列 → 連想配列 → 連想配列 の階層構造になっている箇所がYAMLのブロックスタイルだけで記述されていて、ちょっと分かりにくかったのでメモしておきます。

特に1段目の連想配列のキー名が、2段目の連想配列のキー名より長い場合、見た目が分かりにくくなってしまいます(下の例にある “script” と “name” もそうです)。YAMLのフロースタイル(配列を [ ]、連想配列を { } で囲む記述方式)も併用すればいいように思うのですが、あまりそのようなサンプルは見ません。

例えば、PHPのバージョンとして 5.4 を指定するには、”phpenv global 5.4” というコマンドを実行するのですが、この場合の記述方法は、script というキーに対して (name, code というキーを持った)連想配列をセットすることになっています。nameキーに対してセットする値は「コマンドの名前(コマンドの説明文)」であり、codeキーに対してセットする値は「実行するコマンド」になります[1]

この記述を行う場合に、”- script:” の後のインデントに使用するスペースの数によってどう構造が変わるのかRubyのスクリプトで確認してみました。ついでに、YAMLのいろいろな記法も試しています。

実行結果

(1) '- script:' の後のインデントをスペース2文字にした場合の構造
{"build"=>
  {"steps"=>
    [{"script"=>nil,
      "name"=>"Activate PHP 5.4",
      "code"=>"phpenv global 5.4"}]}}
結果:連想配列 → 連想配列 → 配列 → 連想配列 という階層構造になってしまいNG

(2) '- script:' の後のインデントをスペース4文字にした場合(サンプルで見る書き方)の構造
{"build"=>
  {"steps"=>
    [{"script"=>{"name"=>"Activate PHP 5.4", "code"=>"phpenv global 5.4"}}]}}
結果:連想配列 → 連想配列 → 配列 → 連想配列 → 連想配列という階層構造になりOK

(3) (2)に対して、配列を意味するハイフンから、中身の連想配列を1行ずらして書いた場合の構造{"build"=>
  {"steps"=>
    [{"script"=>{"name"=>"Activate PHP 5.4", "code"=>"phpenv global 5.4"}}]}}
結果:OK

(4) (2)に対してフロースタイルを利用した場合の構造 その1
{"build"=>
  {"steps"=>
    [{"script"=>{"name"=>"Activate PHP 5.4", "code"=>"phpenv global 5.4"}}]}}
結果:OK

(5) (2)に対してフロースタイルを利用した場合の構造 その2
{"build"=>
  {"steps"=>
    [{"script"=>{"name"=>"Activate PHP 5.4", "code"=>"phpenv global 5.4"}}]}}
結果:OK

(6) (2)に対してフロースタイルを利用した場合の構造 その3
{"build"=>
  {"steps"=>
    [{"script"=>{"name"=>"Activate PHP 5.4", "code"=>"phpenv global 5.4"}}]}}
結果:OK

こうして並べてみると、確かに wercker.ymlのサンプルにある書き方(2)が統一感があるし無難な気がしました。

[1] 記述方法の詳細は、wercker devcenter: PHP を参照して下さい。

[最終更新日:2014年10月8日]

Pocket

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です


*