とことんDevOps | 日本仮想化技術のDevOps技術情報メディア

DevOpsに関連する技術情報を幅広く提供していきます。

日本仮想化技術がお届けする「とことんDevOps」では、DevOpsに関する技術情報や、日々のDevOps業務の中での検証結果、TipsなどDevOpsのお役立ち情報をお届けします。
主なテーマ: DevOps、CI/CD、コンテナ開発、IaCなど
読者登録と各種SNSのフォローもよろしくお願いいたします。

負荷が嫌なのでRemote DevelopmentからSSH FSに乗り換えた

Xなどで最近ちょっと騒がれている、VSCodeのRemote Development(の特にRemote SSH)が共同で開発していると負荷が非常に高い問題について、今日は話そうと思います。

Xのトレンド:

https://x.com/i/trending/2010912519032820201

Xのトレンドの中で参照されているQiitaの記事:

qiita.com

ざっくりとした概要

この問題、なんとなくRemote Developmentが発表されていた頃にも騒がれた気がしますが、VSCodeで接続してリモートサーバー上でVSCodeの拡張機能などを使って便利に開発したりファイルのやり取りができるので便利な反面、それを実現するためにRemote SSHでコネクションを張るとVSCode Serverというサーバーが各ユーザーディレクトリー上に展開されてリモート環境上で動くので、同時に開発している人が多いとちょっとしたDoS攻撃をサーバーにされていると同じ状態になるということみたいです。

これは公式の情報VSCodeのRemote Developmentのページに貼られているアーキテクチャーを示す図ですが、見ればわかるようにリモートサーバー上で「VSCode Server」という環境が動いています。これは接続したユーザーごとに動くサーバーなので、少数なら何とかなるけど多数接続だと負荷がすごくなるのは設計上仕方ないです。

Xの投稿の中には開発サーバーは本番サーバーと比べてシステムリソースを絞っているので、そんな負荷が来ると困るという声もありました。さすがにメモリー2GBだ、CPUはシングルコアだとかいうのは、今時64bit OSを動かすのに絞りすぎだろうとは思いますけどね。

VSCodeのRemote Developmentを使って開発すると決めたのであれば、同時にそのサーバー上のサービスを利用するユーザーを考慮してリソース割り当ての設計をするのが重要だと私は思います*1

少数で開発するとか個人で使う程度なら許容範囲かなあとは思うものの、確かにそんな負荷が高いものを大人数で使われたら困るよなあと思って調べたら、ものすごくよろしそうな新たな拡張機能を見つけました。それが「SSH FS」です。

marketplace.visualstudio.com

このアドオンはマイクロソフトが提供する「Remote SSH」と異なり、SSHでコネクションを張ってSSH FSで指定したルートディレクトリーをマウントできます。SSH以外の余計なサーバーは動かない*2ので、VSCodeの余計なウィンドウを複数開く必要がなくて良いです。

ローカル上でファイルを開いているような感覚で開発を継続できます。 ちょっと操作が変わるものの、SSH FSのコネクションから「Open remote SSH Terminal」を実行すると、リモートサーバー上のターミナルを開けます。

設定はjsonファイルを書いて設定する方法もありますが、一応こんな設定画面も用意されています。どちらか好きな方でどうぞという感じみたいです。

ただ1点だけ、この方法だと解決できないのが右上の実行ボタンを使ってアプリを実行するという操作ができないということです。ただ先に説明したようにリモートサーバー上のターミナルは開けますから、あとはコマンドで何がしすれば何とかなるでしょう。Pythonであればリモートサーバーのターミナルを開いて、Pythonの仮想環境を作ってモジュールをインストール、動作確認する感じです。手動で作業するのが面倒であればスクリプトとかを作っておけばいいでしょう。

便利な面も

Remote SSHと比べてSSH FSを使った場合、ファイルはローカルのファイルを使っているのと同じような使い勝手になるため、VSCode上でGitHub CopilotやClaude Code、Google Geminiといった拡張機能を導入して直接対話をしながら開発ができるのはメリットな気がします。 Remote SSHだとちょっと面倒なんですよね。ローカル開発しているときのファイルのやりとりとかリモート接続先でAIを使う時って。

後実は最近ものすごくCPUコアやメモリーを使うアプリケーションを動かすことがあって、それをRemote Development拡張機能を使ってRemote SSHでコネクションを張って作業をしていたらやたらRemote SSHが再接続しているのに気がつきました。どうやら負荷が高すぎてRemoteのVSCode Server自体がクラッシュしているようなのですよね。これはダメだと思って探していたら、表題の件のXの投稿を見つけた次第です。

負荷に対する対策に関してはサービス提供者側や上の人が決める話なので置いておくとして、私が普段使う程度ならSSH FSで良さそうだったので、私は以上の理由で乗り換えました。

1点だけ注意点

1点だけ注意点があって公開鍵認証をおこなう場合は、古いRSA形式の鍵を作成する必要がありました。これはSSH FSの実装の違いが原因であると思われます。専用のカギを作ってあらかじめリモートサーバーに登録しておきましょう。

ssh-keygen -t rsa -b 4096 -m PEM -f ~/.ssh/vscode-sshfs-rsa -C "VSCode SSH FS用"

まとめ

最後に、ここまでVSCode、VSCodeと書いてきましたが、これと同じことはVSCodeの各種クローンにSSH FSという拡張機能があれば同じように作業できると思います。私は普段はVSCodiumでこの「SSH FS」を使っています。

marketplace.visualstudio.com

あとは忘れずに.vscode-serverディレクトリーと、もう使わないならRemote SSH拡張機能のアンインストールをお忘れなく...

*1:要するにそれ相応の性能のサーバーを用意しろって話です。カツカツな環境で使ったら落ちるのはもはや当たり前

*2:一方、Remote SSHはNodeベースのVSCode Serverが動きます。つまり、リモートサーバー上でもVSCodeが動くわけです。たぶん接続したユーザーの数だけ