はじめに
この記事はアドベントカレンダー2024 13日目の記事です。
こんにちは。@zoi_dayo です。日頃は競技プログラミングやWeb開発、ほか色々をのんびりやっています。
さて、皆さんの中に「開発用PCとしてノートPCの性能に不満がある」「デスクトップならいい感じだが外出先で触れない」といったことに困っている人はいらっしゃるでしょうか。デスクトップの性能をノートPCから使えたらいいな...と思っているはずです。この記事では、そんなときに役立つかもしれないアプリ達を紹介していきます!
環境紹介
僕の場合、ノートとデスクトップは以下のような感じでした。
ノート
- M1 Macbook Air
- メモリ8GB
- ストレージ256GB (ただし空きは0~5GB)
デスクトップ
- Intel Core i7 9700K
- メモリ32GB
- ストレージ1TB (+HDDいくつか)
M1チップはかなり強いので、性能はそれなりにあります。ただ、メモリとストレージのせいで開発には少し厳しい感じでした... Android Emuratorも起動に失敗し、ストレージ不足によりWordとExcelは解雇され、WebStormを開くとメモリとストレージが枯渇してブラウザの設定が吹き飛びます。困りました。Macbook Air、めちゃくちゃ軽くて持ち運びやすいのですが...
対してデスクトップ君は、たしか5年少し前に組んだ自作機で、CPUはまあ使えるけれどもめちゃくちゃ型落ちです。しかし、ゲームもあまりしないので、ストレージとメモリには困っていません。ノートのときと対照的ですね。
ので、当然「デスクトップを自宅で起動させておき、そこにMacbookからアクセスすればいいのでは!?」という発想になるわけです。
リモートデスクトップ
まず真っ先に思いつくのはリモートデスクトップですね。画面自体をリアルタイムで転送してきて操作を送り返す、一番わかりやすいリモートアクセスです。マウスとキーボードが使えるので何でもできるというわけです。
リモートデスクトップにもいくつかあるのですが、一番楽なのはChrome Remote Desktopではないでしょうか。Microsoft Remote DesktopのようにOSを気にする必要もなく、Googleアカウントで使えるのでTeamViewerのように専用アカウントを作らなくてもいいはずです。(Microsoft Remote DesktopはWindows 11 ProなどProエディションにしか接続できません。)
ところが、使ってみるとわかるのですが、遅延がかなり不快です。多少操作するくらいなら良いのですが、コードを書くとなると文字の遅れがめちゃくちゃ気になります。特に文字を消す時、どこで止めればよいのか全くわかりません... しかも僕の場合、デスクトップはデュアルディスプレイにしていました。こうなると、Macbookの画面の大きさとぜんぜん違うので、手元のPCで操作してる感が全くでません。
SSH
さて、先ほど遅延が大きかったのは、転送データ量が多かったからでしょう。目的はYoutube視聴や資料閲覧ではなくコーディングです。となれば文字だけ送れば十分でしょう。みんな大好きSSHの時間です。
問題があるとすれば、いつものエディタが使えないことですね。大問題です。困りました。(Vimを使えばよい、というのはそうなのですが、JetBrainsのIDEを使いたい気持ちがあります)
しかも、Macbookをスリープしているとすぐにコネクションが切断され、つなぎ直す必要があります。面倒ですね。
JetBrains Gateway
ここで登場、JetBrains Gatewayです。皆さんご存知でしょうか...?
VSCodeでいうVSCode Remote Developmentだと思います。(こちらは使ったことがないのでなんとも言えないのですが)
つまり、エディタ本体はサーバー側で(ヘッドレスで)実行しておいて、編集中のコードや補完など、画面表示に必要な情報だけをクライアントに送れば遅延を減らしつついつものエディタみたいに使えるというわけです! 言語ごとのSDKなどもリモートに乗っていれば十分なので、手元のストレージもほとんど減りません。嬉しすぎます。
では使ってみましょう。まず、Windows上でWSLを起動しておき、SSHできるようにしておきます。(省略)
そこまでできていれば、手元にJetBrains Gatewayをインストールし、SSH認証情報を入れてあげればすべてどうにかしてくれます。わざわざSSH叩いて何かをインストールしなくていいのは助かりますね。
ここで、使えるエディタは以下です。
- IntelliJ IDEA Ultimate
- PyCharm Professional
- GoLand
- WebStorm
- CLion
- PhpStorm
- RubyMine
- Rider
いっぱいありますね。しかし、GoogleがカスタムしているAndroid Studioは含まれていません。根本は同じとはいえ少し難しいのでしょうか...
リモートビルド
VSCodeもJetBrainsも、そしてもちろんVimもリモートである程度低遅延で使えるということになりました。最後に残ったのはAndroid Studioで、こればかりはどうしようもありません。
しょうがないので、ビルドの負担だけでもサーバーに押し付けましょう。僕は主にFlutterを使っているので、サーバーにすべてのファイルを送り込み、flutter build apk --debug
をして完成したapkだけ落としてくればよいです。ので、以下のコマンドを実行できるようにしておけばよいです。
rsync -C --filter=":- .gitignore" -a --info=progress2 -r -e ssh . ***@***.***.***.***:/tmp/appName \
&& ssh ***@***.***.***.*** "source ~/.zshrc && cd /tmp/appName && flutter build apk --debug" \
&& mkdir -p ./build/app/outputs/flutter-apk/ \
&& rsync -a --info=progress2 -e ssh ***@***.***.***.***:/tmp/appName/build/app/outputs/flutter-apk/app-debug.apk ./build/app/outputs/flutter-apk/app-debug.apk \
&& adb connect ************** \
&& adb -s ************** install -r ./build/app/outputs/flutter-apk/app-debug.apk
これで多少は開発しやすくなりました。めでたしめでたし。
さいごに
めでたく終わったんですが、最近Macbookを買い替えたので今は使ってません。そ、そんな...
明日は @dan_dan さん、 @TwoSquirrels さんの記事が出るらしいです。楽しみ〜〜!!