dorapon2000’s diary

忘備録的な。セキュリティとかネットワークすきです。

WSL 上にインストールした Rust を VSCode の rust-analyzer 拡張機能に認識させる

WSL 上に Rust をインストール済みで cargo コマンドは認識するのに、VSCode の rust-analyzer には認識できていない。という状況になりました。よくありそうなシチュエーションだと思うんですが、直接的な解決方法の記事が出てこなかったので、まとめます。

前提

  • Windows 11
  • WSL 2.5.9.0
  • VSCode 1.101.1
  • rust-analyzer 0.3.2500
  • rustc 1.87.0
  • cargo 1.87.0

やろうとしたこと

Windows のホームディレクトリ配下で Rust ファイルを作成しており、それを VSCode で開いていました(WSL 管理のフォルダではないという意味です)。Rust は WSL のシェル上にインストールしており、そのシェルを VSCode 内のターミナルで開き、そこから Rust ファイルの実行をしていました。

後半の説明が分かりづらいですが、下図のとおりです。つまり、VSCode 使っている人ならおなじみのシチュエーションということです。

今度は型の情報などを見るべく拡張機能の rust-analyzer を入れました。 自分はてっきりいれるだけで便利な機能が使えると思っていたんですが、うまく動きませんでした。

症状

VSCode のウィンドウの左下に表示されている rust-analyzer の文字が赤く表示されていました。その文字をクリックするとエラーメッセージが表示されています。スクショは取り忘れてしまいました。

2025-06-21T17:23:36.046253+09:00 ERROR failed fetching toolchain version for ManifestPath { file: AbsPathBuf("C:\\Users\\dorap\\Documents\\program\\rust\\lifegame-rs\\Cargo.toml") } workspace e=Failed to query rust toolchain version via "cargo" "--version", is your toolchain setup correctly?
2025-06-21T17:23:36.0479564+09:00 ERROR failed fetching data layout for ManifestPath { file: AbsPathBuf("C:\\Users\\dorap\\Documents\\program\\rust\\lifegame-rs\\Cargo.toml") } workspace e=unable to fetch target-data-layout via "rustc" "-Z" "unstable-options" "--print" "target-spec-json"
2025-06-21T17:23:36.0537314+09:00 ERROR FetchWorkspaceError: rust-analyzer failed to load workspace: Failed to load the project at C:\Users\dorap\Documents\program\rust\lifegame-rs\Cargo.toml: Failed to read Cargo metadata from Cargo.toml file C:\Users\dorap\Documents\program\rust\lifegame-rs\Cargo.toml, None: Failed to run "cargo" "metadata" "--format-version" "1" "--manifest-path" "C:\\Users\\dorap\\Documents\\program\\rust\\lifegame-rs\\Cargo.toml": program not found

イマイチよくわからないエラーだったんですが、ChatGPT 曰く拡張機能が cargo コマンドを見つけられてないみたいでした。

解決方法

まず結論から。WSL から code コマンドで VSCode を開くと解決しました。

# 今回の場合は
cd /mnt/c/Users/dorap/Documents/program/rust/lifegame-rs
code .

ただし、自分の WSL 環境では code コマンドがデフォルトで使えなかったので、設定ファイルを変更しました。/etc/wsl.conf の appendWindowsPath を false から true に変更します。ググった記事にある、コマンドパレットで Shell Command: Install 'code' command in PATH という選択肢が出てこないのがハマりポイントです。

❯ sudo vim /etc/wsl.conf
❯ cat /etc/wsl.conf
[interop]
appendWindowsPath = true

そして、念の為 PC を再起動します。

code コマンドから Rust プロジェクトフォルダを開くと、左下にあった赤文字の rust-analyzer がなくなりますし、rust のファイル内で適当なものにマウスオーバーするとポップアップで説明がされます。

どうやら、リモート接続で開かれているみたいです。

考察

おそらく、Windows に cargo コマンドをインストールしたのではなく、WSL 上にインストールしたから、Windows 上で開いた VSCode は、その cargo コマンドを認識できなかったのだと思います。なので、WSL を別サーバに見立てリモート接続して、それなら cargo が入っている環境だから rust-analyzer ってことかと。