ruby

【Ruby】rubyにrubocopでlintを導入してみる

タイトルのままですが、lintを導入してみたので備忘録がてらにやったことを残しておきます。

この記事を書いたときのver

% ruby --version
ruby 3.3.0 (2023-12-25 revision 5124f9ac75) [arm64-darwin23]

% bundle list
  * rubocop (1.64.1)
  * rubocop-ast (1.31.3)
  * rubocop-capybara (2.20.0)
  * rubocop-factory_bot (2.25.1)
  * rubocop-performance (1.21.0)
  * rubocop-rails (2.25.0)
  * rubocop-rake (0.6.0)
  * rubocop-rspec (2.29.2)
  * rubocop-rspec_rails (2.28.3)

やったこと

1. install

Gemfileに下記を追記して「bundle install」。
rubocop以外はお好みで。

gem 'rubocop'
gem 'rubocop-ast'
gem 'rubocop-performance'
gem 'rubocop-rails'
gem 'rubocop-rake'
gem 'rubocop-rspec'

2. lintの設定ファイルを作成

# rubocopの設定ファイルを作成
% bundle exec rubocop --auto-gen-config

こちらを叩くと次の2ファイルが生成される。

  • .robocop_todo.yml: 無視する内容のlintを記載するファイル。
  • .robocop.yml: rubocopで適用する設定を記載

この設定ファイルを自動生成したときではその時点でlintが通るような設定になっている。
適当なrubyファイルを作ってたら「.robocop_todo.yml」にくどくどと現状のコードで間違っているlintの内容が書いてある。

また、先ほどinstallしたrubocopの拡張ライブラリを指定しておく。(好みで指定する。)

.robocop.yml

inherit_from: .rubocop_todo.yml

require:
  - rubocop-ast
  - rubocop-performance
  - rubocop-rspec
  - rubocop-rails
  - rubocop-rake

3. 間違ってるlintを直す、または不要なlintはfalseにする。

.robocop_todo.yml に記載のlintを一個一個直す。
その時に下記で自動で修正してくれるので活用する。

# lintを自動修正
% bundle exec rubocop -A

 

また、ソースコード内で指定されているlintが不要だと判断したら.robocop.yml でfalseに指定する。
例: Style/FrozenStringLiteralComment を指定しない。

Style/FrozenStringLiteralComment:
  Enabled: false

4. ゴール

最終的に.robocop_todo.yml を空にして、lintが通ってたらおわり。

# 現在のlintを確認
bundle exec rubocop

おわり

初めてrubyのlintに触ったのですが指定多いと感じました。めちゃドバドバ指摘されてびびった。
ちょっと調べてみたらプロジェクトごとになんらかfalseにしている感じっぽい。
うーん、なんか不要そうなニッチなlintはライブラリの中にひとまとめにしてそもそもインストールするか選ぶ的な感じにしてほしい気がしないでもない。( ・∇・)

あと一番わかりにくいと思ったのが「.robocop_todo.yml」の存在。。
これtodoというか、errorとかの方が名前適切じゃないか?todo言われても間違ってる設定ってわかりにくい気が。( ・∇・)