3行で
- リモートの潤沢なリソースを使って開発したい!
- 軽いのが良い!
- IntelliJ Gatewayを試したよ
背景
普段はWindowsのデスクトップマシンでIntelliJ IDEAを使用して開発しています。外出することはほぼありませんが、外出の際はリソースの少ないノートPCからデスクトップへリモートデスクトップして開発していました。 しかし、画面全体の転送は要らないし、IDEの情報だけ送って開発できないものかと思い、TLで聞いてみたところ、IntelliJ Gatewayなるものの存在を教えてもらえ、さっそく導入してみました。
使ったことないけど、JetBrains Gatewayというのがあるらしいよ
— Yuichi Sakuraba (@skrb) 2023年10月11日
こういうのです?https://t.co/8wUb9mwb9K
— ゆらゆう (@yurau75) 2023年10月11日
環境
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 などを使って自宅に接続してからデスクトップにアクセスしてみてください。