0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

IntelliJ 2022 以降では Gemfile に RuboCop が無いと使えない

Last updated at Posted at 2022-08-24

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つの案を思いついた。

  1. IntelliJ 2021 に留まる
  2. 諦めて各プロジェクトの Gemfile に RuboCop を記載する

しばらくは 案1 で凌いでいたが、やはりエンジニアたるもの、常に新しいバージョンを使用するべき、という考えから 案2 に移行した。

Rubocop 関連 gem をまとめて Gemfile に記載する

自分は、本体の RuboCop 以外に、 extension の RuboCop Minitest や RuboCop Performance なども使っているので、それらの gem をいちいち全てのプロジェクトの Gemfile に書くのは少し面倒だと思ったので、一箇所にまとめて書いておいて、各プロジェクトの Gemfile からそれを読み込むようにした。
結局大したことはしていないが、多少は省力化できたと思う。

  1. Gemfile_rubocop を用意する

    Gemfile_rubocop
    source 'https://rubygems.org'
    
    gem 'rubocop'
    gem 'rubocop-minitest'
    gem 'rubocop-performance'
    gem 'rubocop-rails'
    

    上記ファイルはホームディレクトリ配下など、わかりやすいところに置いておく。

  2. 各プロジェクトの Gemfile の末尾で eval_gemfile する

    各プロジェクトのGemfile
    ...(truncated)...
    
    eval_gemfile File.expand_path('~/Gemfile_rubocop')
    

これで IntelliJ 2021 の頃と同じく RuboCop が使えるようになった。
こうすると Gemfile_rubocop に他の RuboCop extension を追加した場合も、全てのプロジェクトで使用できるという利点もある。

補足

なぜか IntelliJ の設定で RuboCop の Inspections が無効になっていたので、それのチェックを入れ直した。
(久々にこの設定をいじったので、どこにあるか探すのに少し手間取った。)
inspections_0823114227.png

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?