WSL2でIntelliJを使うにあたっていろいろ悩んだ話(Lambig)

本記事は
https://qiita.com/advent-calendar/2023/challenge_club
参加記事です。

こんにちは、株式会社クラス システム開発本部 Lambigです。

弊社ではansibleなどを使ったMac/Linuxベースの開発環境構築手段が整備されており、それらのOSであればすんなり開発環境が確保できるようになっています。……ということを知っていればMacを開発機として借りていたのですが……。

返らぬ繰り言は置いておいて、Windowsで環境構築をしようと思った場合はいくつか余計に踏まざるを得ないステップがあるわけです。とはいえ私は大いなるものぐさなので、そのあたりの手段を新しく整備するよりも安直に「WSLでやったらいいじゃん」という方に流れました。

WSL上のプロジェクトをIntelliJで開発する

かくてWSL(ちなみにDistroはDockerイメージから引っ張り出したAmazon Linux2です そろそろ2023にしないと)上で環境構築をさくっと行い、いざ開発に入った……わけなのですがここで問題が出来します。
Java開発を行うので、当然IntelliJを用いたいのですが、WSL上にあるので少し通常とは違う使い方になります。ざっくり思いついた方法から、現状試したのは以下。

  1. WSL上のプロジェクトをWindows上のIntelliJで直接覗いて開発する

  2. WSL上でIntelliJをホスト起動し、JetBrains Gatewayを利用してJetBrains Clientから開発を行う

1. WSL上のプロジェクトをWindows上のIntelliJで直接覗いて開発する

これが出来たら最高でした(would have been awesome)。最近のIntelliJのバージョンではWSL上のプロジェクトを直接開発できるようになっています。ファイルアクセス問題を何らかの方法で解決したんでしょうか。JDKだけはWindows側で用意してやる必要がありますが、別に大したことではないですね。開発機だとindexの作成がめっためたに遅いのですが、私用デスクトップではバッチリ動きました(ファイアウォール周りの設定が怪しい)。なによりコード補完と型ヒントがバシバシ効くのが最高ですし、ラグもありません。

Ebean Enhancerがへそを曲げる

ここで「完」とならなかったのが悲しいところです。このプロダクトではORMにEbeanを利用しています。この方法で開発しても、EbeanのEntity定義から対応する各Queryクラスの生成は正しく行えるのですが、どうしたわけかIntelliJが生成されたQueryクラスを認識してくれません。生成されたクラスの認識はEbean Enhancerがやってくれているはずなのですが、この方法に限ってはうまく行きません。 gradleからサーバを立ち上げることは可能とはいえ、これではコンパイルエラーがとても読めた状態ではなくなるため、このアプローチは捨てざるを得なくなりました。

2. WSL上でIntelliJをホスト起動し、JetBrains Gatewayを利用してJetBrains Clientから開発を行う

標準的にはコレですね。変な挙動等は特にしませんし、先ほどのEbeanのQueryクラスも問題なく認識します。では何が気に食わないのかというと

遅い

Latency表示が常に真っ赤になるか、Resource Critical表示が出るぐらいおっそいです。

型ヒントがほぼない

RxJavaでメソッドチェーンを使っていると型ヒントがとってもとってもほしいのですが、そのヘんをJetBrains Clientはカバーしてくれないようです。型の入れ子が深くなると心眼力が問われます。

一部のプラグインが使えない

地味に厄介なやつです。Hostに仕込んでそれでOKとなるものもありますが……

現状の結論

Ebean使ってなくてマシンパワーがそれなりにあるなら最近のバージョンのIntelliJで直接開発するのが楽しいです。それ以外はJetBrains Clientで我慢するしかないようですね。

今後の展望

実はもう一つアプローチを考えていて、VcXsrvを使ってWSLの画面を引っ張り出すのが一番楽なんじゃないかなと考えています。Amazon Linuxの場合、Ubuntuほどさくっとは行かないようなので諸々調査中、結論が出たらまた続報を出せればと思います。

宣伝

12/13 19:00~株式会社クラスと株式会社アイスタイルの有志による合同勉強会を開催します。オンライン&視聴枠Freeなので、興味があれば是非。
https://clas-istyle.connpass.com/event/303453/

この記事が気に入ったらサポートをしてみませんか?