くりにっき

フルスタックキュアエンジニアです

rubocop-itamaeを作った

itamae のレシピを静的解析するrubocopのプラグインを作りました。

github.com

コンセプト

前職でitamaeのレシピをレビューすることが多々あったのですが、毎回同じことを指摘するのも大変だったのでrubocopのcopにしました。

rubocop-itamae自体はrubocopにしか依存していないので itamae と mitamae の両方のレシピで使えると思います。

下記のようなcopを作っています

Itamae/CdInExecute

execute の中で cd せずに cwd を使え。

# bad
execute 'cd /tmp && rm -rf /tmp/*'

# good
execute 'rm -rf /tmp/*' do
  cwd '/tmp'
end

Itamae/CommandEqualsToName

execute の引数と command で同一のコマンドを書くのはDRYじゃないのでやめろ

# bad
execute 'rm -rf /tmp/*' do
  command 'rm -rf /tmp/*'
end

# good
execute 'rm -rf /tmp/*'

execute 'Remove temporary files' do
  command 'rm -rf /tmp/*'
end

Itamae/NeedlessDefaultAction

デフォルトのaction(package リソースでいえば :install)は省略できる

# bad
package 'git' do
  action :install
end

# good
package 'git' do
end

package 'git'

Itamae/RecipePath

レシピが itamae推奨のディレクトリ構成 に沿っているかチェックする

# bad
default.rb
hoge/web.rb

# good
cookbooks/nginx/default.rb
roles/web.rb

copを作ったメリット

  • 今までレビューで指摘してきた事例に対して Itamae/CdInExecute のような名前をつけることができたのでよかった

今後作りたいcop

Itamae/NodeKeyType

grepabilityの観点からnode のkeyをStringかSymbolかのどっちかに統一しときたい。

途中までは作った *1 んだけど、現状のrubocopだと実装に必要な機能が足りないのでいったん保留 *2