📦

WSL2+pnpm環境でJetbrains IDEの補完が効かなくなったら

2023/12/25に公開

WSL2上のpnpmのシンボリックリンクが、Win側から参照できない

WSL2上のディレクトリにおいてWeb開発をしている際、pnpmを使っているとパッケージをインストールしたにも関わらず、Webstormで以下のようなエラーが発生することがあります。

error

pnpm install を何度やっても解決せず、IDEのNode interpreterの設定がWSLのUbuntu側のNodeに指定されていて、パッケージマネージャーもUbuntuの /usr/bin/pnpm に指定しても状況は改善しません。

この問題はYoutrackにも報告されています。pnpmnpmyarnと異なり、node_modulesの中身を別のディレクトリに保存してリンクすることでディスク容量を節約できます[1]が、WSL2のシンボリックリンクはWindows側から参照することができないため、IDEでこのような問題が発生します。

https://youtrack.jetbrains.com/issue/WEB-49919/WSL2-Packages-installed-using-pnpm-not-detected

ただWSL2の問題に起因しているため、IDE側でどうにかできる問題でもなさそうです。WSL2のGithubではこのissueは2020年に挙げられていますが、未だにOpenのままで解決していません。

https://github.com/microsoft/WSL/issues/5118

UbuntuにWebstormをインストールして wslg で表示を持ってくることもできなくはないですが、どう考えても荒業です。日本語環境だとIME周りの面倒が発生する可能性も否定できないので、あまりやりたくはないです…

解決法: Gatewayを使う

そこで Jetbrains Gateway を使います。Win側のIDEからシンボリックリンクの先は読めませんが、Gatewayを使ってWSL2でIDEを動かしてしまえば問題ありません。

Gatewayをインストール後、画面に従ってWSL2への接続を確立します。接続したら使いたいIDEとプロジェクトのディレクトリを指定することで操作可能になります。

gateway

WSL2に sshd を建てて穴を空けてSSH通信するのはセキュリティ的にちょっと不安なので、直接接続する機能があるのはうれしいですね。

Gateway はまだbeta版なので、使用には少し注意が必要です。ただ今のところはIDEがフリーズして落ちるようなことは遭遇しておらず、ほぼ問題なく使えました。一度だけエラー箇所にカーソルを合わせても何も表示されないバグがありましたが、自環境ではIDEの再起動で治りました。

おまけ: pnpmを使わない

これが最も確実と言えば確実なのですが、 pnpm を使わなければこの問題は発生しないので、 npm, yarn に出戻りするのもアリです。WSL2環境は色々つらいことが多いので…

脚注
  1. https://pnpm.io/motivation ↩︎

Discussion