debugging-tauri-apps について
Tauri v2 開発者向けのデバッグガイドです。WebView の検査、Rust の出力、IDE の設定、CrabNebula DevTools を取り上げ、エディター別の手順と問題解決方法を示します。
主な機能
- 01WebView 開発者ツールの確認
- 02Rust のバックトレースとデバッグ出力
- 03VS Code、RustRover、Neovim の設定
- 04CrabNebula DevTools によるログとイベント分析
- 05ブレークポイントと開発サーバーの問題解決
活用シーン
- 01Tauri アプリのフロントエンドコンソール確認
- 02Rust のブレークポイントと IDE デバッグ設定
- 03コマンド実行時間とイベントペイロードの分析
- 04デバッガーで停止しない問題の解決
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ dchuk/ claude-code-tauri-skills --skill debugging-tauri-appsインストール後、Claude Code で/debugging-tauri-appsを入力して読み込まれたか確認します。
詳細
Tauri アプリケーションのデバッグ
このスキルでは、コンソールデバッグ、WebView の検査、IDE の設定、CrabNebula DevTools など、Tauri v2 アプリケーションのデバッグ方法を説明します。
開発時のみ使用するコード
条件付きコンパイルを使って、デバッグコードを本番ビルドから除外します。
// Only runs during `tauri dev`
#[cfg(dev)]
{
// Development-only code
}
// Runtime check
if cfg!(dev) {
// tauri dev code
} else {
// tauri build code
}
// Programmatic check
let is_dev: bool = tauri::is_dev();
// Debug builds and `tauri build --debug`
#[cfg(debug_assertions)]
{
// Debug-only code
}
コンソールデバッグ
Rust の出力マクロ
tauri dev を実行しているターミナルにメッセージを出力します。
println!("Message from Rust: {}", msg);
dbg!(&variable); // Prints variable with file:line info
バックトレースの有効化
エラーの詳細情報を表示します。
# Linux/macOS
RUST_BACKTRACE=1 tauri dev
# Windows PowerShell
$env:RUST_BACKTRACE=1
tauri dev
WebView DevTools
DevTools を開く
- 右クリックして「要素を検証」を選択します
Ctrl + Shift + i(Linux/Windows)Cmd + Option + i(macOS)
プラットフォーム固有のインスペクター:WebKit(Linux)、Safari(macOS)、Edge DevTools(Windows)。
プログラムによる制御
tauri::Builder::default()
.setup(|app| {
#[cfg(debug_assertions)]
{
let window = app.get_webview_window("main").unwrap();
window.open_devtools();
// window.close_devtools();
}
Ok(())
})
本番環境での DevTools
テスト用のデバッグビルドを作成します。
tauri build --debug
本番環境で DevTools を永続的に有効にするには、src-tauri/Cargo.toml に追加します。
[dependencies]
tauri = { version = "...", features = ["...", "devtools"] }
WARNING: devtools 機能を使うと、App Store での審査を妨げる非公開の macOS API が有効になります。
VS Code のセットアップ
必要な拡張機能
| 拡張機能 | プラットフォーム | 用途 |
|---|---|---|
| vscode-lldb | すべて | LLDB デバッガー |
| C/C++ | Windows | Visual Studio デバッガー |
launch.json の設定
.vscode/launch.json を作成します。
{
"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"
},
{
"type": "lldb",
"request": "launch",
"name": "Tauri Production Debug",
"cargo": {
"args": [
"build",
"--release",
"--manifest-path=./src-tauri/Cargo.toml"
]
},
"preLaunchTask": "ui:build"
}
]
}
Windows Visual Studio デバッガー
列挙型のサポートを強化し、Windows でより高速にデバッグするには、次のようにします。
{
"version": "0.2.0",
"configurations": [
{
"name": "Launch App Debug",
"type": "cppvsdbg",
"request": "launch",
"program": "${workspaceRoot}/src-tauri/target/debug/your-app-name.exe",
"cwd": "${workspaceRoot}",
"preLaunchTask": "dev"
}
]
}
tasks.json の設定
.vscode/tasks.json を作成します。
{
"version": "2.0.0",
"tasks": [
{
"label": "ui:dev",
"type": "shell",
"isBackground": true,
"command": "npm",
"args": ["run", "dev"]
},
{
"label": "ui:build",
"type": "shell",
"command": "npm",
"args": ["run", "build"]
},
{
"label": "build:debug",
"type": "cargo",
"command": "build",
"options": {
"cwd": "${workspaceRoot}/src-tauri"
}
},
{
"label": "dev",
"dependsOn": ["build:debug", "ui:dev"],
"group": {
"kind": "build"
}
}
]
}
デバッグのワークフロー
- Rust ファイルの行番号の余白をクリックして、ブレークポイントを設定します
F5を押すか、「実行」メニューからデバッグ構成を選択しますpreLaunchTaskによって開発サーバーが自動的に起動します- デバッガーがアタッチされ、ブレークポイントで停止します
NOTE: LLDB は Tauri CLI を経由しないため、
beforeDevCommandとbeforeBuildCommandをタスクとして設定する必要があります。
RustRover/IntelliJ のセットアップ
プロジェクトの設定
プロジェクトのトップレベルに Cargo.toml がない場合は、ワークスペースファイルを作成します。
[workspace]
members = ["src-tauri"]
または、Cargo ツールウィンドウから src-tauri/Cargo.toml をアタッチします。
実行構成
実行 | 構成の編集で、次の2つの構成を作成します。
1. Tauri アプリケーションの構成(Cargo)
- コマンド:
run - 追加の引数:
--no-default-features
--no-default-features フラグは重要です。バンドルされたアセットではなく、開発サーバーからアセットを読み込むよう Tauri に指示します。
2. 開発サーバーの構成
Node ベースのプロジェクトの場合:
- npm の実行構成を作成します
- パッケージマネージャー(npm/pnpm/yarn)を設定します
- スクリプトに
devを設定します
Rust WASM(Trunk)の場合:
- シェルスクリプト構成を作成します
- コマンド:
trunk serve
デバッグのワークフロー
- まず開発サーバーの構成を起動します
- Tauri アプリケーションの構成で「デバッグ」をクリックします
- RustRover が Rust のブレークポイントで自動的に停止します
- 変数を確認し、コードをステップ実行します
Neovim のセットアップ
必要なプラグイン
- nvim-dap - Debug Adapter Protocol クライアント
- nvim-dap-ui - デバッガー UI
- nvim-nio - nvim-dap-ui の非同期依存関係
- overseer.nvim(推奨)- タスク管理
前提条件
GitHub のリリースから codelldb をダウンロードし、インストール先のパスを控えます。
DAP の設定
Neovim の設定(init.lua など)に追加します。
local dap = require("dap")
-- Configure codelldb adapter
dap.adapters.codelldb = {
type = 'server',
port = "${port}",
executable = {
command = '/path/to/codelldb/adapter/codelldb',
args = {"--port", "${port}"},
}
}
-- Launch configuration for Rust/Tauri
dap.configurations.rust = {
{
name = "Launch Tauri App",
type = "codelldb",
request = "launch",
program = function()
return vim.fn.input('Path to executable: ', vim.fn.getcwd() .. '/target/debug/', 'file')
end,
cwd = '${workspaceFolder}',
stopOnEntry = false
},
}
UI の統合
local dapui = require("dapui")
dapui.setup()
-- Auto-open/close UI
dap.listeners.before.attach.dapui_config = function()
dapui.open()
end
dap.listeners.before.launch.dapui_config = function()
dapui.open()
end
dap.listeners.before.event_terminated.dapui_config = function()
dapui.close()
end
dap.listeners.before.event_exited.dapui_config = function()
dapui.close()
end
視覚的なインジケーター
vim.fn.sign_define('DapBreakpoint', {
text = 'B',
texthl = 'DapBreakpoint',
linehl = '',
numhl = ''
})
vim.fn.sign_define('DapStopped', {
text = '>',
texthl = 'DapStopped',
linehl = 'DapStopped',
numhl = ''
})
キーバインド
vim.keymap.set('n', '<F5>', function() dap.continue() end)
vim.keymap.set('n', '<F6>', function() dap.disconnect({ terminateDebuggee = true }) end)
vim.keymap.set('n', '<F10>', function() dap.step_over() end)
vim.keymap.set('n', '<F11>', function() dap.step_into() end)
vim.keymap.set('n', '<F12>', function() dap.step_out() end)
vim.keymap.set('n', '<Leader>b', function() dap.toggle_breakpoint() end)
vim.keymap.set('n', '<Leader>o', function() overseer.toggle() end)
vim.keymap.set('n', '<Leader>R', function() overseer.run_template() end)
開発サーバーのタスク
overseer.nvim との互換性のために .vscode/tasks.json を作成します。
{
"version": "2.0.0",
"tasks": [
{
"type": "process",
"label": "dev server",
"command": "npm",
"args": ["run", "dev"],
"isBackground": true,
"presentation": {
"revealProblems": "onProblem"
},
"problemMatcher": {
"pattern": {
"regexp": "^error:.*",
"file": 1,
"line": 2
},
"background": {
"activeOnStart": false,
"beginsPattern": ".*Rebuilding.*",
"endsPattern": ".*listening.*"
}
}
}
]
}
NOTE: Tauri CLI を経由しない場合、開発サーバーは自動的に起動しません。overseer.nvim を使うか、手動で起動してください。
CrabNebula DevTools
CrabNebula DevTools は、ログの検査、パフォーマンスの監視、Tauri のイベント/コマンドの分析など、アプリケーションをリアルタイムで計測する機能を提供します。
機能
- ログイベントを調査します(依存関係のログを含む)
- コマンド実行のパフォーマンスを監視します
- ペイロードとレスポンスを含む Tauri イベントを分析します
- リアルタイムで可視化します
インストール
cargo add [email protected]
セットアップ
src-tauri/src/main.rs で、できるだけ早い段階に DevTools を初期化します。
fn main() {
// Initialize DevTools only in debug builds
#[cfg(debug_assertions)]
let devtools = tauri_plugin_devtools::init();
let mut builder = tauri::Builder::default();
#[cfg(debug_assertions)]
{
builder = builder.plugin(devtools);
}
builder
.run(tauri::generate_context!())
.expect("error while running tauri application")
}
使用方法
tauri dev の実行時に、DevTools が以下を表示する Web ベースのインターフェースを自動的に開きます。
- フィルタリング可能なアプリケーションログ
- タイミング情報付きの IPC コマンド呼び出し
- イベントのペイロードとレスポンス
- パフォーマンススパン
詳細なドキュメントについては、CrabNebula DevTools のドキュメントを参照してください。
クイックリファレンス
| タスク | コマンド/操作 |
|---|---|
| バックトレースを有効にする | RUST_BACKTRACE=1 tauri dev |
| WebView DevTools を開く | Ctrl+Shift+i / Cmd+Option+i |
| デバッグビルド | tauri build --debug |
| DevTools プラグインを追加する | cargo add [email protected] |
IDE の比較
| 機能 | VS Code | RustRover | Neovim |
|---|---|---|---|
| 拡張機能/プラグイン | vscode-lldb | 組み込み | nvim-dap + codelldb |
| Windows の代替 | cppvsdbg | 組み込み | codelldb |
| タスクランナー | tasks.json | 実行構成 | overseer.nvim |
| セットアップの複雑さ | 中 | 低 | 高 |
よくある問題
- ブレークポイントで停止しない:ビルド時に
--no-default-featuresが設定されていることを確認してください - 開発サーバーが起動しない:
preLaunchTaskを設定するか、手動で起動してください - アプリでフロントエンドが読み込まれない:Tauri アプリの起動前に開発サーバーを起動しておく必要があります
- Windows で enum の表示に問題がある:LLDB の代わりに cppvsdbg を使用してください