LoginSignup
5
4

More than 5 years have passed since last update.

bundle install した RuboCop を vim (や他のエディタ)で使う

Last updated at Posted at 2017-02-15

最初に

この記事は vim で構文チェックを使えるようにする方法を書いたものではありません。
構文チェックの際にする RuboCop をグローバルにインストールしたものから、 bundler でインストールしたものへ変更する方法を書いたものです。

プロジェクトの RuboCop が使用されない問題

Ruby を書いている人でエディタに RuboCop による構文チェックをさせている人は多くいるかと思います。
そして Gemfile で RuboCop を管理しているプロジェクトもあるかと思います。
そんな時に bundle install --path vendor/bundle -j4 と vendor/bundle に RuboCop をインストールしても、エディタは認識してくれません。実際にエディタ内ではグローバルにインストールされている RuboCop を使ってしまいます。
RuboCop のバージョンが多少違っていても大きな問題になることはあまりないかもしれませんが、 Gemfile.lock で指定されているバージョンを使うほうが何かと気分はいいものです。

解決法

bundle install のオプションを変更

そんな時に、エディタにプロジェクト指定の RuboCop を使わせる方法です。
まず、
bundle install --path vendor/bundle -j4
ではなく、
bundle install --path vendor/bundle --binstubs vendor/bundle/bin -j4
で bundle install しましょう。
これは実行ファイルを vendor/bundle/bin に用意するということです。

direnv をインストール

そして direnv をインストールしましょう。
これは .envrc ファイルが置かれているディレクトリに入っている時だけ .envrc を元に環境変数をすり替えたりするものです。
ubuntu であれば、
sudo apt-get install -y direnv
でインストールすることができます。
その後、 ~/.bashrc の最後に eval "$(direnv hook bash)" と追記します。

.envrc ファイル作成

インストール後、
cd project_root_directory
direnv edit .
とするとエディタが立ち上がります。
そして、
PATH_add vendor/bundle/bin
と書き込んで保存しましょう。 .envrc というファイル名で保存されます。
これで、 project_root_directory ディレクトリ内にいる間は環境変数 PATH に $PWD/vendor/bundle/bin が追加されるようになります。

bundle exec なしで gem を使用可能に

この段階で bundle exec を前に追加しなくても rubocop と呼ぶだけで、 bundler によってインストールされた RuboCop が呼び出されるようになります。
which rubocop で確認できます。
project_root_directory から出ると、またグローバルの RuboCop が呼び出されるようになります。

vim や emacs のような CUI エディタはこれで終わり

vim や emacs の場合は .envrc が置かれているプロジェクトルートディレクトリにいる状態で立ち上げれば、 bundler でインストールされた RuboCop を使うようになります。

vscode や atom のような GUI エディタはもう一仕事

visual studio code では direnv という名のプラグインを使用すると、プロジェクトルートディレクトリに .envrc ファイルが存在すると読み込んでくれるようになります。
atom などでも同じようなプラグインがあるような気がします(ない可能性も)。

5
4
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
5
4