WSL2+pnpm環境でJetbrains IDEの補完が効かなくなったら
WSL2上のpnpmのシンボリックリンクが、Win側から参照できない
WSL2上のディレクトリにおいてWeb開発をしている際、pnpmを使っているとパッケージをインストールしたにも関わらず、Webstormで以下のようなエラーが発生することがあります。
pnpm install
を何度やっても解決せず、IDEのNode interpreterの設定がWSLのUbuntu側のNodeに指定されていて、パッケージマネージャーもUbuntuの /usr/bin/pnpm
に指定しても状況は改善しません。
この問題はYoutrackにも報告されています。pnpm
はnpm
やyarn
と異なり、node_modules
の中身を別のディレクトリに保存してリンクすることでディスク容量を節約できます[1]が、WSL2のシンボリックリンクはWindows側から参照することができないため、IDEでこのような問題が発生します。
ただWSL2の問題に起因しているため、IDE側でどうにかできる問題でもなさそうです。WSL2のGithubではこのissueは2020年に挙げられていますが、未だにOpenのままで解決していません。
UbuntuにWebstormをインストールして wslg
で表示を持ってくることもできなくはないですが、どう考えても荒業です。日本語環境だとIME周りの面倒が発生する可能性も否定できないので、あまりやりたくはないです…
解決法: Gatewayを使う
そこで Jetbrains Gateway を使います。Win側のIDEからシンボリックリンクの先は読めませんが、Gatewayを使ってWSL2でIDEを動かしてしまえば問題ありません。
Gatewayをインストール後、画面に従ってWSL2への接続を確立します。接続したら使いたいIDEとプロジェクトのディレクトリを指定することで操作可能になります。
WSL2に sshd
を建てて穴を空けてSSH通信するのはセキュリティ的にちょっと不安なので、直接接続する機能があるのはうれしいですね。
Gateway
はまだbeta版なので、使用には少し注意が必要です。ただ今のところはIDEがフリーズして落ちるようなことは遭遇しておらず、ほぼ問題なく使えました。一度だけエラー箇所にカーソルを合わせても何も表示されないバグがありましたが、自環境ではIDEの再起動で治りました。
おまけ: pnpmを使わない
これが最も確実と言えば確実なのですが、 pnpm
を使わなければこの問題は発生しないので、 npm
, yarn
に出戻りするのもアリです。WSL2環境は色々つらいことが多いので…
Discussion