JetBrainsは先頃、Swing GUIアプリケーションのリモート実行を可能にするテクノロジであるProjectorの最初のメジャーイテレーションをリリースした。Android Studioのようにリソースを大量に消費するアプリケーションを、パワーのあるサーバ上で実行することが可能になるので、開発者はシンクライアント上のWebブラウザがあれば十分だ。
JetBrainsはリリースノートで、Projectorの開発理由を詳細に説明している。
ご存じのように、SwingはJavaのグラフィックウィジェットツールキットです。[...] JetBrains IDEやSwingアプリがデスクトップアプリケーションであることで、通常は問題ないのですが、シンクライアントのように、特別なアプローチを必要とするケースも少なからず存在します。Projectorはそのためのものです。
ProjectorはIntellJベースのIDEやSwingベースのアプリをサーバ上で実行する自己ホスト型テクノロジで、ブラウザや任意のアプリを使ってどこからでもアクセス可能にします。
Projectorを使ってサーバ上でリモート運用するアプリケーションとしてJetBrainsが想定しているのは、高度にセキュアな状況、大規模プロジェクト、その他シンクライアントが適した状況だ。強力なサーバとシンクライアントという組み合わせは、ハイエンドラップトップを活用した同種の構成に比較した場合、一般的に安価であると同時に、モバイル対応においてもアドバンテージがある。しかもシンクライアントは、運用や維持の費用が低く、セキュリティ面でも優れている。ソフトウェアをインストールしたり、ファイルを自身のデバイスに置く必要がないためだ。ブラウザからSwingアプリケーションを実行することで開発者は、自身の開発環境(オペレーティングシステム、プロセッサ、メモリ)の詳細を考慮する必要から解放される。
ある開発者がTwitterで、ProjectorのおかげでWindows Subsystem for Linux(WSL)に関わる問題を回避できたことを説明している。
#WSL2は確かにすばらしい ... @phpstormを使うこと以外は。ですが今回、@jetbrainsがProjectorをリリースしてくれました。さまざまな状況で新たな道を開いてくれる、素晴らしいツールなのですが、何よりもありがたいのは ... WSL2でProjectorを実行することで、WSL2で#ddevを使う場合の問題がすべて解決することです。
TwitchでAndroidリーダを務めるJoaquim Verges氏は、自身のモバイル上でのAndroid Studioの実行について報告している。
私が使っているラップトップは、16GBのRAMを積んだ4年物のRazer bladeなのですが、わずかなモジュールを使った個人的なプロジェクトをAndroid Studioで開いただけで振り切ってしまうのです。3Dビデオゲームをプレーする時よりも激しくファンが回り始めて、いらいらします。[...] [JetBarins Projectorを使った]アプローチならば、ブラウザさえ使えれば、どのようなデバイスでもシームレスにコーディングができます。下の画面は実際に、私のスマートフォンでAndroid Studioを"実行"している様子です。
(ブログ記事より)
[実行にはAWS] ECSインスタンスの8コア、32GB RAM、100GBストレージを選択しました。[...] 1日8時間、週5日使用していますが、費用は64ドル/月程度です。高価なラップトップが不要になったと思えば、悪い選択ではありません。プロジェクトを立ち上げたいときは、まずEC2インスタンスを起動します。その上でProjectorを実行して、Chromeのタブを開けば、コーディングの準備完了です。ファンがブンブン回ったり、オーバーヒートすることもありません![...] さらにスマートフォンとラップトップの間でWiFiデバッグ環境もセットアップしたので、USBケーブルも必要なくなりました。
JetBrainsによれば、複数のクライアントをサーバに接続して交互に操作することが可能なので、ペアプログラミングをリモートで実行することもできる。起動に長い時間を要する大規模なプロジェクトならば、開発者がラップトップのスイッチを切った後も、サーバ上でそのまま動作させておけばよい。
Projectorでは、独自実装したAWSグラフィックエンジンを使用して、Swingアプリケーションが発行する描画コマンドをインターセプトしている。コマンドはシリアライズされた上でWebSocket経由でクライアントに送信され、ローカルで実行される。一方でクライアントは、ユーザイベント(マウスクリックやウィンドウのサイズ変更など)をサーバに返送し、そのイベントはAWTコマンドに変換される。
ピクセルを直接ストリームする汎用的なリモートディスクトップソリューションとは異なり、ProjectorはシリアライズプロトコルをJavaアプリケーションとベクタフォントに特化しているため、速度の遅いネットワーク上でもフォントやユーザインタフェースをきれいに描画することができる。ただし、一部のホットキー(Windows/LinuxのCtrl+Q
、macOSのcmd+w
など)はブラウザにインターセプトされる。Webページをappモードで開くという回避策もあるが、JetBrainsはブラウザクライアントの代用となるネイティブアプリをmacOS、Linux、Windows用に別途提供している。
Projectorはオープンソースプロジェクトで、Apache License 2.0、GNU GPL v2.0、MITライセンスでライセンスされたいくつかのモジュールから構成されている。コントリビューションも受け入れているが、ガイドラインに従うことが条件である。