IntelliJ の RuboCop 統合機能
IntelliJ には RuboCop との統合機能があり、 RuboCop 的にまずい部分をコードエディタ上にハイライトで表示してくれる。
https://pleiades.io/help/idea/robocop.html
IntelliJ IDEA は RuboCop(英語) との統合をサポートしており、コードエディターなどで IDE 内でその違反を直すことができます。
IntelliJ 2021 までは、RuboCop が対象プロジェクトの Gemfile に記載されていなくても使用できたのだが、
IntelliJ 2022.1 くらいから、 Gemfile に記載していないと使用できなくなった。
なんで使えなくなったの?
このあたりの経緯は YouTrack のこの issue を見るとなんとなくわかる。
Rubocop should run on bundler exec
if available
複数のバージョンの RuboCop がシステムにインストールされている場合、どのバージョンの RuboCop が使用されるのかが曖昧で、そのために問題が発生するケースがあったらしい。
そのため、RuboCop を使用する際は、常に bundle exec rubocop
が実行できるように、 Gemfile に記載することが必須となった模様。
しかし、チームで開発しているプロジェクトの場合、チームやチームリーダーの意向で RuboCop が導入されていないが、個人的に RuboCop を使用したい、というケースは往々にしてあるのでは無いかと思う。(実際自分がそうなのだが)
また、 OSS プロジェクトの開発でも似たようなケースが発生することがある。
自分と同じ様に感じている人はいるようで、 Rubocop doesn't work unless added into Gemfile という issue が立てられているが、
State が As designed (仕様です) になっているので、受け入れるしか無さそうだ。
どうするか
下の2つの案を思いついた。
- IntelliJ 2021 に留まる
- 諦めて各プロジェクトの Gemfile に RuboCop を記載する
しばらくは 案1 で凌いでいたが、やはりエンジニアたるもの、常に新しいバージョンを使用するべき、という考えから 案2 に移行した。
Rubocop 関連 gem をまとめて Gemfile に記載する
自分は、本体の RuboCop 以外に、 extension の RuboCop Minitest や RuboCop Performance なども使っているので、それらの gem をいちいち全てのプロジェクトの Gemfile に書くのは少し面倒だと思ったので、一箇所にまとめて書いておいて、各プロジェクトの Gemfile からそれを読み込むようにした。
結局大したことはしていないが、多少は省力化できたと思う。
-
Gemfile_rubocop
を用意するGemfile_rubocopsource 'https://rubygems.org' gem 'rubocop' gem 'rubocop-minitest' gem 'rubocop-performance' gem 'rubocop-rails'
上記ファイルはホームディレクトリ配下など、わかりやすいところに置いておく。
-
各プロジェクトの
Gemfile
の末尾でeval_gemfile
する各プロジェクトのGemfile...(truncated)... eval_gemfile File.expand_path('~/Gemfile_rubocop')
これで IntelliJ 2021 の頃と同じく RuboCop が使えるようになった。
こうすると Gemfile_rubocop
に他の RuboCop extension を追加した場合も、全てのプロジェクトで使用できるという利点もある。
補足
なぜか IntelliJ の設定で RuboCop の Inspections が無効になっていたので、それのチェックを入れ直した。
(久々にこの設定をいじったので、どこにあるか探すのに少し手間取った。)