LoginSignup
26
21

More than 3 years have passed since last update.

rubocopの導入

Last updated at Posted at 2018-04-26

背景

最初に導入すべきですが、ほぼ一人で開発していたので、してなかった。チームの拡大で、やっぱコードがやばくなってきたので、早めに導入することを決めた。

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が入れてます。でも自分で設定しないと動かないです。

Screen Shot 2018-04-26 at 16.23.53.png

Code -> Inspect codeを走らせると↓の結果が出ます。

Screen Shot 2018-04-26 at 17.06.17.png

感想

プロジェクトが始めた時に入れるべきものです!

自動的に走らせて貰いたい!うるさいかなあ

参照

26
21
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
26
21