VS Code でのリモート開発
2019 年 5 月 2 日、VS Code チーム (@code) 著
TL;DR (長文を読まない人向け要約)
本日、Visual Studio Code 用の 3 つの新しい拡張機能のプレビューを発表できることを嬉しく思います。これらの拡張機能により、コンテナー、物理マシンまたは仮想マシンでのリモート、および Windows Subsystem for Linux (WSL) でシームレスな開発が可能になります。はじめには、Remote Development Extension Pack をインストールしてください。
注: 今のところ Insiders ビルドを使用する必要がありますが、リモート開発のサポートは最終的に Stable リリースで利用可能になる予定です。
詳細については、以下をお読みください。
開発トレンド
VS Code の人気が高まるにつれて、さまざまな開発環境を持つますます多くのユーザーと話し合う機会に恵まれました。彼らの多くは私たちとは大きく異なり、VS Code を前進させて、開発者の真の苦痛に対処する方法を特定しようとしました。
これらの会話の中で、興味深いパターンが浮かび上がりました。多くの開発者が、特定の開発およびランタイムスタックで構成されたコンテナーおよびリモート VM に対して VS Code を使用して開発しようとしていました。それは、これらの開発環境をローカルにセットアップすることが非常に難しく、破壊的であり、場合によっては不可能であるためです。
私たちは皆、この問題を経験しています。マシンを初期化する時が来たと感じない限り :), Rust、Go、Node、または Python3 のような新しいスタックを試すことを躊躇します。それは、現在適切に調整された環境を「めちゃくちゃにする」ことを恐れているためです。
Python 開発者は VS Code に切り替えたいと考えていますが、切り替えることができません。なぜなら、特定の Python スタック用に構成された開発環境として、コンテナーと仮想マシンを使用する必要があるためです。
コードベースが非常に大きいため、Facebook (および Microsoft!) のような企業ではエンジニアが vim のようなエディターを使用して、安全で強力な「開発者 VM」に対してリモートで作業しています。最高のラップトップでも処理できない規模の、代替のクラウドベースの検索およびナビゲーションサービスを使用しています。
データサイエンティストがデータモデルを構築およびトレーニングする場合、堅牢なデスクトップでも保存または処理できない大規模なデータセットを分析するために、大規模なストレージおよびコンピューティングサービスが必要になることがよくあります。
Windows Subsystem for Linux (WSL) の人気が高まっているのは、ターゲットオペレーティングシステムを含む、隔離された開発環境を簡単にセットアップできることが理由の一部です。実際、VS Code リポジトリで 3 番目にコメントが多い問題は、Windows 上の Linux ディストリビューションの Bash ターミナルから code
を実行することをサポートすることです。
現在のソリューションの課題
これらの会話を通じて、開発者がこのタイプの開発で直面する同じ課題も聞き続けました。
-
リモートデスクトップは機能する可能性がありますが、一部の Linux ディストリビューションではセットアップが困難または不可能であり、開発エクスペリエンスが「ラグがある」可能性があります。
-
SSH と Vim (またはファイル同期を備えたローカルツール) は機能しますが、遅く、エラーが発生しやすく、一般的に 最新の開発ツールの生産性に欠けています。
-
ブラウザベースのツールはさまざまなシナリオで役立ちますが、開発者はデスクトップツールが提供する豊富さと使い慣れやすさ、または既存のローカルにインストールされたツールチェーンを諦めたくありません。
さらに悪いことに (私たちの意見では!)、開発者はこれらの環境で作業するために、IntelliSense (補完)、lint、デバッグなどの VS Code のコアエクスペリエンスを犠牲にする必要がありました。
異なるアプローチ
これらの課題について聞いたとき、WSL サポートについて検討し始めましたが、それは十分に単純に見えました。VS Code をインストールし、(当時は慎重に!) Windows ファイルシステムを通常どおり編集します。Node.js 用のリモートデバッグを有効にする作業を行い、bash シェルから code
を起動できるようにする小さなスクリプトをインストールするだけで済むと考えました。
しかし、それは正しくありませんでした。Node.js デバッグで行ったように、すべてのランタイムに対して特別な作業を行うことは意味がありませんでした。Windows に Python 2.7 と Flask がインストールされていて (またはまったくインストールされていなくても!)、Linux ディストリビューションに Python 3.7 と Django がインストールされている場合、VS Code は Windows バージョンのすべてを参照しているため、適切な補完や lint を取得できません。Windows と Linux の両方で開発環境を複製する必要があることは、WSL を持つ目的を損ないました。
私たちが必要としているのは、VS Code を一度に 2 つの場所で実行する方法、つまり、開発ツールをローカルで実行し、物理マシンまたは仮想マシン (たとえば、コンテナーまたは VM) のコンテキストでリモートで実行されている一連の開発サービスに接続する方法であると確信しました。これにより、リモート環境の内容のコンテキストで、豊富なローカル開発エクスペリエンスが得られます。
VS Code リモート拡張機能のご紹介
過去数か月間、私たちはコード層間の適切な境界を再確立し、ローカル開発環境に関する前提を排除するために懸命に取り組んできました。WSL、Docker コンテナー、または SSH 経由の物理マシンおよび仮想マシンで実行されているリモートワークスペースを操作するための 3 つの新しい拡張機能を構築しました。
WSL 拡張機能を使用すると、Windows Subsystem for Linux (WSL) を VS Code から直接完全な開発環境として使用できます。この新しい最適化されたサポートにより、次のことが可能になります。
- Windows を使用して、プラットフォーム固有のツールチェーンとユーティリティを使用して、Linux ベースの環境で開発します。
- WSL またはマウントされた Windows ファイルシステム (例:
/mnt/c
) にあるファイルを編集します。 - Windows 上で Linux ベースのアプリケーションを実行およびデバッグします。
コマンドと拡張機能は Linux ディストリビューションで直接実行されるため、パスの問題、バイナリ互換性、またはその他のクロス OS の課題を心配する必要はありません。Windows からの場合と同様に、WSL で VS Code を使用できます。
WSL での開発がどれほど簡単かを示す、この 2 分間の簡単なビデオをご覧ください。
詳細については、WSL での開発ドキュメントを参照してください。
Remote - SSH 拡張機能を使用すると、SSH サーバーが実行されている任意のリモートマシン、VM、またはコンテナーでホストされているフォルダーまたはワークスペースを開くことができます。SSH 経由の開発により、次のことが可能になります。
- ローカルマシンよりも大型、高速、またはより特殊なハードウェアで開発します。
- さまざまなリモート開発環境をすばやく切り替え、ローカルマシンに影響を与えることを心配せずに安全に更新できます。
- 顧客サイトやクラウドなど、他の場所で実行されているアプリケーションをデバッグします。
たとえば、深層学習プロジェクトに取り組んでいると仮定します。通常、GPU を多用する仮想マシン (Azure Data Science Virtual Machine など) が必要です。これは、大規模データセットでモデルをトレーニングするために必要なすべてのツールとフレームワークで構成されています。
SSH 経由の Vim または Jupyter Notebooks を使用してリモートコードを編集できますが、ローカル開発ツールの豊富さを諦めることになります。代わりに、Remote - SSH 拡張機能を使用すると、VM に接続し、Python のような必要な拡張機能をインストールするだけで、ローカルで作業しているかのように、IntelliSense (補完)、コードナビゲーション、デバッグなどの VS Code の優れた機能をすべて活用できます。
SSH 経由で仮想マシン上で開発することがどれほど簡単かを示す、この 2 分間の簡単なビデオをご覧ください。
詳細については、SSH を使用した開発ドキュメントを参照してください。
Dev Containers 拡張機能を使用すると、Docker コンテナーを開発コンテナーとして使用できます。コンテナーは優れた開発環境になります。なぜなら
- デプロイするのと同じオペレーティングシステム上で、一貫性があり、簡単に再現可能なツールチェーンで開発できるからです。
- コンテナーは分離されているため、ローカルマシンに影響を与えることなく、さまざまな開発環境をすばやく切り替えることができます。
- 他の人がプロジェクトに貢献しやすくなります。なぜなら、一貫性のある開発環境で簡単に開発、ビルド、テストできるからです。
devcontainer.json
ファイルを使用して、使用する Dockerfile
、開くポート、コンテナーにインストールする拡張機能など、開発コンテナーを構成する方法を VS Code に指示できます。VS Code がワークスペースで devcontainer.json
を見つけると、自動的にイメージをビルド (必要な場合) し、コンテナーを起動して接続します。ファイルがコンテナーにマウントされるため、ファイルを開いて、完全な IntelliSense (補完)、コードナビゲーション、デバッグなどで編集を開始できます。
開発コンテナーの動作を示す、この 2 分間の簡単なビデオをご覧ください。
開発コンテナーの詳細については、コンテナー内での開発ドキュメントと、今日使用できるサンプルを含む vscode-remote-try-* リポジトリを参照してください。
拡張機能の管理
リモートで開発する場合、VS Code は拡張機能が公開する機能に基づいて、拡張機能をローカルまたはリモートのどちらにインストールするかを推測しようとします。拡張機能は、次の 2 つのカテゴリに分類されます。
-
UI 拡張機能はローカルにインストールされます。これらの拡張機能は UI のみをカスタマイズし、ワークスペース内のファイルにアクセスしないため、ローカルマシン上で完全に実行できます。ローカルにインストールされているため、作業しているワークスペースに関係なく、常に利用できます。UI 拡張機能の例としては、テーマ、スニペット、言語文法、およびキーマップがあります。
-
ワークスペース拡張機能はリモートでインストールされます。これらは、編集、IntelliSense (補完)、定義への移動、デバッグなどを提供するために、ワークスペース内のファイルとフォルダーにアクセスします。これらの拡張機能は UI をカスタマイズする場合があります。これらの拡張機能はリモートで実行されるため、リモートホスト上のファイルシステムとツールに完全にアクセスできます。
ほとんどの拡張機能は更新されており、リモート環境で適切に動作しますが、動作しないものがある場合は、拡張機能で問題を送信してください。
拡張機能の作成者
VS Code 拡張機能を作成している場合、リモート対応の新しい拡張機能 API を実装しました。たとえば、open
パッケージを使用してブラウザウィンドウをロードする代わりに、拡張機能の作成者は vscode.env.openExternal
API を使用する必要があります。これにより、ブラウザがローカルで開きます。同様に、新しい clipboard
クラスがあり、予想どおりローカルクリップボードにコンテンツを配置します。
リモート環境で拡張機能を実行、テスト、およびデバッグする方法など、詳細については、更新された API ドキュメントを参照してください。
はじめに
ここまでお読みいただきありがとうございます!
Visual Studio Code リモート開発を開始するための 3 つの簡単なステップを次に示します。
-
Insiders ビルドをインストールします。Stable で利用可能になるまで、リモート開発にはこれが必要です。Insiders ビルドは、最新の機能とバグ修正を毎日出荷しています。安定性について心配する必要はありません! 私たちは VS Code を開発するために Insiders ビルドを使用しており、何かが壊れた場合に備えて Stable と並行してインストールできます (お知らせください)。
-
Remote Development Extension Pack を入手してください。これにより、WSL、SSH、およびコンテナーのサポートがインストールされ、開始する最も簡単な方法です。すべてが必要ない場合は、個々の拡張機能をアンインストールできます。
-
ドキュメントをお読みください。Dev Container サンプルをお試しください。Python で開発する場合は (多くの人がそうであるように!)、Dan Taylor のリモート Python 開発に関するブログ記事をご覧ください。
最後に、問題が発生した場合は、問題を送信してください。よくある質問への回答については、FAQ を参照してください。
ご意見をお聞かせください!
ハッピーコーディング、
@code チーム