正しい RuboCop が使用されない問題
Ruby を書いている人でエディタに RuboCop による構文チェックをさせている人は多くいるかと思います。
そして Gemfile で RuboCop を管理しているプロジェクトもあるかと思います。
そんな時に bundle install --path vendor/bundle -j4
と vendor/bundle に RuboCop をインストールしても、エディタにはわかりません。
なのでエディタ内ではグローバルに RuboCop にインストールされている場合、そちらを使ってしまいます。
解決法
そんな時に、エディタに正しい RuboCop を使わせる方法です。
まず、bundle install --path vendor/bundle -j4
ではなく、bundle install --path vendor/bundle --binstubs vendor/bundle/bin -j4
で bundle install しましょう。
これは実行ファイルを vendor/bundle/bin に用意するということです。
そして direnv をインストールしましょう。
これは .envrc ファイルが置かれているディレクトリに入っている時だけ .envrc を元に環境変数をすり替えたりするものです。
ubuntu であれば、sudo apt-get install -y direnv
でインストールすることができます。
インストール後、cd project_root_directory
direnv edit .
とするとエディタが立ち上がります。
そして、PATH_add vendor/bundle/bin
と書き込んで保存しましょう。 .envrc というファイル名で保存されます。
これで、 project_root_directory ディレクトリ内にいる間は環境変数 PATH に $PWD/vendor/bundle/bin が追加されるようになります。
この段階で bundle exec
を前に追加しなくても rubocop
と呼ぶだけで、 bundler によってインストールされた RuboCop が呼び出されるようになります。which rubocop
で確認できます。
project_root_directory から出ると、また以前の RuboCop が呼び出されるようになります。
vim や emacs の場合は .envrc が置かれているプロジェクトルートディレクトリにいる状態で立ち上げれば、 bundler でインストールされた RuboCop を使うようになります。
visual studio code では direnv という名のプラグインを使用すると、プロジェクトルートディレクトリに .envrc ファイルが存在すると読み込んでくれるようになります。
atom などでも同じようなプラグインがあるような気がします(ない可能性も)。