⌨️

ProjectorでJetBrainsのIDEをリモートから使う

2021/07/02に公開

https://text.superbrothers.dev/210316-using-a-linux-server-as-a-development-environment/

上記の記事のように、LinuxマシンにVS CodeのRemote - SSHでつないで開発環境として使ってるのですが、GoLandやRubyMineといったJetBrainsのIDEが使いたくなってきたため、Projectorを試してみました。

Projectorを使うことで、IntelliJ IDEA, GoLand, RubyMineなどのJetBrains製IDE(やSwingを使ったアプリ)をリモートからネットワーク越しに動かせます。
サーバ側でProjector + IDEを動かしておき、クライアント側ではブラウザやデスクトップアプリからアクセスすることで、ローカルで動いてるIDEとほぼ同じように操作できます。


ブラウザ内のGoLandでデバッグ実行している様子

インストール

https://github.com/JetBrains/projector-installer を使ってインストールします。
Projector + IDEがインストール済みのDockerイメージも公開されていますが、例えばRubyMineを使う場合、そのDockerコンテナ内にRubyの開発環境を整える必要があります。すでに構築された環境でIDEを使うためにprojector-installerを利用します。

https://github.com/JetBrains/projector-installer#installation に従って進めます。Python 3.6以降が入っている環境で、

sudo apt install less libxext6 libxrender1 libxtst6 libfreetype6 libxi6
pip3 install projector-installer --user

~/.local/binprojectorコマンドが置かれるので適宜パスを通しておきます

export PATH="$HOME/.local/bin:$PATH"

projectorコマンドでIDEをインストールします

$ projector install --expert --no-auto-run
This software includes components licensed under GPLv2+CPE. Do you accept this license? [y/n]: y
           1. Idea_Community
           2. Idea_Ultimate
           3. PyCharm_Community
           4. PyCharm_Professional
           5. CLion
           6. GoLand
           7. DataGrip
           8. PhpStorm
           9. WebStorm
          10. RubyMine
          11. Rider
          12. DataSpell
          13. MPS
Choose IDE type or 0 to exit: [0-13]: 6
Do you want to select from Projector-tested IDE only? [y/N]
           1. GoLand 2021.1.3
           2. GoLand 2021.1.2
           3. GoLand 2021.1.1
           4. GoLand 2021.1
(redacted)
Choose IDE number to install or 0 to exit: [0-25]: 1
Enter a new configuration name or press ENTER for default [GoLand]:
Would you like to specify listening address (or host) for Projector? [y/N]y
Enter a Projector listening address (press ENTER for default) [*]: 100.xxx.xxx.xxx
Would you like to specify hostname for Projector access? [y/N]
Would you like to set password for connection? [y/N]y
Please specify RW password:
Repeat password:
Would you like to set separate read-only password? [y/N]
Installing GoLand 2021.1.3
Downloading goland-2021.1.3.tar.gz
[##################################################]  100%
Unpacking goland-2021.1.3.tar.gz
[##################################################]  100%

--expertを指定することで、インストールと同時に設定できます。

  • Would you like to specify listening address (or host) for Projector?
    • デフォルトだとすべてのアドレスで開けるようになってしまいますが、絞っておいたほうが安全だと思います。IDEが開ける == 任意のコードが実行できる上、ターミナルも開けるので扱いには注意が必要です。私はTailscaleで降ってきているIPアドレスを指定しています。
  • Would you like to set password for connection?
    • これも一応指定しておいたほうが無難

HTTPSで接続しないとクリップボードが使えないので、証明書を設定しておきます。クライアント側にmkcertをインストールし、

(client)$ mkcert goland.example

を実行するとgoland.example.pem, goland.example-key.pemが生成されます。もちろん、ドメインを持っている方はLet's Encryptなどで発行してもいいです。
適宜、サーバ側に持っていって、projector install-certificateでインストールします。

$ projector install-certificate --certificate goland.example.pem --key goland.example-key.pem GoLand
Installing goland.example.pem certificate to config GoLand

projector runで起動です。

$ projector run GoLand
Configuration name: GoLand
Checking for updates ... done.
To access IDE, open in browser
        https://localhost:9999/?token=password
        https://127.0.0.1:9999/?token=password
        https://100.xxx.xxx.xxx:9999/?token=password

To see Projector logs in realtime run
        tail -f "/home/ryotarai/.projector/configs/GoLand/projector.log"

Exit IDE or press Ctrl+C to stop Projector.

HTTPSで接続するため、クライアント側の/etc/hostsに先程証明書を作ったドメインを書いておきます。

(client) $ echo '100.xxx.xxx.xxx goland.example' | sudo tee -a /etc/hosts

ブラウザから接続する

ブラウザで https://goland.example:9999/?token=password (passwordはインストール時に入力したパスワード)を開いて、ライセンス承諾画面が出たらokです。普通のJetBrains IDEのように進めます。

クライアントアプリを使う

ブラウザを使わずに専用のクライアントを使うこともできます。

https://github.com/JetBrains/projector-client/releases

からダウンロード、起動し、先程のURLを入力すれば接続できます。

In addition to the expected benefits like Dock/Taskbar integration, this app supports keyboard shortcuts such as Ctrl+W/Cmd+W, which are usually unavailable in the browser client.
https://blog.jetbrains.com/blog/2021/03/11/projector-is-out/ より)

とのことです。

メモ

  • Waiting for response from wss://goland.example:9999...で固まる場合はリロードする
  • Pluginインストール後のRestartはうまく行かないので、projectorコマンドごと再起動する
  • 今の所日本語入力はできない(実装が進んでいるようです) https://youtrack.jetbrains.com/issue/PRJ-330
  • サーバ側は~/.projectorに諸々保存される

Discussion