foodcriticで、Chefの静的コード解析のチェック対象を絞り込む

27.jpg

はじめに

foodcriticは、Chef Cookbookのスタイルをチェックしてくれる静的コード解析ツールです。
今回、foodcriticにて、コードチェック対象外とする方法を整理します。

コードチェック対象は、foodcritic -lコマンドにて確認できます。また、下記ディレクトリ等にて、コードチェック対象が設定されています。foodcritic関連のディレクトリを確認したい場合には、gem environmentコマンドを実行して下さい。
C:\xxx\gem\ruby\2.4.0\gems\foodcritic-11.4.0\lib\foodcritic\rules

foodcriticのホームページから、チェック項目の内容を確認できます。

1.コードチェック対象外を指定

- 1-1.Chefレシピにコードチェック対象外を指定

チェック対象外とする項目を、Chefレシピに直接設定する方法です。各スクリプトにて、チェック対象外とするIDを、#~のように記載します。

node['modules'].each do |modules|
  package "#{modules}" do   #~FC002
    action [:remove]
  end
end

- 1-2.foodcriticファイルにコードチェック対象外を指定

チェック対象外とする項目を、1つのファイルに設定する方法です。cookbook配下に.foodcriticファイルを作成し、チェック対象外とするIDを記載します。

PS C:\xxx\chef-repo\site-cookbook\common > cat .foodcritic
~FC064
~FC065
~FC069
~FC071
~FC078

- 1-3.foodcriticコマンド実行時にコードチェック対象外を指定

foodcritic実行時に、チェック対象外のIDを指定する方法です。この場合、上記の1-1と1-2の設定が無視されます。

PS C:\xxx\chef-repo\site-cookbook\common > foodcritic -C ./ -t ~FC002
PS C:\xxx\chef-repo\site-cookbook\common > foodcritic --help
foodcritic [cookbook_paths]
    -t, --tags TAGS                  Check against (or exclude ~) rules with the specified tags.

2.コードチェック対象を指定

反対に、コードチェック対象のみを指定することも可能です

- 2-1.foodcriticコマンド実行時にコードチェック対象を指定

foodcritic実行時に、チェック対象のIDを指定します

PS C:\xxx\chef-repo\site-cookbook\common > foodcritic -C ./ -t FC002

foodcritic実行時に、チェック対象のtagを指定します。tagはfoodcriticホームページにて確認して下さい。

PS C:\xxx\chef-repo\site-cookbook\common > foodcritic -C ./ -t roles

3. 設定例

インターネットアクセスがない環境だったため、.foodcriticファイルを配置する1-2の方法にて、以下をチェック対象外としました。
FC064: Ensure issues_url is set in metadata
FC065: Ensure source_url is set in metadata
FC069: Ensure standardized license defined in metadata
FC071: Missing LICENSE file
FC078: Ensure cookbook shared under an OSI-approved open source license

PS C:\xxx\chef-repo\site-cookbook\common > cat .foodcritic
~FC064
~FC065
~FC069
~FC071
~FC078

まとめ

1-2の.foodcriticファイルにチェック対象外とするIDを指定する方法が、一番楽かと思います。

Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.