1. トレンド
コンテナ化や深層学習などの技術が実用化されるに伴い、ますます多くのシーンで「リモート」開発の問題に直面しています。例えば:
-
サーバー
-
仮想マシン
-
コンテナ
そして、これらのリモート環境をローカルに再構築することは困難、あるいは不可能です。例えば:
-
特殊な設定:例えば、
.Net Framework 4.0 + MSSQL 2000が混在し、それぞれに特定バージョンのパッチが多数インストールされているようなレガシープロジェクトなど、その環境を復元することはほぼ不可能です。 -
特定のOS:例えば、Windows上でLinux上で動作するプロジェクトを開発する場合。
-
ローカル環境への破壊的影響:グローバルな設定が必要なものは、すべてを隔離することが困難です。
-
ローカルにないハードウェア能力への依存:例えば、深層学習に必要な計算能力やストレージ容量など。
理由が何であれ、ローカル環境とリモート環境の差異による様々な不便さに直面することになります。
2. 現状
リモート開発のシナリオに対しては、一般的に4つの解決策があります:
-
リモートデスクトップ:開発体験がローカル環境と大きく異なり、一部のLinuxディストリビューションではリモートデスクトップをインストールできません。
-
SSH + Vim:現代的な開発ツールほど便利ではなく、生産性に影響します。
-
ファイル同期ツール:遅く、エラーが発生しやすいです。
-
ブラウザベースのツール:ローカルのツールチェーンと組み合わせて使うのが困難です。
これらは一部の問題を解決できますが、その多くはローカル開発環境の利便性を犠牲にしています。
では、ローカル環境からシームレスにリモート環境に切り込む方法はないでしょうか?ローカルで使い慣れたフルセットのツールチェーンの恩恵を享受しつつ、同時にリモート開発を行うことはできないでしょうか?
もちろん、あります。
3. アプローチ
開発ツールの観点からは、以下の3つのサポートを提供する必要があります:
-
Windows上でのLinux開発のサポート
-
SSH接続のサポート
-
コンテナ環境のサポート
Windows上でのLinux開発については、Windows 10が2016年に Windows Subsystem for Linux (WSL) を提供しており、Windows上で直接(仮想マシンではなく)Linuxサブシステムを実行できるようになりました:
[caption id="attachment_1972" align="alignnone" width="625"]
WSL[/caption]
WSLは基本的なファイル共有をサポートしていますが、開発ツール(VS Codeなど)が直面する状況はより複雑です:
If you have Python 2.7 and Flask installed on Windows (or none at all!) and Python 3.7 and Django installed in the Linux distro, you wouldn't get proper completions or linting because VS Code was looking at the Windows versions of everything.
開発ツールは異なる環境を明確に区別する必要があります。そこで、非常に興味深いアプローチが生まれました:
We convinced ourselves that what we needed was a way to run VS Code in two places at once, to run the developer tools locally and connect to a set of development services running remotely in the context of a physical or virtual machine (for example, a container or VM).
端的に言えば、一部の(環境に依存しない)プラグインをローカル環境で実行し、別の(環境に依存する)プラグインをリモート環境(コンテナ、仮想マシン、WSL、サーバーなど)で実行させるということです。


これにより、あらゆる問題が解決されました。リモート開発をサポートしつつ、ローカルの開発体験も両立させています:
This gives you a rich local development experience in the context of what is in the remote environment.
4. VS Codeリモート開発拡張パック
VS Codeはバージョン1.35(2019/6/4)で、正式にリモート開発サポートをリリースしました:
Remote Development (Preview) available in Stable - You can now use the Remote Development extensions in Stable.
そして最新のバージョン1.36では、さらに多くの機能が拡充されました:
Remote Development (Preview) improvements - Save to local file system, drag and drop files to remotes, and more.
Remote Development 拡張パックをインストールするだけで利用できます。現在(2019/7/6)、この拡張パックには3つの拡張機能が含まれています:
-
Remote - SSH:リモートマシンや仮想マシンを開発環境として使用します。
-
Remote - Containers:Dockerコンテナを開発環境として使用します。
-
Remote - WSL:Windowsサブシステム(WSL)を開発環境として使用します。
Remote - SSH
SSHトンネルを通じてリモートマシン、仮想マシン、あるいはコンテナに接続し、そのファイルシステムへのアクセス、ターミナルの管理、アプリケーションの実行・デバッグを行います(下図参照):

具体的には、SSHベースのリモート開発サポートにより以下のことが可能になります:
-
ローカル環境のハードウェア条件に縛られない。
-
複数の異なるリモート開発環境を管理できる。
-
リモートデバッグができる。
アプリケーションはリモートで動作し、開発やデバッグはすべてローカルで行うことができ、使い慣れたローカルの充実したツールチェーンをそのまま活用できます。
P.S. SSHリモート開発に関する詳細は以下を参照してください:
-
利用ドキュメント: Remote Development using SSH
Remote - Containers
さらに、コンテナサポートにより、指定したDockerコンテナを開発環境として使用できるようになります。これにより:
-
ツールチェーンの一貫性を保証でき、コンテナを利用してツールチェーン一式を迅速に再構築できます。
-
コンテナ間の自然な環境隔離により、ローカル環境に影響を与えることなく異なる開発環境を切り替えることができます。
-
開発・ビルド・テスト環境の一致を保証でき、コラボレーションが容易になります。
実装上の構造はWSLサポートと全く同じです:

P.S. Dockerコンテナリモート開発に関する詳細は以下を参照してください:
-
利用ドキュメント: Developing inside a Container
Remote - WSL
Remote - WSL 拡張機能を使用すると、WSLを開発環境一式として利用できます。具体的には以下の機能をサポートしています:
-
Windowsを使いながらLinux環境で開発でき、プラットフォーム依存のツールチェーンを使用できます。
-
WSL内にあるファイルを編集できます。これにはWindowsファイルシステムからマウントされたもの(
/mnt/cなど)も含まれます。 -
Windows上でLinuxアプリケーションをデバッグ・実行できます。
P.S. WSLリモート開発に関する詳細は以下を参照してください:
-
利用ドキュメント: Developing in WSL
5. まとめ
現時点では、リモート環境にシームレスに切り込めるIDEの方が、ブラウザベースのクラウドIDEよりも実用的であると言えそうです:
Browser-based tools are useful in a variety of scenarios, but developers don't want to give up the richness and familiarity that desktop tools provide, or their existing locally installed tool chains.
コメントはまだありません