guardを使ってrubocopも実行、コーディングチェックをこまめにチェック

コーディング規約のチェックとしてrubyではrubocopを使うと思います。
で、これをjenkinsなどのCIにかませてかませてチェックさせますが、gitにコミットする前に自分でチェックというのを自動化させたいと思いguardでテスト動かすので同じようにやってくれないかなと思っていました。
で、探すとやっぱりあるもので、guard-rubocopです。

使い方は簡単で、Gemfileにまず追加します。


group :development, :test do
gem 'rspec-rails', '3.0.0.beta1'
gem "rake_shared_context"
gem "factory_girl_rails"
gem "shoulda-matchers"
gem "database_rewinder"
gem "rubocop", require: false
gem "rubocop-checkstyle_formatter", require: false
gem "guard"
gem "guard-rspec", " ~> 0.4.2"
gem "guard-spring"
gem "guard-rubocop"
end

で次にbundle installを実行

bundle install --path vendor/bundle

続いて以下を実行してGuardfileにrubocopの設定をする。

guard init rubocop

するとGuardfileに

guard :rubocop do
  watch(%r{.+\.rb$})
  watch(%r{(?:.+/)?\.rubocop\.yml$}) { |m| File.dirname(m[0]) }
end

が追加されています。
これで何かコードを編集すると、関連するテストが実行されてその後rubocopが実行されます。


12:29:07 - INFO - Inspecting Ruby code style: app/models/user.rb
Warning: unrecognized cop FavorSprintf found in /usr/local/project/koremita/.rubocop.yml
Inspecting 1 file
C

Offenses:

app/models/user.rb:38:38: C: Trailing whitespace detected.
validates :provider, presence: true
^
app/models/user.rb:39:34: C: Trailing whitespace detected.
validates :name, presence: true
^
app/models/user.rb:40:33: C: Trailing whitespace detected.
validates :uid, presence: true
^

便利だ。これで効率が上がりそうな気がする。