WSL + Visual Studio Code の環境で Rubocop (ruby-rubocop) を使う方法

結論

こちらをご覧ください。

説明

以下のとおりにします。

1. WSL 側で Rubocop をインストールする

まずはインストールしましょう。

2. rubocop.bat を作成する

ruby-rubocop 拡張機能では Windows 環境で実行する Rubocop のファイル名は rubocop.bat で固定されています*1。したがって、WSL 環境で実行する場合であってもファイル名は rubocop.bat にする必要があります。

rubocop.bat の内容は冒頭の Issue にあるとおりです。rbenv を使用している場合は以下のようになります。

@echo off
wsl ~/.rbenv/shims/rubocop $^(echo '%*' ^| sed -e 's^|\\^|/^|g' -e 's^|\^([A-Za-z]\^)\:/\^(.*\^)^|/mnt/\L\1\E/\2^|g'^)

sed の部分は In the end, I needed to convert Windows path in args into WSL path. のために書いてます

3. 作成した rubocop.bat を任意の場所に置きその場所を VSCode で指定する

作成した rubocop.bat は Windows 上の任意の場所において構いません。たとえば C:\PATH\TO\rubocop.bat に置いたとしましょう。

ファイルを置いたならばその場所を Visual Studio Code の設定で指定します。Rubocop: Execute Path にパスを設定します。ここで注意するのは、パスの最後のスラッシュ(¥マーク)が必須だということです。

f:id:gregminster:20190105213642p:plain

4. 適当な .rb ファイルを作って正しく実行するか確かめる

上記までできたならば Rubocop が動作するはずです。適当な .rb ファイルを作り、規約に沿わないような記述をしてみましょう*2。そのときに赤い波線が引かれれば正しく動作しています*3

問題点

「3.」で rubocop.bat の場所をVSCode 内に書き込むところがありますが、これはもちろん他のOSでは存在しない場所になりますので他のOSの環境ではエラーになります。私は Settings Sync という拡張機能を使用していて、これは設定ファイルを同期する拡張機能なのですが、これを用いているとWindows以外の環境ではエラーの設定を同期してしまいます。

これを解決するためには、「ユーザー設定」ではなく「ワークスペース」単位で設定を逐一行う必要があります。「ワークスペース」の設定は「ユーザー設定」を上書きします。その設定内容は FOOBAR.code-workspace ファイルに書かれます。

f:id:gregminster:20190105214557p:plain

すこぶる面倒ですが、そもそもかなり無理矢理なことをやっているので、これぐらいは容認せざるを得ないかなと思います。

*1:Windows ネイティブ の Ruby を入れるとこれが実行ファイルになる

*2:タブ幅がスペース4つなど

*3:そもそも正しく動作しない場合は真っ先に警告が出ますが……

Powered by はてなブログ