4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

VSCodeで、ローカルのcodeコマンドと、RemoteSSH時のcodeコマンドを共存させる方法

Posted at

何を言ってるんだ?

タイトルが何を言ってるかわからないと思うので、まずは環境の説明。

私は自宅のマシン(macOS)をモリモリスペックにして自宅ではそのマシンを、外出先ではノーパソからRemoteSSHを使って作業をしています。
作業環境を引き継げたり、外出先でコンパイルしてもバッテリー消費しなくて済むなどメリットがいろいろあります。
image.png

そしてVSCodeにはcodeというCLIからVSCodeを開けるコマンドがあるのですが、これが実は2種類存在します。

path 説明
ローカルのcodeコマンド
/usr/local/bin/code
ローカル環境で使うためのcodeコマンド。多くの人はこれ使ってるはずimage.png
RemoteSSH時のcodeコマンド
~/.vscode-server/bin/<hash>/bin/code
リモート接続時に使うためのcodeコマンド。RemoteSSH時に使うことで、クライアントPCのVSCodeでワークスペースを開いてくれる。
https://code.visualstudio.com/docs/remote/ssh#_opening-a-terminal-on-a-remote-host)

何が問題なの?

で何が問題なのかというと、ローカルのcodeコマンドをインストールしてしまうと、/user/local/bin/配下にインストールされるためエイリアスが上書きされます。
そうするとRemoteSSHで接続中にcodeコマンドを実行してもローカルのcodeコマンドが実行されてしまい、クライアントにしているノーパソのVSCodeには何も表示されません。

RemoteSSHは、サーバー(ワークステーションなど)のワークスペースを直接編集したりするのが一般的な使い方なんだと思います。
しかし私の場合はデスクトップマシンなので、リモート環境がローカル環境にもなり得るちょっと複雑な環境です。

デスクトップPCを直接使っているときはローカルのcodeコマンドを、RemoteSSHしているときはリモート用のcodeコマンドを実行してほしい!

というのが今回の問題です。

解決策

ローカルで使うcodeコマンドはアンインストールして、.zshrc.bashrcなどに以下のコードを追加するだけ。

# codeコマンドがRemote SSHと競合しないように、`/usr/local/bin/`にはインストールせず、環境分岐させる
if [ -z "$VSCODE_IPC_HOOK_CLI" ]; then
  # ※macOSの場合↓↓↓
  alias code='/Applications/Visual\ Studio\ Code.app/Contents/Resources/app/bin/code'
fi

/Applications/Visual\ Studio\ Code.app/Contents/Resources/app/bin/code は、ローカルで実行するcodeコマンドのオリジナルです。

RemoteSSH時に使われる環境変数 $VSCODE_IPC_HOOK_CLI が存在しない場合、すなわちローカルで実行するときは、アプリケーション内にあるcodeコマンドを直接実行します。

こうすることで/user/local/bin/にcodeコマンドを置く必要がなくなり、エイリアスが上書きされるのを防げます。

終わり

実にニッチな要望だと思うのですが、備忘録として残しておきます。

次はiTermみたいなターミナルからcodeコマンド使いたい。昔からGithubとかで議論されているけど、良さげな方法が見つかっておらず……。

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?