Rubocopって何?
- Rubyの静的コード解析器
- ruby-style-guideを遵守させる
- 問題点について自動的に修正してくれる
Rubocop入れると何が良いの?
- ruby-style-guideという標準的なコーディングスタイルガイドにコードが準拠する
- 可読性up
- 不穏なコードが減る結果、バグの元が減る
- コーディング規約を設定ファイルにできる
- コーディング規約違反を自動的に検出/修正できる -新規メンバーが入った時に、そのプロジェクトのコーディングスタイルに合わせることが容易
特に初心者に有用という意見が多い
インストール
# Gemfile gem 'rubocop', require: false
使い方
$ bundle exec rubocop
設定ファイル
カレントディレクトリに.rubocop.yml
を用意する
#.rubocop.yml AllCops: RunRailsCops: true # Rails向けのチェックも行う
自動生成されたコードに文句を言われる!
色々調整する必要がある
- RailsとrubocopにPRを投げるべき問題のような気がしないでもない
チェック対象外ファイルの設定
RubocopのREADMEに、Railsの場合、以下のように設定するよう書いてある
#.rubocop.yml AllCops: RunRailsCops: true Include: - '**/Rakefile' - '**/config.ru' Exclude: - 'db/**/*' - 'config/**/*' - 'script/**/*' - 'bundle_bin/*' - 'bin/*' - !ruby/regexp /old_and_unused\.rb$/
まだ文句言われるよ?
多分Rails4に対応しきれてない & 自分の場合、bundle_bin に実行ファイルを置いているので、更に /bin
, /bundle_bin
を対象外とする
AllCops: RunRailsCops: true Include: - '**/Rakefile' - '**/config.ru' Exclude: - 'db/**/*' - 'config/**/*' - 'script/**/*' - 'bundle_bin/*' - 'bin/*'
まだまだ文句言われるよ?
既存のプロジェクトにとりあえず入れた時にうんざりしないように、現状の問題をTODOファイルに入れて一旦無視するオプション、--auto-gen-config
を使う
- 個人的な感想: 神オプション! こういうのがあると無いとで、導入の敷居が激しく変わると思う
$ bundle exec rubocop --auto-gen-config
既存の問題点が.rubocop_todo.yml
に格納されるので、それを.rubocop.yml
にincludeする
inherit_from: .rubocop_todo.yml AllCops: RunRailsCops: true Include: - '**/Rakefile' - '**/config.ru' Exclude: - 'db/**/*' - 'config/**/*' - 'script/**/*' - 'bundle_bin/*' - 'bin/*' - !ruby/regexp /old_and_unused\.rb$/
.rubocop_todo.yml の微調整
注意: rspecを入れている場合
そのままだと、変数展開のない文字列にダブルクォーテーションを許可する設定になってしまうので、そこだけ消す
Style/StringLiterals: Enabled: false
問題点の自動修正
--auto-correct
オプションで、一部の問題点については自動的に修正してくれる
$ rubocop --auto-correct
これで、spec/rails_helper.rb
のダブルクォーテーションが、シングルクォーテーションに修正されるので、まとめてcommitする
Rspecに対応させる
# Gemfile gem 'rubocop-rspec'
# .rubocop.yml require: rubocop-rspec
実行方法
$ rubocop --require rubocop-rspec
日本語のコメントがエラーになるよ...
以下を設定する
AsciiComments: Enabled: false
感想
- 厳密にやり過ぎると多分長く続かないので、メンバー間で合意を取って必要なものだけ取捨選択していけば良い
- いろいろ試してみて良い位置に行くのが良い気がする
- 多分だけど、CIに組み込んで通らなかったらマージできないレベルで厳しくすると色々大変
- けど、やった方がコードの品質は安定するはず
- そういう意味で取り扱いが難しいツール
- いろんなところに、「ウチはこうしている」という設定が上がっているので参考にするのが良い
- この辺が現実的か