作成日: 2025-12-09 04:45:27
更新日: 2025-12-09 09:47:04
333 views
遅いリモートでも快適に VSCode で開発する
この記事は「UEC Advent Calendar 2025」の 7 日目です。
遅刻した言い訳
風邪ひいてましたごめんなさい。
昨日は AviUtl か Blender のスクリプトの話だったそうです。私も AviUtl のスクリプトはよく書いていたので楽しみに待ちたいと思います。
明日は AI イラストの見分け方だそうです。私は AI イラストを見分けるのが得意と自負しているのですが、最近の AI はかなり精度が上がってきているので、明日の記事で新しい知見を得たいと思います。
tl;dr
mutagen はいいぞ。でも積極的には勧めない。
背景
弊学の学生の皆さんは課題でコーディングすることが少なからずあると思います。 そのような時、どのような環境でコーディングしていますでしょうか?
私は、ほとんどの場合、自分の MacBook を使用してコーディングしています。 大学の慣れていない環境よりも、自分の慣れた環境の方が快適というのは言うまでもありません。 中には大学のマシンに構築された環境でないと動作しないようなコードを要求される場合があります。 そのような場合も、基本的には自身の MacBook に同様の環境を再現することを試みてきました。
しかし、ある時この方法に限界が来てしまいました。 レイトレーシングの課題です。16 台ものマシンを ssh で接続し、OpenMPI を使用して並列計算をすることを求められました。 流石に、MacBook を 16 台買うわけにはいかないので、ついに諦めて大学のマシンを使用することにしました。
大学のマシンで開発することの問題点
私は CS プログラム所属です。MICS 以外の人が使う環境の事情は分かりません。
大学のマシンは「低スペック」と思われがちですが、実は一概にそうとは言えません。 学生の演習用に用意されているマシンは、実はそこそこの CPU や GPU を搭載しており、スペック自体は決して低くありません。 メモリも、開発する分には十分な量が搭載されています。
絶望的なのは IO 性能です。 何らかのネットワーク経由のファイルシステムを使ってるはずなので、まあ仕方ないような気もしますが。
大学のマシンで開発する方法はいくつかありますが、この問題点のせいでどれも快適ではありません。
- マシン内の VSCode を使用する
- 言語サーバーの応答が悪い
- Vim を使う
:wするたびにフリーズする
- SSH 接続してローカルの VSCode で開く
- 言語サーバーがリモートのままなので結局遅い
対処療法
私は全ての課題レポートを GitHub で管理しています。そこで、Git を活用することでこの問題に対処しました。
- ローカルで開発
- push
- 大学のマシンで pull
- コンパイル、デバッグ、実行
この方法であれば、大学のマシンの IO 性能に悩まされることなく開発できます。
根本解決
この方法は確かに確実ですが、次第に軽微な修正→push→pull→動作確認のサイクル増えていき、効率が悪くなっていきました。
そこで、mutagen を使用することにしました。
mutagen は、指定したファイルをローカルとリモートで双方向に同期するツールです。 今回は、ssh を使用して大学のマシンにあるソースコードとローカルのソースコードを同期するように設定しました。 ローカルでファイルに変更が入れば自動的に大学のマシンに反映されると言う具合です。 反映後に大学のマシンでコンパイル、デバッグ、実行を行います。逆に、大学のマシンでファイルを変更した場合も自動でローカルに反映されます。
この方法はあまり大勢の人がやると大学のネットワークに負荷がかかりそうなので、注意してください。 何かあっても責任は負いません。
具体的な運用
コーディングを始める前に、以下のコマンドを実行して同期セッションを開始します。
mutagen sync create <ローカルのディレクトリ> <リモート名>:<リモートのディレクトリ> --ignore-vcs --name=<セッション名>
これにより、mutagen が自動で ssh による接続を確立し、双方向同期が開始されます。セッション名を指定しておかないと、後から管理が大変なので注意してください。
開発中は、先ほど決めたセッション名を指定して、ローカルの適当なターミナルでモニターを表示しておきます。
mutagen sync monitor <セッション名>
これにより、同期の状態をリアルタイムで確認できます。ファイルの同期は即時とはいえ、(特にリモート→ローカルは) 数秒かかるので、同期が完了したかどうかを確認するのに便利です。
終了後は、以下のコマンドでセッションを破棄します。
mutagen sync terminate <セッション名>
特に、開始コマンドについては、毎回打つのが面倒なので、スクリプトにまとめておくと良いでしょう。
まとめ
mutagen を使うことにより、開発環境は完全にローカルにありながら、大学のマシンでリアルタイムのデバッグをしながらの開発が可能になりました。
基本的には自身のマシンに開発環境を構築するのが一番快適で、勉強にもなるのでおすすめです。 ただ、大学にしかないリソースを活用する必要がある場合などには、今回紹介した方法を試してみてください。