.NET Tools Remote Development

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

Read this post in other languages:

JetBrains Rider 2022.2 のリリースに伴い、.NET 開発者がリモート開発のベータ版にアクセスできるようになりました。 IntelliJ プラットフォームをベースとする他の JetBrains IDE ではすでに導入済みでしたが、Rider ユーザーも .NET プラットフォームでリモート開発機能を体験できるようになりました。

この記事では、「リモート開発とは?」、「リモート開発を使用する理由は?」、「JetBrains Rider の現在のバージョンでリモート開発を使用するには?」という質問にお答えいたします。 では早速始めましょう。

リモート開発とは?

リモート開発はごく一般的なもので、その歴史は業務用コンピューター利用の黎明期までさかのぼります。 ユーザーは作業を遂行するためにターミナルを使用して大型コンピューターにリモート接続していました。 コンピューターターミナルの歴史は非常に興味深く、今日のような個人がコンピューターを利用する時代の先駆けでした。 

テクノロジー界のほとんどの物事に当てはまるように、トレンドは周期的に発生します。 そのため、我々が目にするデスクトップコンピューターが最初期のコンピューター科学者の想像を超える処理能力を備えていても、最新の開発ワークフローではこのようなデバイスの制限に直面する場合があります。 現在のワークロードには極端な量の CPU、メモリ、GPU が要求される場合があります。開発途上の量子コンピューティングについては言うまでもありません。

.NET 開発者の場合、このような制限は技術的な制限以上に大きく、マルチターゲットのオペレーティングシステムとハードウェアなどの問題も抱えています。 さまざまな物理デバイス一式を揃えることは可能かもしれませんが、これは多くの開発者にとって現実的ではありません。 仮想化とエミュレーションにも制限があります。一般的にはホスティングの負荷が原因で精度が低くなるためです。

現代の開発者は、どのようにこのような課題を克服すればよいのでしょうか? そうです。ここでリモート開発の出番です!

JetBrains Remote Development は SSH をサポートする任意のリモートサーバーでソースコード、ツールチェーン、および IDE バックエンドをホストすることができます。 IntelliJ プラットフォームをベースとするシンクライアントを使用することで、ローカル環境と同じように Rider の開発ワークフローを体験できます。 これまでと同様にプロジェクトの作成、移動、リファクタリング、実行、デバッグ、テストを実行できるのです。

前回の発表では、以下のように説明されています。

ごく単純に言えば、リモート開発では SSH 経由で既存のサーバーに接続します。 IDE はバックエンドサービスとしてインストールされており、ユーザーインターフェースを表示せずにプロジェクトを読み込みます。 ローカルではシンクライアントを実行して、この IDE バックエンドに接続します。シンクライアントにはフル機能のユーザーインターフェースが備わっているため、すべての処理がリモートサーバーで実行されているにもかかわらず、IDE がローカルで動作しているように感じます。

JetBrains

リモート開発はコンピューターの分野では新しい概念ではありませんが、JetBrains が 20 年にわたって蓄積した知識と最新のホスティングオプションは業界の各関係者にまたとない瞬間をもたらすものです。 有効な JetBrains Rider サブスクリプションと SSH 対応のリモートサーバーインスタンスを使用できる限り、リモート開発を活用できるのです。

しかし、そもそもリモート開発を必要とする理由とは何でしょうか?

リモート開発を始める理由

リモート開発の技術的な側面については軽く説明しましたが、ほとんどの開発者は作業方法が大きく変わるように思うかもしれません。 では、なぜリモート開発を検討する必要があるのでしょうか。

この理由は、メリットを受ける側の観点によって異なります。 ここでは組織の関係者に注目し、リモート開発チームからどのようなメリットを受けるのかを見てみましょう。

開発者はセットアップスクリプトの実行、環境設定の構成、依存関係のダウンロードに何時間もかけることなく、数分で素早く開発環境を起動することができます。 開発者マシンはイメージをベースにスクリプト化できます。これにより、チーム全体に使い慣れた開発環境が提供され、チーム内で発生しがちな「自分のマシンでは動作する」という忌まわしい問題を回避することができます。 チームが複数のプロジェクトを担当している場合、開発者がタスクをほぼ停止することなくコンテキストを素早く切り替えられるというメリットもあります。

また、開発者が現在のハードウェアに関係なく無制限にリソースへアクセスできるようにもなっています。 リモート開発では先ほど申し上げた通り、シンクライアントを使用し、コストの高い処理はリモートサーバーで行われます。 もっと多くの CPU、メモリ、GPU を使用する必要がある場合、 リモートマシンを数分でスケーリングして作業を継続できるため、高価なノートパソコンが届くのを待つ必要はもうありません。

IT 管理者とハードウェア管理者の場合、長期的には一般的なエンタープライズハードウェアの更新サイクルよりもリモート開発の方がコスト削減効果があります。 たとえばこの記事を書いている時点では、当社の多くのパートナーの 1 社である GitPod は開発者 1 人の作業時間に対して 1 ドル未満でワークスペースをプロビジョニングできています。GitHub Codespaces では無料時間と魅力的な料金モデルも提供しています。 更新サイクルが 2 年で 6,000 ドルのワークステーションでは、作業時間あたり 1.50 ドルをわずかに超える可能性があります(週 40 時間労働で、年間 48 週労働を想定した場合)。 開発者の生産性、ハードウェアの取得、およびハードウェア管理費を見積もると、ほとんどのチームにとってはリモート開発の方がより魅力的に見えます。

リモート開発では知的財産が開発者のマシンではなく常にリモートサーバーに格納されるため、安心できるというメリットもあります。 データベースのような機密情報の保存が必要とされる依存関係については、セキュリティで保護された環境からのみアクセス可能です。 リモート開発は、金融、公務、ヘルスケアなど、規制の厳しい業界での事業運営を守ることができます。 ハードウェアの盗難や紛失によって組織全体が危険にさらされることはありません。

ここでは関係者全員に関わるメリットを説明しましたが、最大のメリットは現在の開発プロセスにほとんど影響がないということだと最後に付け加えておきます。 ネットワークが許容する限りは高性能サーバーの力を最大限に活用できることが分かっているため、軽量デバイスをどこにでも持ち込めます。 そのため、開発者は .NET ソリューションの作成とデプロイに使い慣れた JetBrains ツールを使用し続けることができます。

それでは JetBrains Rider のリモート開発を使い始める方法を説明します。

JetBrains Rider でリモート開発を始める

リモート開発のベータ版をテストするには、JetBrains Rider の最新リリースであるバージョン 2022.3 以降が必要です。 JetBrains Gateway だけをインストールすることも可能です。これにはまったく同じ機能が含まれますが、シンクライアントのみがインストールされます。 JetBrains Gateway は、今後リモート開発のみを行う場合に最適なオプションです。

SSH サーバーを運用するリモートサーバーも必要です。 最初は 2 個以上のコア、4GB 以上の RAM、および 5GB 以上のディスク容量を持つリモートサーバーから始めることを推奨してはいますが、これらの要件はソリューションと開発ワークフローに応じて異なります。 リモートサーバーは現時点では Linux でなければなりませんが、間もなく Mac と Windows もサポートする予定です。

JetBrains Rider を起動すると、ようこそ画面の右側に SSH と JetBrains Space の 2 つのオプションを備えた Remote Development(リモート開発)セクションがあります。 将来的には、GitHub、GitPod、Google、Amazon、Linux 用の Windows Subsystem(WSL)などのパートナーから明示的なプロバイダーが追加される予定です。 New Connection(新しい接続)をクリックして、新しい SSH 接続を追加します。

リモート開発のベータ版と SSH、JetBrains Space、WSL のオプションが表示された JetBrains Rider のようこそ画面

Connect to SSH(SSH に接続)画面では、既存の接続を選択するか、新しい SSH 接続を作成します(初めて開く場合)。後者の場合は Git などの SSH ベースのサービスへの認証に使用するユーザー名、ホスト、ポート、およびリモートサーバーに追加するローカルの秘密鍵を指定します。

注意: localhost と 127.0.0.1 はサポートされていませんが、テストを目的にローカル IP アドレスを使用してローカル仮想マシンに接続することは可能です。

入力フィールドが表示された Connect to SSH(SSH に接続)画面

すべての値を正しく入力したら、Check Connection and Continue(接続を確認して続行)をクリックします。 その後は JetBrains Rider からパスワードの入力を求められます。また、資格情報を再起動するまで保存するか、永久に保存するかを選ぶオプションを選択できます。

パスワードを要求する SSH 接続の認証ダイアログ

リモートサーバーへの認証が完了すると、JetBrains バックエンドと開きたいソリューションファイルを選択するオプションが表示されます。 この画面では、Rider をバックエンドとして選択し、SSH ターミナルを開いてソースコントロールから既存のソリューションをクローンすることができます。 すべてのオプションを選択したら、Start IDE and Connect(IDE を起動して接続)をクリックします。

Rider とソリューションファイルの設定を含む Choose IDE and Project(IDE とプロジェクトの選択)ダイアログ。

リモート開発を初めて使用する場合、2 つの進捗バーが表示される場合があります。 1 つ目の進捗バーには、バックエンドサービスのインストールの進捗が表示されます。 2 つ目の進捗バーは、開発マシンでローカル実行される JetBrains クライアントのダウンロード状況です。 クライアントとバックエンドサーバーはどちらの環境でも永続的に残るため、この作業が必要になるのは最初だけです。 すべてのプロセスが完了すると、JetBrains クライアントで慣れ親しんだ JetBrains Rider の機能を使用できるようになります。

リモートサーバーの JetBrains Rider バックエンドに接続された JetBains クライアント

開発の際にはエディターの応答が速く、きびきびと動作しているように感じるかと思います。 編集作業はローカルで発生するため、JetBrains クライアントは変更をバックエンドに同期しています。 すべての処理は、バックエンドマシンで発生することを覚えておいてください。 このような処理には、ソリューションファイルのインデックス作成、ディスクアクセス、クイックフィックスの提案など、すべてが含まれます。 ご興味があれば、これらの処理を Rider のターミナルを開いて確認できます。 ローカルの JetBrains クライアントの使い心地は、プラグイン、テーマ、キーマップ、および JetBrains Marketplace のほとんどの提供物を使ってカスタマイズすることも可能です。

リモートサーバーのソリューションフォルダーを表示中のターミナル。

また、Rider インスタンスの上部にある Backend Status Details(バックエンドのステータス詳細)ウィジェットを使用すると、重要なリモートメトリクスも確認できます。 このウィジェットには、サーバーでの CPU、メモリ、およびディスクのリソース使用率が表示されます。 また、公開されたポートを管理して、バックエンドサービスが生成する出力を確認できます。

CPU、負荷、メモリ、およびディスク使用率などのバックエンドメトリクスを表示中の JetBrains クライアントの Backend Status Details(バックエンドのステータス詳細)ダイアログ。

ポートを手動で構成することは可能ですが、リモート開発では違和感のないローカル開発を実現するためにすべての必要なポートが自動的に検出されて転送されます。 たとえば ASP.NET Core 開発では、ウェブアプリケーションの開発時に HTTP の転送が必要です。

リモートサーバーからローカル環境に転送されたポートで ASP.NET Core を実行中。

サーバーから転送されたポートには、localhost:port を使用してアクセスできます。 転送されたポートは実行ウィンドウの上部付近で確認可能です。 ポートフォワーディングにより、Rider ユーザーは同じツールとこれまでの経験を使用してリモートで実行されているプロセスを簡単にテストしてデバッグできます。

JetBrains クライアントで ASP.NET Core ユニットテストをデバッグ中

リモート開発ではデバッグも可能です。 必要なブレークポイントをアプリケーションやユニットテストに追加して、新しいデバッグセッションを開始してください。

このセクションで説明したように、JetBrains Rider リモート開発は素早く簡単に使い始められます。

まとめ

リモート開発は現代のソフトウェア開発の将来像であり、開発者と他の関係者にあらゆる問題に取り組む能力と柔軟性を与えるものです。 この記事で説明したとおり、JetBrains のリモート開発には多数のメリットがあり、開発者はこれまでと同じように楽しく開発できます。

現在のバージョンはまだベータ段階にあるため、JetBrains Space、GitPod、Google、AWS、GitHub、またはローカル SSH サーバーでお試しいただければ幸いです。 また、課題を提出し、以下のコメント欄にコメントや懸案事項を記入してください。

いつものように、この投稿を最後までお読みいただいた JetBrains のお客様に感謝します。

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

Ryuji Owan

Khalid Abuhakmeh

image description

Discover more