VS Code 拡張機能の推奨設定

Tauri 2 開発向けの VS Code 拡張(Tauri、rust-analyzer、CodeLLDB)と、extensions.json・settings.json・launch.json で Rust をデバッグする設定例。

環境構築 対象: Tauri 2.x 更新日: 読了目安: 約6分 env-011
目次
  1. 1. 入れる拡張機能
  2. 2. settings.json の推奨設定
  3. 3. launch.json で Rust 側をデバッグする
  4. .vscode/tasks.json
  5. .vscode/launch.json (macOS / Linux: CodeLLDB)
  6. Windows: MSVC デバッガ
  7. 動作確認
  8. よくあるエラーと対処法
  9. rust-analyzer が failed to discover workspace という趣旨の通知を出す
  10. 保存するたびに tauri dev が Blocking waiting for file lock on build directory で待たされる
  11. ブレークポイントが Unverified のまま止まらない
  12. 注意点
  13. 関連レシピ

Tauri プロジェクトは TypeScript と Rust が 1 つのリポジトリに同居するため、VS Code 側も両方の言語サポートを揃える必要があります。拡張機能の選定に加えて、チームで共有する .vscode/extensions.json、rust-analyzer を快適にする settings.json、console.log では追えない Rust 側の問題にブレークポイントを張る launch.json / tasks.json をまとめます。

1. 入れる拡張機能

拡張ID役割
rust-analyzerrust-lang.rust-analyzerRust の補完・型表示・定義ジャンプ・保存時 cargo check
Tauritauri-apps.tauri-vscodetauri.conf.json のスキーマ補完と検証、コマンドパレットから dev / build
CodeLLDBvadimcn.vscode-lldbRust バイナリのデバッガ (macOS / Linux)
C/C++ms-vscode.cpptoolsWindows で MSVC デバッガ (cppvsdbg) を使う場合
Even Better TOMLtamasfe.even-better-tomlCargo.toml のハイライトと補完

create-tauri-app が生成する .vscode/extensions.json には最初の 2 つだけが書かれています。増やしてリポジトリに含めておくと、クローンした人に「推奨拡張をインストールしますか」と通知されます。

{
  "recommendations": [
    "tauri-apps.tauri-vscode",
    "rust-lang.rust-analyzer",
    "vadimcn.vscode-lldb",
    "tamasfe.even-better-toml"
  ]
}

2. settings.json の推奨設定

.vscode/settings.json (プロジェクト単位) に置きます。

{
  "rust-analyzer.linkedProjects": ["./src-tauri/Cargo.toml"],
  "rust-analyzer.check.command": "clippy",
  "rust-analyzer.cargo.targetDir": true,
  "[rust]": {
    "editor.defaultFormatter": "rust-lang.rust-analyzer",
    "editor.formatOnSave": true
  },
  "files.watcherExclude": {
    "**/src-tauri/target/**": true
  }
}
  • linkedProjects: Cargo プロジェクトがワークスペース直下ではなく src-tauri/ にあることを明示します。通常は自動検出されますが、モノレポや複数フォルダを開いたときに workspace を見失うのを防げます。
  • check.command: "clippy": 保存時に cargo clippy を走らせ、Tauri コマンドでありがちな &String 引数などの指摘を早めに受け取ります。
  • cargo.targetDir: true: rust-analyzer 専用の target/rust-analyzer/ を使い、npm run tauri dev のコンパイルと target/ のロックを奪い合わないようにします。ディスクは倍使いますが、保存のたびに dev の再ビルドが待たされる問題が消えます。
  • files.watcherExclude: target/ は数 GB になるので監視対象から外します。

3. launch.json で Rust 側をデバッグする

tauri dev の代わりに VS Code のデバッガから Cargo を直接呼びます。Tauri CLI を経由しないため、beforeDevCommand (Vite の起動) はタスクとして自分で用意します。

.vscode/tasks.json

{
  "version": "2.0.0",
  "tasks": [
    {
      "label": "ui:dev",
      "type": "shell",
      "isBackground": true,
      "command": "npm",
      "args": ["run", "dev"],
      "problemMatcher": {
        "pattern": { "regexp": "^$" },
        "background": {
          "activeOnStart": true,
          "beginsPattern": "VITE",
          "endsPattern": "Local:"
        }
      }
    }
  ]
}

problemMatcher.background は「Vite が Local: を出力したら準備完了」と VS Code に伝えるものです。公式の例にはありませんが、これがないと VS Code が「タスクの完了を追跡できません」と毎回確認してきます。

.vscode/launch.json (macOS / Linux: CodeLLDB)

{
  "version": "0.2.0",
  "configurations": [
    {
      "type": "lldb",
      "request": "launch",
      "name": "Tauri Development Debug",
      "cargo": {
        "args": ["build", "--manifest-path=./src-tauri/Cargo.toml", "--no-default-features"]
      },
      "preLaunchTask": "ui:dev"
    }
  ]
}

Windows: MSVC デバッガ

CodeLLDB は MSVC の PDB を読み切れないことがあるため、Windows では ms-vscode.cpptools の cppvsdbg を使います。この構成はビルドを行わないので、事前に cargo build --manifest-path src-tauri/Cargo.toml を済ませておきます。

{
  "name": "Launch App Debug",
  "type": "cppvsdbg",
  "request": "launch",
  "program": "${workspaceRoot}/src-tauri/target/debug/my-app.exe",
  "cwd": "${workspaceRoot}",
  "preLaunchTask": "ui:dev"
}

program の exe 名は Cargo.toml の [package] name です。

動作確認

  1. src-tauri/src/lib.rs の greet 関数の行番号左をクリックしてブレークポイントを置く。
  2. 「実行とデバッグ」から「Tauri Development Debug」を選んで F5。
  3. ターミナルに Vite が起動し、続いて Cargo のビルドが走ってウィンドウが開く。
  4. 画面で名前を入力して Greet を押すと greet の行で停止し、name の値がサイドバーに表示される。

よくあるエラーと対処法

rust-analyzer が failed to discover workspace という趣旨の通知を出す

VS Code で開いたフォルダ直下に Cargo.toml がないときに出ます。rust-analyzer.linkedProjects を設定するか、src-tauri/ を追加のワークスペースフォルダとして開きます。

保存するたびに tauri dev が Blocking waiting for file lock on build directory で待たされる

rust-analyzer の cargo check と Tauri の cargo build が同じ target/ を奪い合っています。rust-analyzer.cargo.targetDir: true で分離してください。

ブレークポイントが Unverified のまま止まらない

--release でビルドしたバイナリはデバッグ情報が削られています。開発用の構成 (--release なし) を使います。[profile.dev] で debug = 0 にしている場合も戻します。

注意点

  • デバッガから起動した場合、tauri dev の Rust ファイル監視 (自動再ビルド) は働きません。Rust を書き換えたら一度停止して再度 F5 です。
  • preLaunchTask で起動した Vite はデバッグ終了後も動き続けます。ターミナルタブから手動で止めてください。
  • tauri.conf.json は先頭の "$schema": "https://schema.tauri.app/config/2" があれば、Tauri 拡張なしでも VS Code 標準の JSON 検証が効きます。

関連レシピ

参考リンク(公式ドキュメント)

Web Ninja

この記事を書いた人

Web Ninja ウェブエンジニア (Web Engineer)

会社員ネットワークエンジニアから独立してかれこれ 25 年以上 Web エンジニアとして活動中。普段は JavaScript と Node.js を自在に操り、時には C++ や Perl といった古流の技も嗜みます。近年は Tauri × Rust という新たな武器を手に、デスクトップアプリ開発の最前線を駆け抜けています。「作りたい」を「作れる」に変えるための、実践的な「技」をお届けします。

お問い合わせ: tauri.ninja@gmail.com

内容の誤り・動かないコードを報告する