LoginSignup
1
1

More than 1 year has passed since last update.

RuboCopの導入

Last updated at Posted at 2021-10-02

学習のアウトプットとして投稿しています。
何かご指摘がございましたらお願いいたします。

RuboCopとは

Rubyのコードを解析してくれる。コードに問題があるかどうかや、RuboCopで指定されているフォーマットに沿っているかなどを確認し、問題があった場合は指摘してくれる。直せる部分は自動修正してくれる機能がある。

実行環境

  • macOS
  • Ruby 2.6.7
  • Rails 6.1.4.1
  • RuboCop 1.22.0

設定

gemfileに以下を追加する。rubocopはターミナルから使用するので、require: falseを加える。これによりRailsアプリには自動的に読み込まれなくなる。

Gemfile
group :development do
  gem 'rubocop', require: false
  gem 'rubocop-rails', require: false
  gem 'rubocop-performance', require: false
end

拡張gem

■ rubocop-rails
rubocop単体だと規約が厳しく問題箇所が多くなりすぎるため、Rails用に調整してくれる。   

■ rubocop-performance
処理が遅くなるコードを指摘してくれる。
  

拡張gemはRuboCopの設定ファイル(.rubocop.yml)を作成して、読み込む必要がある。
設定ファイルはRailsアプリと同じルートディレクトリに配置する。

.rubocop.yml
require:
  - rubocop-performance
  - rubocop-rails

以上で設定は完了です。
あとは実際にコマンドラインで使っていきます。

% bundle exec rubocop
略
test/test_helper.rb:7:7: C: [Correctable] Style/ClassAndModuleChildren: Use nested module/class definitions instead of compact style.
class ActiveSupport::TestCase
      ^^^^^^^^^^^^^^^^^^^^^^^

64 files inspected, 282 offenses detected, 245 offenses auto-correctable

64ファイルチェックして282箇所コードに問題があることを指摘してくれています。その中の245箇所は自動修正可能です。自動修正はrubocopに続けて-aオプションをつけて実行するとやってくれます。

--auto-gen-configオプションを用いたRuboCopの導入

指摘箇所が多すぎる場合は一つひとつ確認してコードを直していくと大変なので、--auto-gen-configオプションを利用すると効率よくリファクタリングできる。

① rubocoop --auto-gen-configを実行する。

% bundle exec rubocop --auto-gen-config
略
Rails/WhereNot: # new in 2.8
  Enabled: true
For more information: https://docs.rubocop.org/rubocop/versioning.html
Created .rubocop_todo.yml.

コマンド実行後は.robocop_todo.ymlファイルが作成され合わせて、.rubocop.ymlinherit_from: .rubocop_todo.ymlが追記され、rubocop実行時に.rubocop_todo.ymlファイルも読み込まれるようになる。

.rubocop_todo.yml
#略

# Offense count: 2
# Cop supports --auto-correct.
# Configuration parameters: EnforcedStyle.
# SupportedStyles: nested, compact
Style/ClassAndModuleChildren:
  Exclude:
    - 'test/sign_in_helper.rb'
    - 'test/test_helper.rb'

# Offense count: 21
# Configuration parameters: AllowedConstants.
Style/Documentation:
  Enabled: false

#略

.rubocop_todo.ymlにはエラーが起こっているファイルを除外したり、cop(検査する個々のルール)を無効にする設定が書かれている。そのため、いったんエラーを退避してくれるようになる。デフォルトではエラーが起こっているファイルが15より大きいとそのcopを無効にする設定となっている。--exclude-limitオプションでファイル数を変更できる。

② .rubocop_todo.ymlファイルを編集していく

チームのコードスタイルにあっている設定の場合は、.rubocop_todo.ymlの設定を.rubocop.ymlに移動させる。修正すべき部分はコードを編集し、.rubocop_todo.ymlファイルの設定項目を削除していく。
該当コードを修正後rubocop --regenerate-todoを実行して、rubocop_todo.ymlファイルを更新していく方法でも可能。

③ .rubocop_todo.ymlファイルの全ての設定項目を削除する

②を繰り返し、.rubocop_todo.ymlファイルの全ての設定項目が削除されたらRuboCopの導入が完了になります。

参考

【Rails】RuboCopの基本的な使用方法と出力の見方
Automatically Generated Configuration
パーフェクト Ruby on Rails 【増補改訂版】

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