2024/07/22

VSCodeのRemote Tunnelを一瞬試した

普段はVSCodeのSSHを使ったリモート開発環境で開発しています。

先週末、出先で急に空き時間が出来たので、さぁなんか滞っている作業(仕事じゃなくて趣味のほう)をやるぞ〜と思ったのですがあいにく手元にPCがない…。そんなときでも最低減の対応ができるようにiPad miniだけ持っているので、iPad miniで出来ることをやるか〜と考えたときに、そういえばVSCodeってWeb版のvscode.devがあるじゃんというのを思い出しました。

とはいえ、Web版のvscode.devはSSHを使ったリモート開発環境への接続はたしかできなかったはず…と思いながらとても久々にvscode.devを開いたら、リモートエクスプローラにRemote Tunnelの選択肢がありました。そういえばそんなのありましたね! ということで、iPad miniからまずサーバにSSHして、VSCodeのCLI版をLinuxにインストールして code tunnel コマンドを実行してGithubアカウントを紐付けて…とやって無事 vscode.dev からRemote Tunnelで普段のリモート開発環境につながりました。

というところで空き時間が終わってしまったので(あるある…)出先でそれ以上やるのはやめたのですが、帰ってからも「またこういうこともあるかもなぁ」ということでVSCode CLIをsystemdのユーザサービスで登録して常時起動するようにして…というのをやりました。

とりあえずVSCodeのCLIはこの手順でインストールしました。/usr/local/bin におくのでrootで実行です。

# wget -O vscode-cli.tar.gz  "https://code.visualstudio.com/sha/download?build=stable&os=cli-alpine-x64"
# tar zxvf vscode-cli.tar.gz
# rm /usr/local/bin/code
# mv code /usr/local/bin/code

code tunnelを実行してGithubアカウントなりMicrosoftアカウントなりでDevice Loginをしてアカウントとリモート開発環境を紐付けます。うまくいってれば ~/.vscode/cli/code_tunnel.json とかができているはず。

で、code tunnelコマンドを常時起動しておきたいのですが、rootとかで動かすのもなあ…ということで systemctl --user を使ってユーザ権限で動かすことにしました。Zennにある[Linux] systemdのユーザインスタンスで、サーバ起動後にユーザ固有のジョブを自動実行するという記事を参考にします。まず ~/.config/systemd/user/code-tunnel.service を作ります。

[Unit]
Description=VSCode Tunnel
After=network.target

[Install]
WantedBy=default.target

[Service]
Type=simple
ExecStart=/usr/local/bin/code tunnel
WorkingDirectory=/home/{{ACCOUNT}}
Restart=always

あとは記事の手順通りにやっていけばOKです。

$ systemctl --user daemon-reload
$ systemctl --user enable code-tunnel.service
$ systemctl --user start code-tunnel.service

うまく起動していれば systemctl --user status code-tunnel.serviceActive: active (running) になっているはず。VSCodeのRemote Tunnelにでてくるはずです。

そんなわけで、せっかくSystemdの設定までやったんだから普段使いの開発もRemote SSHからRemote Tunnelに変えちゃうか! と思って週明けの今日すこし試したのですが、SSHのほうがやっぱりいいな! という感じでした。この2つはアーキテクチャ的な違いがあって、SSHの場合はVSCodeとリモート開発環境がSSHで直結しているのでレイテンシーがよいです。Remote Tunnelの場合は間にMSのサーバが挟まっていてそこを中継しているというのがレイテンシー的に不利。Remote Tunnelはリモート環境から中継サーバに接続しにいくので、ポートを晒さなくていいというのはあります。

また、Remote SSHの場合はVSCodeのUIはローカル側で処理されるが、Remote TunnelはUIも含めてリモートで処理されるのでそのぶんもっさりするみたいなのもあるようです(入力した文字は通信中灰色になり、その後黒くなります。moshみたいなもんだ)。そのアーキテクチャの違いもあってWeb版のVSCodeでも使えるというのはあるので、iPadOSで使うため、という用途にはRemote Tunnel一択になりますが普通のPC/MacでやるならSSHのほうがパフォーマンス面で有利だなあということが分かりました。

自分の場合はリモート開発環境はEC2になっているので、PC/Macからの接続はSession Manager経由のSSH接続にしてるのと、iPad miniからはVPN接続必須にしてVPN経由の出口だけに22番ポートを空けているのでインターネットフルオープンSSHはもう使ってません。とはいえ意外とSSHはなかなか捨てられないものです。

うされもん @acidlemonについて

|'-')/ acidlemonです。鎌倉市在住で、鎌倉で働く普通のITエンジニアです。

30年弱住んだ北海道を離れ、鎌倉でまったりぽわぽわしています。

外部サイト情報

  • twitter
  • github
  • facebook
  • instagram
  • work on kayac