RubocopのそれぞれのCopsにはどんな役割があるのか調べてみた


Railsを使ってるとリンターとして多くのプロジェクトで使われているRubocopで、違反すると出てくるNamingStyelLayoutといったそれぞれのCopsがどういった役割をしてるのか調べてみました。

Copの種類1

  • Style Cops
  • Layout Cops
  • Lint Cops
  • Metrics Cops
  • Naming Cops
  • Perfomance Cops
  • Security Cops
  • Rails Cops
  • Bundler Cops

それぞれのCopの役割

Style Cops

主にRuby Style Guideに従っているかどうかのチェックを行っているCops。  

例)Style/EmptyElseはelseの後に何もステイトメントがない場合、違反を検知します。

Style/EmptyElse
#違反している例 
if condition
  statement
else
end

#正しい例1
if condition
  statement
else
  nil
end

#正しい例2
if condition
  statement
end

Layout Cops

インテンドやホワイトスペースが一貫して使われているかのチェックをするCops。

例)Layout/IndentationWidthというCopはインテンドの深さをチェックしている。

Layout/IndentationWidth
#違反している例 
class BadExample
 def greeting
 puts 'hello'
 end
end

#正しい例
class GoodExample
  def greeting
    puts 'hello'
  end
end

Lint Cops

曖昧なものや間違いである可能性が高いものをチェックしているCops。

例)Lint/DuplicateMethodsというCopは同じメソッドが複数定義されていないかのチェックをしている

Lint/DuplicateMethods
#違反している例
class BadExample
  def foo
    1
  end

  def foo
    2
  end
end

#正しい例
class GoodExample
  def foo
    1
  end

  def bar
    2
  end
end

Metrics Cops

ソースコードの中で定量化可能なプロパティーを扱うCops。
クラス名の長さ等がこれに該当する。それぞれの許容される最大値は設定で変更することができる。

Naming Cops

その名の通り、メソッド名や定数、ファイル名のコードの名前付けをチェックするCops。セッターなのに、=がついていない。Rubyファイルはスネークケースであるべきなのに、キャメルケースを使ってる場合等に違反を検知する。

Perfomance Cops

ある特定のRubyイディオムにおいて、それと同じ働きをするが、パフォーマンスが良い別のRubyイディオムがある場合、それを検知するCops。

Security Cops

セキュリティー的にまずいコードを検知するCops。ファイルを外から読み込むコード等をチェックする。

Rails Cops

おなじみのフレームワークRuby on Railsのフレームワークの規約を守ってるかをチェックするCops。
他のCopsとは違い、デフォルトでは使えないので、.rubocop.ymlで宣言する必要がある

Bundler Cops

Gemfile内のコードをチェックするCops。
Gemfile内で同じGemが記載されていないか等のチェックをする。

Gemspec Cops

Gemを作る際に作成する必要がある.gemspecファイルの中をチェックする。(Gemを自分で作ったことがないため、チェック内容は把握していません。

 参考元

Rubocopの公式ドキュメント
https://docs.rubocop.org/en/latest/

 その他

今後、随時更新予定
何か間違いやアドバイスがあれば、ぜひコメントください


  1. 公式のドキュメントではそれぞれのCopsは複数形で表現されていたので、その表現を使っています。