背景
最初に導入すべきですが、ほぼ一人で開発していたので、してなかった。チームの拡大で、やっぱコードがやばくなってきたので、早めに導入することを決めた。
Rubocopは何
Ruby style guideを基づいて作られたstatic code analyzerです。
導入
インストール
- 開発環境とステージングに入れてます。最新のバージョン0.55.0を入れてます。
group :development, :staging do
gem 'rubocop', '~> 0.55.0', require: false
end
自動修正
最初は.rubocop_todo.ymlがないと動かないようなので、touch .rubocop_todo.yml
で空っぽのファイルを生成して、
rubocop -a
で自動修正できる部分を修正してもらって、コミットする。
手動修正
自動的に修正してくれない部分もあるので、rubocop --auto-config-gen
で.rubocop.ymlを生成する。
.rubocop.ymlはrubocopのチェックを無視する設定ファイルです。そのファイルの中に自分が修正した部分をコメントアウトして、rubocop
を実行すればエラーが出るので、そのエラーメッセージを参照して修正します。
後チームの中独自のルールを入れたいときにもそこで書きましょう。
自分が使ってるものは
inherit_from: .rubocop_todo.yml
AllCops:
Exclude:
- db/**/*
- tmp/**/*
- vendor/**/*
- lib/geohash.rb
- lib/manager/geo.rb
- bin/spring
TargetRubyVersion: 2.3
# Offense count: 326
# Configuration parameters: AllowHeredoc, AllowURI, URISchemes, IgnoreCopDirectives, IgnoredPatterns.
# URISchemes: http, https
Metrics/LineLength:
Exclude:
- 'Rakefile'
- '**/*/.rake'
- 'spec/**/*.rb'
Max: 275
Metrics/MethodLength:
Max: 150 # remove this after refacotr
PredicateName:
NamePrefixBlacklist:
- has_
MixinUsage:
Include:
- app/**/*.rb
Naming/UncommunicativeMethodParamName:
MinNameLength: 1
Naming/AccessorMethodName:
Enabled: false
Style/Documentation:
Enabled: false
Style/AsciiComments:
Enabled: false
# Offense count: 7
Metrics/PerceivedComplexity:
Max: 18
# Offense count: 45
# Configuration parameters: CountComments.
Metrics/MethodLength:
Max: 106
# Offense count: 45
# Configuration parameters: CountComments.
Metrics/MethodLength:
Max: 109
# Offense count: 1
# Configuration parameters: CountKeywordArgs.
Metrics/ParameterLists:
Max: 7
# Offense count: 7
Metrics/CyclomaticComplexity:
Max: 15
# Offense count: 4
# Configuration parameters: CountComments.
Metrics/ClassLength:
Max: 140
# Offense count: 1
# Configuration parameters: CountBlocks.
Metrics/BlockNesting:
Max: 4
# Offense count: 40
# Configuration parameters: CountComments, ExcludedMethods.
Metrics/BlockLength:
Max: 111
# Offense count: 53
Metrics/AbcSize:
Max: 109
# Offense count: 1
Lint/HandleExceptions:
Exclude:
- 'config/unicorn.rb'
修正すべきところもまだまだあるので、やりながら、修正していきたいです。
Railsについて
rubocop -R
するとrubyだけではなく、Railsもチェックしてくれますので、これから使う予定です。
CircleCI 2.0 に入れる
version: 2
jobs:
build:
<<: *defaults
steps:
- checkout
- run:
name: rubocop
command: bundle exec rubocop
開発環境とステージングにデプロイする時に走らせるようにしてます。
Rubymine
2017.1からrubymineはデフォルトにrubocopが入れてます。でも自分で設定しないと動かないです。
Code -> Inspect codeを走らせると↓の結果が出ます。
感想
プロジェクトが始めた時に入れるべきものです!
自動的に走らせて貰いたい!うるさいかなあ