背景
最初に導入すべきですが、ほぼ一人で開発していたので、してなかった。チームの拡大で、やっぱコードがやばくなってきたので、早めに導入することを決めた。
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を走らせると↓の結果が出ます。
感想
プロジェクトが始めた時に入れるべきものです!
自動的に走らせて貰いたい!うるさいかなあ

