VSCode Remote SSHで別Shellからファイルを開く

1 min read読了の目安(約1000字

VS CodeでのRemote Developmentは便利ですね。

私の現在の開発環境はこうなっています。

  • Windows上のVirtualBoxでUbuntuをheadless modeで立ち上げ
  • Windows Terminalからssh
  • Windows上のVSCodeからRemote SSHでつないで開発

このような環境では、SSHで入っているShellから、VSCode上でファイルを開きたいことが多々あります。
VSCodeのTerminalからだと code コマンドで開くことができるのですが、別Shellからでは使えません。

そこでこのようなscriptを用意し、日々使っています。

#!/usr/bin/env bash

CLI=`ls -t /run/user/$UID/vscode-ipc-* | head -n 1`
export VSCODE_IPC_HOOK_CLI=${CLI}

EXE=`ls -t ~/.vscode-server/bin/*/bin/code | head -1`

${EXE} $*

例えば remote_code.sh というファイル名をつけておき、 remote_code.sh ~/bin/remote_code.sh と開きたいファイルを引数に渡せば、
現在開いているVSCodeのRemote SSH上で指定したファイルを開けます。

注意点としては、以下の2点です。

  • Remote Connectionがないと開かない (あたりまえ)
  • Remote Connection起動後2,3秒待つ必要がある

解説

Remote SSHでは、入った先の環境の ~/.vscode-server/bin/ 以下に実行用ファイルがコピーされます。しかし、別シェル上で素直に実行すると

Command is only available in WSL or inside a Visual Studio Code terminal.

と怒られます。これは、VSCode側との通信に VSCODE_IPC_HOOK_CLI で指定されたsocketファイルを使っていて、この環境変数がないと怒られる、というわけです。
~/.vscode-server/bin/ やsocketファイルはバージョンごとに複数存在していて、 ls -t で一番新しいファイルを選んでいます。