New Products

JetBrains Gateway を用いたリモート開発

Read this post in other languages:

先日、JetBrains IDE でリモート開発がサポートされることを発表しました。 つまり、ソースコード、ツールチェーン、および IntelliJ ベース IDE をリモートサーバーでホストし、サービスとして実行できるようになります。 一方、ローカルで実行するシンクライアントは、多くのユーザーが使い慣れた IntelliJ プラットフォームをベースとしており、編集、ビルド、実行、テスト、デバッグなどを行うためのリッチなフル機能の UI が備わっています。

コーディングに必要なものすべてがリモートの物理サーバーや仮想マシンで動作するため、どこにいてもクリーンで複製可能な開発環境を、セキュアかつパフォーマンスに優れたサーバーマシンを活用して作業できます。

この発表をまだご覧になっていない方は、この機会にぜひお読みください

今日は、新しい JetBrains Gateway アプリで管理するリモート開発ワークフローを詳しく見ていきましょう。

JetBrains Gateway を使ったリモート開発

JetBrains のリモート開発では、SSH 経由でサーバーに接続します。 IDE はリモートマシンにバックエンドサービスとしてインストールします。ここではユーザーインターフェースを表示せずにプロジェクトが読み込まれます。 シンクライアントはローカルで動作し、IDE バックエンドに接続してリッチなフル UI を提供します。ただし、すべての処理はリモートで行われます。

このプロセス全体は、JetBrains Gateway によって管理されます。これは新しいコンパクトなスタンドアロンアプリで、リモート開発を開始するために必要となるすべてのものを備えています。 スタンドアロン型であり、ローカル環境にインストールするだけで作業を開始できるため、性能が不十分なノートパソコンや (セキュリティ等の理由から)ローカル環境での IDE のフルインストールが好ましくない場合に最適です。 

JetBrains Gateway はいくつかの JetBrains IDE にもプラグインとしてバンドルされています。 今回の最初のベータリリースでは、IntelliJ IDEA Ultimate、PyCharm Professional、GoLand、PhpStorm、および RubyMine のウェルカム画面から直接、リモート開発セッションを開始することができます。 また、スタンドアロンの Gateway アプリをインストールすると、CLion と WebStorm を管理することができます。 その他の IDE も近日サポートされる予定です。

Gateway は、リモートの IDE バックエンドとローカルのシンクライアントをインストールし、SSH 経由で両方を接続します。 まず、SSH 接続をセットアップします。 ホストとユーザー名を指定してキーまたはパスワードを入力すると、Gateway がリモートサーバーに接続されます。 IDE バックエンドがすでにインストールされていることを確認し、インストールされていない場合は jetbrains.com から新しいバージョンをダウンロードします。

IDE バックエンドを起動するには、Gateway でプロジェクトディレクトリを指定する必要があります。 リモートのファイルシステムを参照してディレクトリを選択するか、まだプロジェクトが準備されていない場合は、組み込みのターミナルを使用してバージョン管理システムのプロジェクトをクローンできます。

IDE バージョンとプロジェクトディレクトリを選択したら、Gateway が IDE をリモートサーバーにダウンロードし、アンパックしてから読み込まれたプロジェクトを使って IDE を起動します。 次に、一致するバージョンの JetBrains Client をローカルにダウンロードし、キャッシュして起動します。

JetBrains Client はローカルで実行し、IDE バックエンドのユーザーインターフェースを提供します。 IntelliJ プラットフォームをベースとしているため、完全な IntelliJ ベースの IDE のような開発体験を提供します。ローカルの IDE と同じエディター、コード補完、ナビゲーション、インスペクション、およびリファクタリングツールを備えていますが、すべてのファイルはリモートでホストされており、すべての言語処理はリモートサーバーで行われます。 ここで利用されている技術は(さらに新しい機能がいくつか追加されてはいるものの)Code With Me で使用されているのと同じ JetBrains Client です。 IDE バックエンドのすべてのダイアログとツールウィンドウをローカルのリッチ IDE クライアントで表示し、リモートの IDE バックエンドのすべての機能にアクセスすることができるようになっています。

コーディングの作業を終えたら、そのまま JetBrains Client を閉じることができます。 IDE バックエンドはそのまま動作し続けるため、Gateway にリスト表示される最近の接続をクリックするだけで簡単に再接続できます。

サーバー構成

ここまでは、リモートサーバーについてあまり説明しませんでした。 現時点では、リモート開発には Linux サーバーが必要です(言い換えると、リモート環境としては Linux のみサポートしています)。ただし、将来的には他の環境にも対応予定です。一方で、Client は Windows、macOS、および Linux で動作します。 それ以外では、物理サーバーや仮想サーバー、ローカルやデータセンターにホスティングされたサーバー、またはクラウドにホスティングされたサーバーなど、任意のサーバーを使用することができます。

仮想マシンまたはコンテナーを使用する場合、環境を再現し、チーム内で共有できるというメリットがあります。 DevOps チームによる開発環境の準備を支援するために、JetBrains リモート開発には、プロジェクトの読み込み、依存関係のダウンロード、インデックス作成、およびコンパイルによって既存の環境を「ウォームアップ(=事前実行)」するヘルパースクリプトが含まれています。 それによって準備されたイメージを使って、すぐにコーディングを開始できます。

独自スクリプトの作成に時間をかけたくない場合は、ソフトウェアチームとプロジェクト向けオールインワン型ソリューションの JetBrains Space をご利用ください。このソリューションには最近 クラウド開発環境の提供機能が導入されました。 Space でホストされているすべてのプロジェクトは、読み込み、コンパイル、インデックス作成を行ってからコーディングをすぐに開始できる環境のスナップショットとして保存することで、ウォームアップをサポートした開発環境に簡単に変換できます。 詳細は、Space の発表記事をお読みください。

スタンドアロン型JetBrains Gateway ツールを使用するか、普段使用している IntelliJ ベース IDE の 2021.3 をダウンロードして、リモート開発を始めましょう。 ドキュメントを読み、皆さんの体験をお知らせください!

よくある質問

リモート開発サポートの現在のステータスは?

スクリーンショットの「Beta」のラベルにお気づきかもしれません。 リモート開発のサポートは IntellilJ プラットフォームそのものに組み込まれているため、すべての IDE の多くの機能と関連しています。 基本シナリオが機能する自信はありますが、途中でまだいくつかの問題が発生する可能性はあります。 いずれにしても、この機能を必要とする開発者にご利用いただけるよう、早期に完成度を高めていきたいと思っています。

JetBrains Gateway はいくつかの IDE にプラグインとしてバンドルされていますが、 他の IDE に比べて十分にテストされていない一部の IDE(CLion と WebStorm)にはバンドルされていません。 これらの他の IDE では、スタンドアロンアプリを使用して Gateway をお試しいただけます。

また、現時点でリモート開発に対応していない IDE がいくつかあります。具体的には、AppCode、DataGrip、DataSpell、Rider、および Android Studio です。 できるだけ早くこれらの IDE にサポートを実装できるように、活発に取り組んでいます。

リモート開発のライセンス体系は?

リモート開発は、既存の有料サブスクリプションの一環として含まれています。 ライセンスチェックは、Client から実行中の IDE バックエンドインスタンスに接続するときに実施されます。 IDE バックエンドを使ってリモートサーバーまたはサーバーイメージを「ウォームアップ」するといった自動化のユースケースにはライセンスは必要ありませんが、 JetBrains Client と対話して IDE バックエンドを使用するにはライセンスが必要です。

リモート開発は共同開発に含まれますか?

まだ含まれてはいませんが、追加は予定されています。 リモート開発は Code With Me のコアテクノロジーに基づいており、JetBrains Client は Code With Me セッションに使用されているものと同じクライアントです。 

ただし、使用シナリオは非常に異なります。 Code With Me は複数の同時ユーザーにいくつかのツールウィンドウとダイアログを表示することを意図しており、そのビューが異なることもありますが、リモート開発では、単一のユーザーにすべてのツールウィンドウとダイアログを表示する必要があります。 私たちは初回リリースにおいて、この(単一ユーザーの)シナリオに専念してきました。

リモート開発は、JetBrains IDE と同じ開発体験を提供しますか?

はい! シンクライアントとヘッドレスの IDE バックエンドを使って作業するわけではありますが、すべての重要な機能、ツールウィンドウ、およびダイアログが使用可能です。 リッチな構文ハイライト、ナビゲーション、コード補完、インスペクション、Alt+Enter アクション、クイックフィックス、コンテキストアクション、リファクタリング、実行構成、実行とデバッグサポート、テスト、および Gradle や Maven などのツールウィンドウ、プラグインなどを使用可能です。

リモート開発には、ポートフォワーディングも含まれているため、ローカルブラウザーを介してリモートで実行しているプロジェクトを閲覧することが可能です。

ウェブブラウザーや iPad など、代替 UI は使用できますか?

リモート開発は、IntelliJ プラットフォームを使用する JetBrains Client と連携し、JetBrains ユーザーが使い慣れたリッチなクライアントアプリケーションと、テーマやプラグイン(ローカルにインストール済みの IDE から自動的にインポートされます)によるカスタマイズとパーソナル化を含む、JetBrains IDE の広く知られている機能のすべてを提供するように、特別に設計されました。 Rider と Code With Me を支えるアプローチを再利用することで、プロトコルは軽量の「ビューモデル」に基づき、これにより、反応性に優れたユーザーエクスペリエンスを実現しています。 そのため、ウェブフロントエンドを提供する予定はありません。

一方で、Projector を使用して、ウェブブラウザ経由で JetBrains IDE にアクセスすることは可能です。 Projector はリモート開発プロトコルより低レベルで動作するため、UI レイテンシー(遅延)が発生する確率が高く、はるかに高いネットワーク帯域幅を使用することに注意してください。また、 Projector では、ローカルにインストールされた IDE の設定とプラグインのインポートをサポートしていないという制限があります。

プラグインはサポートされていますか?

IntelliJ プラットフォームには、優れたプラグインのエコシステムがあり、それはリモート環境でも活用されています。 新しい言語または新しいインスペクションとハイライトを追加するなどのように、IDE の機能を拡張するように設計されたプラグインは、IDE のバックエンドにインストールすることができ、JetBrains Client でこれらの機能を自動的に利用できるようになります。 新しいインスペクション、Alt+Enter アクションなどは、ローカル IDE で実行する場合と同じように、Client 経由で動作します。 IDE バックエンドをスクリプト化すると、プラグインのインストールも自動化することが可能です。

一方で、テーマなど、IDE の UI を変更するプラグインは、IDE バックエンドではなく、JetBrains Client にインストールできます。 IdeaVim などのエディタープラグインも Client 側で動作します。

サポートされているオペレーティングシステムは?

現時点では、JetBrains リモート開発には Linux サーバーが必要です。ただし、Client は Windows、macOS、および Linux で動作します。 今後、Windows サーバーと macOS サーバーのサポートも追加する予定です。

リモートサーバーをクラウドにホストできますか?

もちろん可能です! リモートサーバーには、オフィス内の物理サーバーやデスクトップ上またはクラウド上の仮想マシンを使用できます。 Docker イメージとして作成することが可能で、IDE バックエンドには、依存関係をダウンロードするスクリプト、コンパイルするスクリプト、インデックス作成の完了を待機するスクリプトが含まれます。

JetBrains リモート開発のオーケストレーションを提供するサードパーティはありますか?

現時点では、JetBrains Space が唯一リモートサーバーのオーケストレーションを提供しているツールです。Dockerfile を使用して、リポジトリをすぐに使用できる仮想マシンに変換します。 統合については他のプロバイダーと協議中であり、詳細については今後の発表をお待ちください。

オリジナル(英語)ブログ投稿の作者:

image description

Discover more