vscode で WSLの ruby を使う。
vs code をちょっと使おうと思うと、めっちゃめんどくさいのが wsl 経由でコマンドを使うことですね。
vscode のWSL環境内の実行に慣れていれば、大丈夫なはず。
通常であれば、VS CodeをWSL内部環境で起動して終わり。
今回は、敢えて通常のVS Code(Windowsワールド)からWSLのRubyを叩くことを通して、裏世界(WSL)とうまく連携ととっていく。
VS Codeが環境別の起動をしないようにして通常のWindowsのエディタと同じようにWSLを使う設定を模索してみる。
最初に知っていおく WSLワールドとcmd.exe ワールド
WSLとWindowsの異世界を相互に使う方法を知っておく。
Visual Studio Code は Windows側にあるので、Windowsのパスで実行される。ruby や php や python などは、 windows側か、wsl 側にインストールする。
ruby などコマンドパス設定をすれば動くはずなんだけど。
リモート起動しなくても、ruby やpython の補完などなら、コマンドのパス設定をすれば動くはずなんだけど。
どうもうまくいかないので、状況整理して動かしてみた。
WSL ruby を cmd.exe から呼び出す。
wsl 版 ruby wsl にインストールしたものは、Windows側から次のように実行される。
wsl --exec ruby -v wsl --exec python -V wsl --exec php -v wsl --exec php -v wsl --exec bash --version wsl --exec bash -c "/bin/echo 1;"
実行例
たとえば、ruby を実行するときには、この様になる。
C:\Users\takuya>wsl --exec ruby -v ruby 2.5.5p157 (2019-03-15 revision 67260) [x86_64-linux-gnu]
逆もできる
逆もやっておく、WSLからWindows世界のコマンドを実行する。
cmd exe などWindowsのコマンドをWSLの世界から呼び出すこともできる。
takuya@wsl$ cmd.exe takuya@wsl$ cmd /C start ping 1.1.1.1
code コマンドを、wsl 側から 実行
WSL の世界からWindowsにあるCodeを起動する。
$ which code /mnt/c/Program Files/Microsoft VS Code/bin/code
visual studio code も、wsl とWindows(ローカル)に分かれる wsl 側から visual studio code は次のように呼び出される。
wsl / vscode で ruby の設定をする。
visual studio code を WSL から使ってインストールする。
code --install-extension castwide.solargraph code --install-extension rebornix.ruby
wsl 側から使うときは、wsl 側からコマンドを実行する。
通常のwindowsから vscode のruby を設定をする。
code --install-extension castwide.solargraph code --install-extension rebornix.ruby
そのままだと動かない。
ruby の solargraph を使う設定(ワークスペースへ)
solargraphを、gem インストールして上げる必要がある。gem を bundle でインストールするので「プロジェクト」のbundle でやる
ワークスペースで使うだけでなので、ワークスペースに全てをインストールする方針。
bundle config set path 'vendor/bundle' bundle init bundle add solargraph -g development bundle install
wsl にある。bundle をwindowsから呼び出す。
C:\Users\takuya>wsl --exec bundle -v Bundler version 1.17.3
wsl bundle を windows から呼び出しチェック
windows側から wsl にあるruby/bundle経由で solargraphを 起動してみる。
solargraph がインストールされていて、windows側から起動できる状態であるとわかる。
vscode に設定する。
vscode は windowsから実行されるので、 bundle のパスがわからないので、wsl 経由で呼び出してあげる。
ruby を使うのはワークスペースなので、設定は ワークスペースで。
先程確認した、wsl -exec bundle
を vscode で設定
{ "solargraph.bundlerPath": "wsl --exec bundle", "solargraph.useBundler": true }
動いた
https://blog.freks.jp/vscode-remote-wsl-boot-error/
.vscode のフォルダを削除してあげたら動いたよ。
appdata フォルダを丸コピー
WSL側にapp dataを丸コピーしてあげてもいいけど。基本的には、動くんだけど、一部で不具合が出る
その他の解決方法
WSLのリモートを接続していれば問題ない。
wsl で起動してたらこんな面倒にならない。
wsl$ code .
通常であればリモート起動をしてしまえばいいんだけど、パス設定で解決を試みたら結構沼だった。
パス設定で解決しないで、まるっとリモート側に入ることがVS Codeの魅力なんだなと改めて実感する。