wercker.yml における YAML のインデント
※当サイトにはプロモーションが含まれています。
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] 記述方法の詳細は、PHP :: Wercker Documentation を参照して下さい。
[最終更新日:2014年10月8日]