Nオガワです。
今回は、chef cookbookのコーディングルールをチェックしてくれるツールfoodcriticを紹介します。
導入
gemでインストールします。
$ gem install foodcritic
実行方法
$ foodcritic [cookbook名]
使ってみよう
テストソース
警告出力のため、以下の「なぜexcute?、なぜinitスクリプト?」とつっこみがはいりそうなレシピで実行してみます。
execute 'start-apache' do
command '/etc/init.d/httpd start'
action :run
end
実行
$ foodcritic -C chef-blog-demo
[補足] オプションCは一致箇所を表示
結果
FC004のルールにマッチしていないため、serviceリソースを使うようにと警告が出ます。
[補足] ルールの一覧はこちら
タグについて
foodcritcのルール(2018/08/30現在 FC001~FC122)はタグ付けされており、オプションでタグを指定することでチェック対象を絞り込むことが可能です。前項の例のFC004はタグ「portability」と「services」に含まれますが、その他のタグを指定すると警告は出力されなくなります。タグ指定の例を以下に記載します。タグのリファレンスはこちら
portabilityタグ指定時(警告あり)
[centos@ip-10-10-100-14 ~]$ foodcritic -t portability chef-blog-demo
Checking 2 files
.x
FC004: Use a service resource to start and stop services: chef-blog-demo/recipes/default.rb:37
その他のタグ指定時(警告なし)
[centos@ip-10-10-100-14 ~]$ foodcritic -t style,metadata chef-blog-demo
Checking 2 files
..
ルールを除外する方法
以下に除外する方法を3パターン列挙します。
コマンド上で除外
オプションで除外対象のルールを指定します。
[centos@ip-10-10-100-14 ~]$ foodcritic -t ~FC004 chef-blog-demo
Checking 2 files
..
リスト(.foodcritic)に記載して除外
cookbook配下の「.foodcritic」に除外対象のルールを記載します。
[centos@ip-10-10-100-14 ~]$ echo ~FC004 >> chef-blog-demo/.foodcritic
コメントで除外
警告が発生する該当行に除外対象のルールをコメントで追加します。
execute 'start-apache' do #~FC004
command '/etc/init.d/httpd start'
action :run
end
最後に
とりあえずrubocopとfoodcriticを併用して使っておこうと思います。
読んでいただきありがとうございました。