Windows上のVSCode workspaceファイルからRemote WSL環境に直接入る際のメモ
要約
remoteAuthorityプロパティでリモート環境を指定した.code-workspaceファイルではGitのpath設定が適切にできなかったため、バッチファイルで無理やり解決しました(力技)
やりたいこと
WSL経由で複数の開発フォルダを見る設定のworkspaceに、Windows環境から一発で入るのがゴール。
もちろんWSLに入ってからそのようなworkspaceファイルを開けば済むものの、一度WSLに入らなければいけないという一手間をどうにか省いてWindows環境からワンクリックで一足飛びできないかという話。
参考になりそうな記事
通常のworkspaceファイルと明確に異なる点として、
"remoteAuthority": "wsl+<distro name>",
といった形式のプロパティを追加すること(<distro name>は各々のWSL環境に合わせて埋める)。このプロパティ自体ググっても情報はあまり出てこないが、
で取り上げられているように、飛びたい先の環境がSSHやDevContainersなどでもダイレクトに行くことができる。問題点
実際に上記の記事にあるような設定を書いた.code-workspaceファイルをWindows環境からクリックすると、WSL環境に入った上で所望のworkspaceを開いたVSCodeのウインドウを得られる。
……が、ここでサイドバーのSource Controlを確認すると何故かgitのstatusが反映されておらず、initializeせんかい!と言われてしまう。色々と確認していくと、
- WSLに一度入ってから同様のフォルダ構成のworkspaceを開くと、Source Controlは既存のgit statusを取得できる
- このとき実行されているgitのバイナリはWSL内のもの
- もちろんwhichコマンド等でgitのフルパスを確認するとWSL内のそれが示される
- Windows上にgitがあり、remoteAuthorityプロパティを削除したworkspaceファイルを開いてWindows環境でのworkspaceウィンドウを得た場合、Source Controlは既存のgit statusを取得できる
- このとき実行されているgitのバイナリはWindows上のもの
- Remote(WSL)レベルのSettingsにはgit pathを指定するプロパティが用意されているが、下位のworkspaceレベルにはそのプロパティがない
- なのでworkspaceファイルのsettingsにGit.path:"~"というプロパティを追加しようとしても打開策にはならない(Color Highlightがonの場合はグレーアウトするかも)
remoteAuthorityプロパティについて
何だかおま環のような気もしつつ、とりあえず先のissueをもう少しちゃんと見ていくと、
先程書いた通りSSHやDevContainersと並列でWSLが扱えるプロパティなので、まあWindows環境にWSLの諸々を書くことも当初の設計には入っていなかったのかもしれず、おそらくSettingsにあるようなプロパティのチグハグ具合に繋がるのではないか……。
結局どうしたか
.code-workspaceからではどうにもならなさそうだったので、バッチファイルを用意した。
上記の例に沿って、code --remote wsl+<distro name> /your/wsl/path/to/hogehoge.code-workspace
と書かれたバッチファイル(パスは各々の環境に合わせて)を実行すれば、WSL環境でgit周りがおかしなことになっていないworkspaceを開くことができた。
本質的な問題(リモート/ローカルとworkspace絡みの不一致)は解決していないのでバッドノウハウ感があるものの……とりあえず動いたのでヨシ!
Discussion