LoginSignup
6
1

Railsのコードを綺麗にしたくてRuboCopを導入したのでメモメモ

Last updated at Posted at 2023-09-19

どうもこんにちは。

RSpecテストのことをメモしてたら、RuboCopのことも書きたくなったのでメモします。

RuboCopとは?

RuboCopとは、Rubyのコードをチェックして、そのコードがRubyの良い書き方かどうかを確認するツールです。簡単に言うと、Rubyの「 文法チェッカー&アドバイザー 」のようなものです。

RuboCopを導入するメリット

  • 導入が簡単
  • 開発チーム全体でコードスタイルを統一することができる
  • バグを防ぐことができる
  • 良いコードスタイルを学ぶことができる

デメリット

特にない。。。

RoboCopとRSpec何が違うの?

一言で言うと、「 静的チェックか動的チェックか 」です。

RuboCopはコードの外見を見ます。(スタイルなど)

それに対して、RSpecはコードの内面を見ます。(動作、行動)

導入方法

ここでは、最低限のRailsアプリケーションが構築されている前提で説明を進めます。

1. Gemを追加

Gemfileに以下のコードを記述します。

group :development do
  gem 'rubocop', require: false
  gem 'rubocop-performance', require: false
  gem 'rubocop-rails', require: false
  gem 'rubocop-rspec', require: false
end
  • rubocop・・・コードチェックに最低限必要なgemです。
  • rubocop-performance・・・コードのパフォーマンスに関係する問題を指摘してくれます。
  • rubocop-rails・・・Rails用のコーディング規約に沿ってコードチェックをしてくれます。
  • rubocop-rspec・・・RSpecテストコードについてチェックをしてくれます。

RSpecテストを導入していない場合には、rubocop-rspecを導入する必要はありません。

2. bundle installの実行

ターミナルでbundle installを実行します。

3. 設定ファイルの追加

ターミナルでrubocop --initを実行します。

これによって、.rubocop.ymlという設定用ファイルが自動生成されます。

4. 拡張Gemの設定追加

.rubocop.ymlに以下のコードを記述します。

require:
  - rubocop-rails
  - rubocop-performance
  - rubocop-rspec

5. テスト実行

ターミナルで以下のコマンドを実行します。

# 修正箇所の洗い出し
bundle exec rubocop

# 修正箇所を自動修正(弱)
bundle exec rubocop -a

# 修正箇所を自動修正(強)
bundle exec rubocop -A

自分が最低限使用するのは上記3つです。

しかし、この設定のままだと、かなりルールが厳しいです。なので個別にルールを設定します。

自分が設定しているルールです。参考までに。。。

require:
  - rubocop-performance
  - rubocop-rails
  - rubocop-rspec

AllCops:
  Exclude:
    - 'bin/**/*'
    - 'config/**/*'
    - 'coverage/**/*'
    - 'db/**/*'
    - 'docker/**/*'
    - 'log/**/*'
    - 'node_modules/**/*'
    - 'public/**/*'
    - 'storage/**/*'
    - 'test/**/*'
    - 'tmp/**/*'
    - 'vendor/**/*'
  TargetRubyVersion: 3.0.6

Layout/LineLength:
  Max: 150

Metrics/MethodLength:
  Max: 200

Metrics/AbcSize:
  Enabled: false

Metrics/PerceivedComplexity:
  Enabled: false

Metrics/CyclomaticComplexity:
  Enabled: false

Metrics/BlockLength:
  Enabled: 150

Metrics/BlockNesting:
  Max: 5

Metrics/ClassLength:
  Enabled: false

Naming/VariableNumber:
  Enabled: false

Style/Documentation:
  Enabled: false

Naming/AccessorMethodName:
  Enabled: false

Style/AsciiComments:
  Enabled: false

Style/Documentation:
  Enabled: false

Style/FrozenStringLiteralComment:
  Enabled: false

Style/RescueModifier:
  Enabled: false

Style/SymbolProc:
  Enabled: false

Style/ClassAndModuleChildren:
  Enabled: false

# 以下、Rails用

Rails/InverseOf:
  Enabled: false

# 以下、RSpec用

RSpec/MultipleMemoizedHelpers:
  Enabled: false

RSpec/LetSetup:
  Enabled: false

RSpec/ContextWording:
  Enabled: false

RSpec/NamedSubject:
  Enabled: false

RSpec/AnyInstance:
  Enabled: false

RSpec/NestedGroups:
  Max: 4

RSpec/RepeatedExampleGroupBody:
  Enabled: false

ちょいめも

自分の感想ですが、bundle exec rubocopを実行した時に、結果が見づらいなぁという印象を受けました。

なので、自分の場合は実行結果をHTML形式で表示するようにしています。

設定方法

1. 結果出力ファイルを作成する

code_check/rubocop_output.htmlというディレクトリとファイルを作成します。

2. HTMLを指定してRuboCopを実行

ターミナルでbundle exec rubocop -f html -o code_check/rubocop_output.htmlを実行します。

これだけで以下のような結果画面が閲覧できるようになります。

スクリーンショット 2023-09-15 18.27.27.png

まとめ

今回はRuboCopについてメモしてみました。

書いている最中に見つけましたが、以下の記事でもかなりわかりやすく説明がされていましたので御紹介させていただきます。

RuboCopは導入難易度がかなり低いと思いますので、初学者の方にはぜひ導入してほしいライブラリです。

以上

6
1
0

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
6
1