#chiroito ’s blog

Java を中心とした趣味の技術について

JetBrains GatewayとIntelliJ IDEAでリモート開発

3行で

  • リモートの潤沢なリソースを使って開発したい!
  • 軽いのが良い!
  • IntelliJ Gatewayを試したよ

背景

普段はWindowsのデスクトップマシンでIntelliJ IDEAを使用して開発しています。外出することはほぼありませんが、外出の際はリソースの少ないノートPCからデスクトップへリモートデスクトップして開発していました。 しかし、画面全体の転送は要らないし、IDEの情報だけ送って開発できないものかと思い、TLで聞いてみたところ、IntelliJ Gatewayなるものの存在を教えてもらえ、さっそく導入してみました。

環境

JetBrains Gatewayを起動すると、以下のようなウインドウが表示されます。

JetBrains Space、WSL、SSH Connectionの順で試してみました。

  • JetBrains Spaceは別途リモートサーバが必要そうで、既存のデスクトップは活用できなさそうでした。
  • WSL は同一 Windows からしかアクセスできなさそうでした。

(上記違ってたらだれか教えてください)

なので、今回は SSH を使って以下のような環境を構築するようにしました。

(ペンギンの絵はChatGPTが作成)

環境構築

Mac や Linux のデスクトップ環境ならSSHサーバを含んでいると思いますが(使ったことないのでイメージです)、Windows は標準でSSHサーバを含んでません。そのため、Windows Subsystem for Linux (WSL)上にSSHサーバを構築します。

SSHサーバ

まずは、 WSL (赤枠)の準備をします。

WSL 上の Ubuntu で以下のように必要なパッケージをインストールします。

> apt-get install openssh-server net-tools

SSH サーバが通信を受け付けているかを確認します。

> netstat -tl | grep ssh
tcp        0      0 0.0.0.0:ssh             0.0.0.0:*               LISTEN
tcp6       0      0 [::]:ssh                [::]:*                  LISTEN

SSH でアクセスするユーザを作成します。以下の例ではchiroitoです。

> adduser chiroito
Adding user `chiroito' ...
Adding new group `chiroito' (1000) ...
Adding new user `chiroito' (1000) with group `chiroito' ...
Creating home directory `/home/chiroito' ...
Copying files from `/etc/skel' ...
New password:
Retype new password:
passwd: password updated successfully
Changing the user information for chiroito
Enter the new value, or press ENTER for the default
        Full Name []: Chihiro Ito
        Room Number []:
        Work Phone []:
        Home Phone []:
        Other []:
Is the information correct? [Y/n] y

これでWSL上でSSHを受け付ける準備は出来ました。

転送

次に、Windows の外からWSL上の SSH にアクセスできるようにしましょう。これは、Windowsが受け付けた通信を WSL 側へ転送するように設定します。

この転送には WSL のIPアドレスが必要です。

(このIPアドレスは変わる事があるらしいので、変わっても大丈夫なように設定が必要ですが、今回はしていません)

> ip addr show eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:15:5d:67:02:59 brd ff:ff:ff:ff:ff:ff
    inet 192.168.154.2/20 brd 192.168.159.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::215:5dff:fe67:259/64 scope link
       valid_lft forever preferred_lft forever

WSL の IP アドレスは192.168.154.2でした。

このIPアドレスを IP という変数に入れておきましょう。

IP=192.168.154.2

次に、Windows が受け付けた通信を、WSL に転送する設定をします。

まずは、現状の設定を確認してみましょう。以下のコマンドを WSL 上で実行します

> netsh.exe interface portproxy show v4tov4

転送の設定が何もなければ上記のようになにも表示されません。

次に、転送の設定をしてみましょう。Windows の全てのIPアドレス(listenaddress=*)の 22 番ポートの通信(listenport=22)を、WSL の IPアドレス(connectaddress=$IP)の 22 番ポート(connectport=22)へ転送しています。

> netsh.exe interface portproxy add v4tov4 listenaddress=* listenport=22 connectaddress=$IP connectport=22

もう一度転送の設定を確認してみましょう。

> netsh.exe interface portproxy show v4tov4

ipv4 をリッスンする:         ipv4 に接続する:

Address         Port        Address         Port
--------------- ----------  --------------- ----------
*               22          192.168.154.2   22

転送の設定はこれで終わりです。

ファイアウォール(必要であれば)

Windows のファイアウォールを有効にしている場合は、その設定も必要です。

Windows標準ではないソフトを使っている場合はそちらの設定が必要です。Windows標準の場合は、Windows で WF.mscを実行すると以下のようなウインドウが表示されます。

左側の受信の規則をクリックすると、以下のように画面が変わります。

右側の新しい規則... をクリックします。

ダイアログが表示されるので、以下のように設定しましょう。

  • ポート を選択
  • TCP を選択
  • 特定のローカルポートに 22 を設定
  • 接続を許可する を選択
  • ドメイン/プライベート/パブリック (セキュリティを気にする場合はちゃんと設定してください)
  • 名前を適当に設定

完了を押すとファイアウォールの設定は完了です。

JetBrains Gateway

次は、ついにノートPC側で JetBrains Gatewayの設定です。

ノートPCでJetBrains Gatewayを実行します。

New Connectionをクリックします。

最初はConnectionのドロップダウンリストが空なので、右側の歯車をクリックして作成します。

左上の+をクリックして、図のようにSSHに必要な情報を入力します。Host は WSL が動いている方の Windows の IP アドレスです。デスクトップのIP が分からない場合は、デスクトップで ipconfigコマンドを実行して確認しましょう。デスクトップがDHCPでIPを割り当てられている場合は固定IPにするか、ホスト名を使うと良いかもしれません。

設定が終わったら TestConnection を押します。

このダイアログが出れば成功です。OKをクリックして、画面を戻りましょう。

Connectionのドロップダウンリストで先ほど作ったものを選択します。

あとは、Check Connectioni and Continue をクリックします。

IDEとプロジェクトのあるディレクトリを選択して、Download IDE and Connectをクリックします。

なお、Windows上のディレクトリは、WSL の /mnt ディレクトリ以下にあります。

ダウンロードが終わると、以下のようにSSHのプロジェクトが作成されます。

また、同時に指定した IDE が開きます。

1度目はダウンロードに時間がかかりますが、2度目からは素早く開きます。

IDE自体もかなりサクサク動きます。

これで、ノートPCから離れたところにあるデスクトップのリソースを使って開発できるようになりました。外出先からの場合は VPN などを使って自宅に接続してからデスクトップにアクセスしてみてください。

JVM Language Summit 2023と OpenJDK Comitters' Workshop に参加してきました

8月7日(月)~9日(水) に開催された JVM Language Summit 2023 (JVMLS) と、10日(木)~11日(金)に開催された OpenJDK Comitters' Workshop (OCW) へ参加してきました。

JVM Language Summit は、OpenJDK の超ディープで難易度の高い技術的な話が聞けるカンファレンスです。 動画は公開される予定と聞いていますが、現段階ではまだのようです。

OpenJDK Comitters' Workshop はOpenJDKのコミッタがお互いの悩みなどを議題に挙げてみんなに相談します。

JVMLSではすごい話が聞けるのもそうですが、その一部は公開されます。参加すること、公開されないセッションやOCWでの情報、世界的なエンジニアたちと交流ができるため、それだけでも非常に勉強になり、参加する価値があります。

内容はかなりディープなので、ブログでは説明しきれないので省略します。

以下は参加したくなった人への情報です。

どちらも会場は、サンタクララにあるOracle社です。

日本からはこの様な位置になります。

行き方

次に、行き方について紹介します。

飛行機

近くに国際空港は2つあります。 最も近い San José Mineta International Airport (地図上の赤い飛行機)と、少し離れた San Francisco International Airport (地図上の青い飛行機)です。

San José Mineta International Airport (SJC) は 昔からJAL は就航しておらず、ANA は昔はありましたが現在は開設を延期しています。現時点では、ZIPAIRかアメリカの別の空港から乗り換えるしかありません。

San Francisco International Airport (SFO)は、JAL も ANA も運航しており、本数も多いです。

今回は、羽田-SFO便で行きました。

空港からの移動

東京のように公共機関はありません。基本的にレンタカーや Uber や Lift での移動になります。

SJC からは Uber などでホテルに向かうことになります。

SFO からホテルへ Uber や Lift でホテルへ向かうのが一番早いですが、高いです。 そのため、ホテルの近くまで電車で移動することになります。 このエリアは、Bart と Caltrain という電車があります。

会場の近くは Caltrain が走っていますが、SFO には Caltrain の駅はありません。そのため、1 駅先にある Millbrae という駅(地図上の緑の電車)へ Bart で向かいます。

しかし、SFO から BART に乗るのが厄介で、地図にあるように赤い線の電車しか止まらないようです。なので、赤い電車が来るのを待たないといけません。

BART に乗って Millbrae に到着すると Caltrain に乗り換えられます。この Cartrain も厄介で、時間によっては 1 時間に 2 本ぐらいしかありません。しかも、普通と快速が交互に走っているので、30 分間隔とかではなくて、駅によっては 10 分後に電車が来るけど、その次は 50 分後 みたいな感じになります。 Millbrae 駅は周りに何もないので、ホームで気長に待ちましょう。

会場の近くは Lawrence 駅(地図上右下の赤い電車)と Santa Clara 駅(地図上右下の青い電車)が最寄りです。とはいえ 6 km くらいあるので、車を呼びましょう。

このあたりは車を呼ぶ激戦区なようで、追加料金を付与しないと取られまくりで全然車が来てくれませんでした。

宿泊先

会場の近くにはそんなに宿泊先は多くありません。慣れていれば遠くから歩くこともできますが、初めのうちは近くの宿泊先が良いでしょう。

会場は地図上の黄色い星マークです。

宿泊するなら、Hyatt House Santa Clara (地図上の赤いベッド)と Element Santa Clara (地図上の青いベッド)が良いでしょう。

私は両方とも泊まったことがありますが、個人的には、スーパーやお店などがたくさんある Hyatt House がお奨めです。朝ご飯もこちらの方が美味しいです。ですが、高い。

少しでも安く抑えたい場合は Element が良いです。こちらもかなりきれいなホテルです。

最後に

ぜひみなさん、来年は参加しましょう!