foodcriticでChefのcookbookの書き方をチェックする方法
foodcriticはChefのcookbookのためのlintツールで、http://acrmp.github.com/foodcritic/ で公開されています。 cookbookは長い間環境を維持していくために使われるため、可読性が高く誰でも分かるように書いておくことが望ましいのは言うまでもありません。このツールでは標準で45個のルールにしたがってcookbookをチェックすることができます。もちろん自分でルールを新たに追加していくことも可能です。
インストール
動作させるには、ruby 1.9.2以降が必要です。インストールはgemでさくっと入ります。gem install foodcritic
実行方法
実行方法も簡単です。引数にcookbookの名前を指定すればOKです。foodcritic php
その他の実行オプションとしては以下があります。
foodcritic [cookbook_path]
-r, --[no-]repl
対話式にルールを編集するためにREPLに入ります
-t, --tags TAGS
指定されたタグに該当するルールだけをチェックします。タグにはstyle strings attributes portability solo services correctness files metadata search readme libraries definitions lwrp deprecated annoyances notifications recipe etsy が指定可能です。複数のタグを指定する場合はカンマ区切りにします。
-f, --epic-fail TAGS
指定したタグに該当するルールに引っかかった場合はコマンドの戻り値でエラーを返します。Jenkinsなどのツールと組み合わせる場合に有効です。
-C, --[no-]context
ルールにひっかかった箇所をハイライトして表示します。
-I, --include PATH
デフォルト以外の追加のルールが配置されたパスを指定します
-S, --search-grammar PATH
searchのシンタックスチェックをおこなうときにどの文法を使うかを指定します
-V, --version
バージョン情報を表示します。
例:カレントディレクトリをチェックする際に、styleとattributesタグのチェックのみ行い、ひっかかった箇所をハイライト表示した場合
foodcritic -t style,attributes -C .
結果の確認と修正
foodcriticの結果は画面上に表示されます。それぞれ警告の結果はFCから始まる番号がついています。どのような指摘事項なのか、そしてどのように直すべきかはサイト(http://acrmp.github.com/foodcritic/)で詳細に説明されています。先ほど実行した例ではFC002とFC019がひっかかっています。
例1:FC002
FC002の内容は、必要の無い箇所では値をダブルクォートで囲まなくていいよ、ということなので、レシピを以下のように修正します。 Beforecwd "#{Chef::Config[:file_cache_path]}"
After
cwd #{Chef::Config[:file_cache_path]}
例2:FC019
FC019の内容は、nodeの値にアクセスするときは[:属性名]ではなく[“属性名”]でアクセスしなさい、ということなので、レシピを以下のように修正します(一部のみ) Beforeif node[:platform] == "centos" and node[:platform_version][0] == "5"
After
if node["platform"] == "centos" and node["platform_version"][0] == "5"
以上が終わったら再度foodcriticを実行します。
今度はstyleとattributesに関しての指摘はなくなりました。