|
| 1 | +--- |
| 2 | +title: デバッグ |
| 3 | +sidebar: |
| 4 | + label: 概要 |
| 5 | + order: 10 |
| 6 | +i18nReady: true |
| 7 | +--- |
| 8 | + |
| 9 | +import CommandTabs from '@components/CommandTabs.astro'; |
| 10 | + |
| 11 | +Tauri には多くの動作箇所があるので、デバッグが必要となる問題に遭遇する可能性があります。エラーの詳細が出力される場所は多数あり、しかも Tauri にはデバッグ・プロセスをより容易にするツールもいくつか備わっています。 |
| 12 | + |
| 13 | +## 開発専用コード |
| 14 | + |
| 15 | +デバッグ用のツールキットの中で最も便利なツールの一つは、コードにデバッグ・ステートメントを追加する機能です。ただし、こうした機能が本番環境にまで紛れ込むことは、通常、望ましくありません。ここで、「開発モードで実行しているかどうか」を確認する機能が役立ちます。 |
| 16 | + |
| 17 | +### Rust では |
| 18 | + |
| 19 | +```rs frame=none |
| 20 | +fn main() { |
| 21 | + // 現在のインスタンスが `tauri dev` で開始されたかどうか。 |
| 22 | + #[cfg(dev)] |
| 23 | + { |
| 24 | + // `tauri dev` 専用のコードを記載 |
| 25 | + } |
| 26 | + if cfg!(dev) { |
| 27 | + // `tauri dev` 専用のコードを記載 |
| 28 | + } else { |
| 29 | + // `tauri build` 専用のコードを記載 |
| 30 | + } |
| 31 | + let is_dev: bool = tauri::is_dev(); |
| 32 | + |
| 33 | + // デバッグ・アサーションが有効化されているかどうか。これは `tauri dev` と `tauri build --debug` で「true」になります。 |
| 34 | + #[cfg(debug_assertions)] |
| 35 | + { |
| 36 | + // デバッグ専用のコードを記載 |
| 37 | + } |
| 38 | + if cfg!(debug_assertions) { |
| 39 | + // デバッグ専用のコードを記載 |
| 40 | + } else { |
| 41 | + // 本番専用コードを記載 |
| 42 | + } |
| 43 | +} |
| 44 | +``` |
| 45 | + |
| 46 | +> > > 《訳注》 **デバッグ・アサーション** debug assertions。プログラム中にそこで満たされるべき条件(アサーション)を記述して実行時にチェックする仕組み。 |
| 47 | +
|
| 48 | +{/* TODO: js version */} |
| 49 | + |
| 50 | +## Rust コンソール |
| 51 | + |
| 52 | +エラーを確認する最初の場所は「Rust コンソール」です。これは、(`tauri dev` などを実行する)ターミナル内にあります。次のコードを使用すると、Rust ファイル内からコンソールに何らかの情報を出力できます: |
| 53 | + |
| 54 | +```rust frame=none |
| 55 | +println!("Message from Rust: {}", msg); |
| 56 | +``` |
| 57 | + |
| 58 | +時には作成した Rust コードにエラーが発生することがありますが、Rust コンパイラーが多くの情報を提供してくれます。たとえば、もし `tauri dev` がクラッシュした時などは、次のように再実行可能です。Linux および macOS では: |
| 59 | + |
| 60 | +```shell frame=none |
| 61 | +RUST_BACKTRACE=1 tauri dev |
| 62 | +``` |
| 63 | + |
| 64 | +Windows(PowerShell)ではこのようになります: |
| 65 | + |
| 66 | +```powershell frame=none |
| 67 | +$env:RUST_BACKTRACE=1 |
| 68 | +tauri dev |
| 69 | +``` |
| 70 | + |
| 71 | +このコマンドは、詳細なスタック・トレースを提供します。 |
| 72 | +総合的に見ると、Rust コンパイラーは、問題に関する詳細な情報を提供してくれるので、問題の解決に役立ちます。たとえば: |
| 73 | + |
| 74 | +```bash frame=none |
| 75 | +error[E0425]: cannot find value `sun` in this scope |
| 76 | + --> src/main.rs:11:5 |
| 77 | + | |
| 78 | +11 | sun += i.to_string().parse::<u64>().unwrap(); |
| 79 | + | ^^^ help: a local variable with a similar name exists: `sum` |
| 80 | + |
| 81 | +error: aborting due to previous error |
| 82 | + |
| 83 | +For more information about this error, try `rustc --explain E0425`. |
| 84 | +``` |
| 85 | + |
| 86 | +> > > 《訳注》 **スタック・トレース** stack trace。プログラムのエラー発生時に、そのエラーに至るまでの関数の呼び出し履歴やメソッドなどを記録したもの。詳しくは [Wikipedia](https://ja.wikipedia.org/wiki/スタックトレース) を参照してください。 |
| 87 | +
|
| 88 | +## WebView コンソール |
| 89 | + |
| 90 | +WebView を右クリックし、 `Inspect Element`(要素を検査)を選択します。これにより、使い慣れた Chrome や Firefox の開発ツールに似た「Web インスペクター」が開きます。 |
| 91 | +Linux と Windows ではショートカット `Ctrl + Shift + i` を、macOS では `Command + Option + i` を使用しても、この「インスペクター」を開くこともできます。 |
| 92 | + |
| 93 | +「インスペクター」はプラットフォーム固有であり、Linux では 「webkit2gtk WebInspector」、macOS では「Safari のインスペクター」、Windows では「Microsoft Edge DevTools」をレンダリングします。 |
| 94 | + |
| 95 | +### プログラムから Devtools を開く |
| 96 | + |
| 97 | +インスペクター・ウィンドウの見えやすさを調整するには、 [`WebviewWindow::open_devtools`] および [`WebviewWindow::close_devtools`] 関数を使用します: |
| 98 | + |
| 99 | +```rust |
| 100 | +tauri::Builder::default() |
| 101 | + .setup(|app| { |
| 102 | + #[cfg(debug_assertions)] // このコードは、デバッグ・ビルドにのみ記載してください。 |
| 103 | + { |
| 104 | + let window = app.get_webview_window("main").unwrap(); |
| 105 | + window.open_devtools(); |
| 106 | + window.close_devtools(); |
| 107 | + } |
| 108 | + Ok(()) |
| 109 | + }); |
| 110 | +``` |
| 111 | + |
| 112 | +### 本番環境でのインスペクターの使用 |
| 113 | + |
| 114 | +インスペクターは、デフォルトでは、開発とデバッグ・ビルドでのみ有効化されていますので、本番環境での利用には Cargo 機能を使用して有効にする必要があります。 |
| 115 | + |
| 116 | +#### デバッグ・ビルドの作成 |
| 117 | + |
| 118 | +デバッグ・ビルドを作成するには、`tauri build --debug` コマンドを実行します。 |
| 119 | + |
| 120 | +<CommandTabs |
| 121 | + npm="npm run tauri build -- --debug" |
| 122 | + yarn="yarn tauri build --debug" |
| 123 | + pnpm="pnpm tauri build --debug" |
| 124 | + deno="deno task tauri build --debug" |
| 125 | + bun="bun tauri build --debug" |
| 126 | + cargo="cargo tauri build --debug" |
| 127 | +/> |
| 128 | + |
| 129 | +通常のビルドや開発プロセスと同様に、このコマンドを初めて実行したときにはビルドに多少時間がかかりますが、それ以後の実行では大幅に高速になります。最終的にバンドルされたアプリでは開発コンソールが有効になっており、`src-tauri/target/debug/bundle` に配置されます。 |
| 130 | + |
| 131 | +また、ターミナルからビルドされたアプリを実行して、Rust コンパイラのメモ(エラーの場合)や `println` メッセージを表示することもできます。`src-tauri/target/(release|debug)/[アプリ名]` ファイルを参照して、コンソールで直接実行するか、ファイルシステム内の実行可能ファイル自体をダブルクリックします(原注: この方法ではエラーが発生するとコンソールが閉じます)。 |
| 132 | + |
| 133 | +##### Devtools 機能の有効化 |
| 134 | + |
| 135 | +:::danger |
| 136 | + |
| 137 | +devtools API は、macOS では「プライベート」です。macOS でプライベート API を使用すると、そのアプリケーションは App Store に受理されなくなります。 |
| 138 | + |
| 139 | +> > > 《訳注》 **プライベート** private。変数や定数、関数、メソッドなどが、それが定義された範囲の中でしか呼び出し・参照ができないこと(外部からは呼び出しできないこと)。閉じた空間の中(「家の中」のような)でのみ有効な状態。 |
| 140 | +
|
| 141 | +::: |
| 142 | + |
| 143 | +**プロダクション・ビルド**(製品版ビルド)で devtools を有効化するには、`src-tauri/Cargo.toml` ファイルの Cargo 機能「`devtools`」を有効にする必要があります: |
| 144 | + |
| 145 | +```toml |
| 146 | +[dependencies] |
| 147 | +tauri = { version = "...", features = ["...", "devtools"] } |
| 148 | +``` |
| 149 | + |
| 150 | +## Core プロセスのデバッグ |
| 151 | + |
| 152 | +Core プロセスは Rust によって作動しているため、GDB または LLDB を使用してデバッグできます。「LLDB VS Code 拡張機能」を使用して Tauri アプリケーションの Core プロセスをデバッグする方法については、[VS Code でのデバッグ] ガイドを参照してください。 |
| 153 | + |
| 154 | +> > > 《訳注》 **GDB** The GNU Project Debugger の略。[GNUデバッガ](https://ja.wikipedia.org/wiki/GNUデバッガ) > > > **LLDB** The LLDB Debugger。次世代高性能デバッガ。 |
| 155 | +
|
| 156 | +[VS Code でのデバッグ]: /ja/develop/debug/vscode/ |
| 157 | +[`WebviewWindow::open_devtools`]: https://docs.rs/tauri/2.0.0/tauri/webview/struct.WebviewWindow.html#method.open_devtools |
| 158 | +[`WebviewWindow::close_devtools`]: https://docs.rs/tauri/2.0.0/tauri/webview/struct.WebviewWindow.html#method.close_devtools |
| 159 | + |
| 160 | +<div style="text-align: right"> |
| 161 | + 【※ この日本語版は、「Mar 29, 2025 英語版」に基づいています】 |
| 162 | +</div> |
0 commit comments