Victauri について
Victauri は、Tauri 2 および Tauri 3 のプレリリースアプリに組み込む開発時のテスト・調査サーバーで、アプリ開発者やテストスイート向けです。フロントエンド操作から IPC、Rust の状態、SQLite の確認までを一つのフルスタックテストで行え、デバッグビルドでのみ動作します。
主な機能
- 01DOM の調査と操作
- 02IPC と Rust コマンドへのアクセス
- 03SQLite とアプリファイルの調査
- 04レイヤー間の状態比較
- 05操作の記録、再生、テスト生成
- 06macOS、Windows、Linux に対応
活用シーン
- 01UI 操作による SQLite 書き込みの検証
- 02フロントエンドから Rust への IPC の診断
- 03未使用のフロントエンド/バックエンドコマンドの検出
- 04操作を再生可能なテストとして記録
MCP 対応
Victauri は MCP に対応し、アプリの DOM、IPC、コマンド実行、状態、ファイル、SQLite、スクリーンショット、アクセシビリティ確認を MCP クライアントに公開します。接続時にブリッジが実行中のアプリを検出します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
Victauri
Tauri アプリケーションの検証済みイントロスペクションと制御
Tauri アプリのフルスタックテスト。フロントエンドのボタンをクリックし、Rust のハンドラーが実行されたことを検証し、データベースに行が書き込まれたことを確認します。すべてを1つのテストで行えます。
現在、Tauri アプリのテストでは、バックエンドについて誤った結果を出すフロントエンドのモック、セットアップに週末を費やす WebDriver、あるいは macOS の CI ランナーに費用を払う方法のいずれかを選ぶことになります。Victauri はそのすべてに取って代わります。Tauri プロセス内に軽量サーバーを組み込み(デバッグビルドのみ)、テストスイート、curl、CI から DOM、IPC レイヤー、Rust バックエンドの状態、データベース、ネイティブウィンドウに直接アクセスできます。1つのテストで、3つのプラットフォームすべてに対応します。WebDriver は不要です。ブラウザー依存もありません。macOS、Windows、Linux で動作します。
このサーバーは MCP にも対応しているため、Claude Code、Cursor、Windsurf など、あらゆる AI エージェントが同じフルスタックアクセスでアプリを操作し、デバッグできます。本来の目的はテストで、エージェント連携はおまけです。
実際の Tauri アプリでテスト済みです。 5つのオープンソースアプリ(Kanri、En Croissant、Surrealist、Duckling、Lettura)を対象に、2026年5月に一度だけ詳細な評価を実施した結果、Victauri のバグもアプリ側の変更もなく、895件中867件のチェックに合格しました(96.9%)。再現可能な互換性ハーネス(
scripts/compat)は、Tauri 2 の3つのアプリ(Kanri、En Croissant、Lettura)に固定して、アプリに依存しないスモークテスト一式を必要に応じて(および毎週)最新のコードで再実行します。これは上流の変更による影響を検出するためのベストエフォートな仕組みであり、リリース判定には使用しません。サードパーティ製アプリは独自のスケジュールで更新され、定期的に再固定が必要になります。対象範囲とアプリごとの現在の状況については、互換性 README をご覧ください。
注 — ブラウザーモードを削除しました(2026-06-09)。 Victauri の強みである Tauri アプリ内部でのフルスタック・イントロスペクションに注力するため、実験的な
victauri-browser拡張機能と@4da/victauri-browsernpm パッケージ(あらゆるウェブサイト向けの MCP)を削除しました。ブラウザーの自動化には、Playwright または Chrome DevTools Protocol をお使いください。Tauri プラグインには影響ありません。詳細と移行方法: #15。
利用できる機能
テストスイートと CI 向け:
- フルスタック検証 — ボタンをクリックし、IPC 呼び出しを検証し、データベースに問い合わせて書き込みを確認し、UI が更新されたことを確認するまでを、1 つのテストで実行できます
- バックエンドへの直接アクセス — SQLite データベースへの問い合わせ、アプリのファイルの参照、設定の読み取り、プロセスメモリの検査ができます。ウェブビューのプロキシは不要です
- ゴーストコマンドの検出 — 信頼度の高い孤立したフロントエンド呼び出し(
confirmed_ghosts:呼び出されているものの、常に「not found」エラーになっているもの)と、フロントエンドから一度も呼び出されていないバックエンドコマンドを見つけます - 境界をまたいだ状態チェック — DOM の状態と Rust バックエンドの状態を比較し、両者のずれを検出します
- タイムトラベル記録 — インタラクションを記録し、状態をチェックポイントとして保存し、シーケンスを再生して、テストファイルを生成します
- クロスプラットフォーム対応、WebDriver 不要 — macOS、Windows、Linux で同じツール群を使用できます(CDP への依存はありません)。CI では
xvfbのもとでヘッドレス実行できます。プラットフォームごとの制限は隠さずに明記しています。信頼済み(OS レベル)入力に対応するのは Windows のみです(他のプラットフォームでは合成イベントにフォールバックします)。また、Linux でウィンドウのスクリーンショットを撮るには X11/XWayland が必要です(Wayland のみの環境では、明確なエラーが表示されます) - リリース時の実行コストはゼロ — サーバーは
#[cfg(debug_assertions)]の背後に置かれているため、init()は何もせず、リリースビルドではリッスンしません。victauri-pluginは通常の[dependencies]エントリとして追加してください(アプリのバイナリから[dev-dependencies]は参照できません)。クレートは引き続きコンパイルに含まれるため、リリースバイナリから完全に除外するには、Cargo の機能の背後にあるオプション依存関係にしてください(victauri init --optionalでひな形を生成できます)。**SQLite に関する注意:**デフォルトのbundled-sqlite機能はrusqlite/bundledを有効にし、Cargo の機能統合により、リリースビルドでもアプリ側のrusqliteに適用されます。アプリがシステムの SQLite または SQLCipher にリンクする場合は、default-features = false, features = ["sqlite"]を使用してください
**特典 — AI エージェント向け:**同じサーバーが MCP にも対応しているため、Claude Code、Cursor、Windsurf、および任意の MCP クライアントから、対話的なデバッグのためのフルスタックアクセスを利用できます。追加のセットアップは不要です。
Victauri はあなたのアプリで動作しますか?
Victauri は、自分のアプリのソースに追加して再ビルドする開発時依存関係です(通常の [dependencies] エントリです。アプリのバイナリから使用できない [dev-dependencies] ではありません)。すでに実行中のアプリや、配布済みのアプリに接続するツールではありません。次の4 つすべてに該当する場合に動作します。
- Tauri 2、または Tauri 3 のプレリリース版(
victauri-pluginのtauri-v3機能を有効にしてください。詳しくはプラグインの READMEを参照してください)。Tauri 1.x のアプリではホストできません。Tauri 1.x のwebkit2gtk-sys 0.18と Victauri の2.xは、どちらもネイティブのweb_kit2ライブラリにリンクするため、解決できない Cargo の競合が発生します。(Tauri 2 が現行のメジャーバージョンで、Tauri 1 はレガシーです。) - プラグインを組み込んでソースからビルドされていること —
Cargo.tomlに 1 行追加し、.plugin(victauri_plugin::init())を設定し、victauri:default権限を付与します(ケーパビリティファイル、またはvictauri init --optionalで生成される実行時の許可を使用します)。外部バイナリに注入する方法はありません。 - デバッグビルドであること。 サーバーは
#[cfg(debug_assertions)]の条件で有効になるため、init()は何もせず、リリースビルドではリッスンしません。これは設計上、開発時/テスト時に使用するツールです。 - 各ウィンドウで
victauri:defaultが許可されていること。 Tauri のウィンドウ単位の権限 ACL により、許可がないとブリッジが通知なく機能しなくなります。window introspectabilityツールで検出し、その理由を確認できます。
フレームワーク(React、Vue/Nuxt、Svelte、vanilla)と OS/ウェブビューエンジン(WebView2/WKWebView/WebKitGTK)は問いません。すべてに対応しており、Windows、macOS、Linux で相互チェックされています。
| ✅ 動作する環境 | ❌ 動作しない環境 |
|---|---|
| 開発中の自分の Tauri 2(または Tauri 3 のプレリリース版)アプリ | Tauri 1.x のアプリ |
| ソースからビルドできる任意の Tauri 2/3 アプリ(デバッグ) | リリース/本番ビルド |
| 任意のフロントエンドフレームワーク、3 つの OS のいずれか | 自分でビルドしていないバイナリ(ソースなし) |
| Tauri 以外のアプリ(Electron、ネイティブ、通常のウェブアプリ) |
詳細、例外事項、テスト済みアプリの一覧については、互換性を参照してください。
クイックスタート
CLI をインストールする
cargo install victauri-cli
プロジェクトをセットアップする
Tauri プロジェクトのルートから実行します。
victauri init
これにより、以下が行われます。
Cargo.tomlにvictauri-pluginとvictauri-core(開発用:victauri-test、tokio)を追加します- Tauri ビルダーが見つかった場合、
.plugin(victauri_plugin::init())を追加します capabilities/victauri.json(victauri:defaultを許可)、.mcp.json、tests/内のスターターテスト、CI ワークフロー、CLAUDE.md のブロック、Claude Code スキル(.claude/skills/victauri/SKILL.md)を作成します- 自動で実行できなかった手順を表示します
プラグインを接続する
init によってビルダーが修正されたと報告された場合は、この手順を省略してください。そうでない場合は、次の1行を追加します。
// src-tauri/src/main.rs (or lib.rs)
tauri::Builder::default()
.plugin(victauri_plugin::init())
.invoke_handler(tauri::generate_handler![/* your commands */])
.run(tauri::generate_context!())
.expect("error while running tauri application");
リリースビルドでは、init() は何もしないプラグインを返します。サーバーは起動せず、リンカーによって除去されるため、フィーチャーフラグは不要です。同様に、#[inspectable] のメタデータ(説明、インテント、例)はリリースビルドにコンパイルされません。ただし、プラグインの依存関係は引き続きコンパイルされます(以下を参照)。
リリース時のフットプリントはゼロです。 通常の依存関係として使う場合、このクレートはリリースビルドにコンパイルされます(動作しません。到達不能なサーバーはリンカーによって除去されますが、デフォルトの bundled-sqlite フィーチャーにより SQLite の C コードが追加されます。新規プロジェクトの場合、LTO なしでは約 +1.7 MB、LTO ありでは約 58 KB です。また、アプリ独自の rusqlite がある場合、それも bundled に切り替わります)。一方、victauri init --optional を使うと、Victauri は victauri Cargo フィーチャーの背後にあるオプション依存関係としてセットアップされるため、リリースビルドには含まれません。その場合は、フィーチャーを有効にしてアプリを起動します(npm run tauri dev -- --features victauri、または pnpm tauri dev --features victauri)。
はじめに → リリース時のフットプリントをゼロにする(オプションの依存関係)を参照してください。
テストを実行する
アプリを起動してから、スモークテストを実行します。
npm run tauri dev # start your app (or pnpm/yarn/bun tauri dev)
cd src-tauri && VICTAURI_E2E=1 cargo test --test smoke # in a second terminal (the tests live in src-tauri/tests)
Windows では、起動中のアプリが .exe をロックし、cargo test が再ビルドするため、テスト実行専用のターゲットディレクトリを指定してください。CARGO_TARGET_DIR=target-test VICTAURI_E2E=1 cargo test --test smoke を実行します。
または、CLI を使ってすぐに検証できます。
victauri test # 11 built-in smoke checks
victauri check # server health + IPC diagnostics
victauri call dom_snapshot # any tool from the shell → JSON on stdout
エージェントと連携する
クライアントごとにコマンドを1つ実行します。各コマンドは、そのクライアントの MCP 設定を書き込む(または既存の設定に統合する)とともに、victauri bridge --app <your identifier> を指定します。また、CDP/Playwright より Victauri を優先し、正しいアプリに接続したことを確認し、wait_for を使って非同期処理の完了を待つよう、エージェントに指示します。
| クライアント | コマンド | 書き込むファイル |
|---|---|---|
| Claude Code | victauri setup claude(通常の victauri init が実行するのもこちらです) | .mcp.json、CLAUDE.md のブロック、.claude/skills/victauri/SKILL.md |
| Cursor | victauri setup cursor | .cursor/mcp.json、AGENTS.md のブロック |
| VS Code / GitHub Copilot | victauri setup vscode | .vscode/mcp.json、AGENTS.md のブロック |
| Windsurf / Devin Desktop | victauri setup windsurf --user-config | ユーザーレベルの mcp_config.json(ドキュメントに記載されている唯一の設定)、AGENTS.md のブロック |
| OpenAI Codex | victauri setup codex | .codex/config.toml(信頼済みプロジェクト用。~/.codex には --user-config を使用)、AGENTS.md のブロック |
| Gemini CLI | victauri setup gemini | .gemini/settings.json、AGENTS.md のブロック、GEMINI.md のインポート |
| Zed | victauri setup zed | .zed/settings.json、AGENTS.md のブロック(Zed は最初に見つかったルールファイルのみを読み込むため、.rules / .cursorrules があると AGENTS.md は読み込まれません) |
| Roo Code | victauri setup roo | .roo/mcp.json、AGENTS.md のブロック |
| 上記すべて | victauri setup all | 上記のプロジェクトレベルのファイルすべて |
既存の設定は上書きせずに統合され(JSONC ファイル内のコメントも保持されます)、再実行しても変更はありません。--dry-run を指定すると、変更内容を確認できます。他の Tauri エージェントおよびテストツールとのVictauri の比較も参照してください。
AI エージェントを手動で接続する
プロジェクトのルートに .mcp.json を追加します(victauri init によって自動的に作成されます)。
{
"mcpServers": {
"victauri": {
"command": "victauri",
"args": ["bridge"]
}
}
}
victauri bridge の stdio プロキシは、接続時に実行中のアプリのポートを検出し、再起動時にも再検出するため、再ビルド後や複数の Victauri アプリが実行されている場合でも、エージェントは常に正しいアプリに接続できます(アプリを固定するには "--app", "<your.bundle.identifier>" を追加してください)。
ポートが固定され、誤ったアプリに接続される可能性のある "url": "http://127.0.0.1:7373/mcp" よりも、この方法をおすすめします。
Claude Code、Cursor、Windsurf、およびすべての MCP クライアントで動作します。エージェントは、DOM スナップショット、IPC の監視、コマンドの呼び出し、スクリーンショットの撮影、アクセシビリティ監査など、フルスタックにアクセスできます。
Claude Code の場合、アプリを起動すると、Claude はすぐに次の操作を実行できます。
- DOM ツリーを調べ、任意の要素をクリック/入力/値の設定
- 任意の
#[tauri::command]を呼び出し、応答を検証 - アプリの設定を読み取り、ファイルを一覧表示し、SQLite データベースにクエリを実行
- スクリーンショットを撮影し、アクセシビリティを監査
- 操作を記録し、テストとして再生
テストの作成
e2e_test! マクロがサーバーの検出と自動接続を処理します。
use victauri_test::{e2e_test, VictauriClient};
e2e_test!(greet_flow, |client| async move {
client.fill_by_id("name-input", "World").await.unwrap();
client.click_by_id("greet-btn").await.unwrap();
client.expect_text("Hello, World!").await.unwrap();
});
ロケーター API
複雑なクエリには、自動待機のアサーションを備えた、組み合わせ可能なロケーターを使用できます。
use victauri_test::prelude::*;
e2e_test!(settings_flow, |client| async move {
let save = Locator::role("button").and_text("Save");
let email = Locator::label("Email address");
email.fill(&mut client, "[email protected]").await.unwrap();
save.click(&mut client).await.unwrap();
Locator::test_id("toast-message")
.expect(&mut client)
.to_contain_text("Settings saved")
.await
.unwrap();
});
ロケーターは、role、text、test_id、css、label、placeholder、alt_text、title の各戦略に対応しており、連鎖的な絞り込み(.and_text()、.nth()、.and_tag())も使用できます。ロケーター API の詳細については、テストガイドを参照してください。
クライアントの直接メソッド
| メソッド | 動作 |
|---|---|
click_by_text("Submit") | 表示テキストで要素を検索してクリックします |
click_by_id("save-btn") | HTML の id で要素を検索してクリックします |
fill_by_id("email", "[email protected]") | id で入力欄を検索し、値を設定します |
type_by_id("search", "query") | id で入力欄を検索し、1 文字ずつ入力します |
select_by_id("theme", "dark") | id でセレクト要素を検索し、オプションを選択します |
expect_text("Success!") | テキストが表示されるまでポーリングします(タイムアウト 5 秒) |
expect_no_text("Error") | テキストが消えるまでポーリングします(タイムアウト 3 秒) |
text_by_id("counter") | id で要素を検索し、そのテキストコンテンツを取得します |
フルスタック検証
フロントエンドの操作が実際に正しいバックエンドロジックを実行することを検証できる点が、Victauri の特長です。
UI から IPC、データベースまで
// Click "Save" in the UI
client.click_by_id("save-btn").await?;
// Verify the IPC command was called
let log = client.get_ipc_log(None).await?;
assert_ipc_called(&log, "save_settings");
// Verify the database was actually written
let result = client.query_db(
"SELECT value FROM settings WHERE key = 'theme'",
None, None,
).await?;
assert_eq!(result["rows"][0]["value"], "dark");
流暢な検証
DOM、IPC、アクセシビリティ、エラーなど、複数の条件を一度に単一のレポートで確認できます。
client.verify()
.has_text("Settings saved")
.ipc_was_called("save_settings")
.no_console_errors()
.no_ghost_commands()
.ipc_healthy()
.coverage_above(80.0)
.run()
.await?
.assert_all_passed();
ゴーストコマンドの検出
フロントエンドから呼び出されているものの、バックエンドに存在しない孤立したコマンドを検出します。
let ghosts = client.detect_ghost_commands().await?;
assert!(ghosts["confirmed_ghosts"].as_array().unwrap().is_empty(),
"Found ghost commands: {ghosts}");
IPC チェックポイント、ビジュアルリグレッションテスト、IPC カバレッジ、アクセシビリティ監査、パフォーマンス監視、タイムトラベル記録、CI 統合などについては、テストガイドを参照してください。
MCP ツール
バックエンド、IPC、WebView、イントロスペクションにわたる 35 個のツールです。
バックエンドツール(Rust に直接アクセス。WebView は不要)
| ツール | 動作 |
|---|---|
app_info | アプリの設定、ディレクトリパス、環境変数、検出されたデータベース、プロセス情報を取得します |
list_app_dir | アプリの data/config/log/local_data ディレクトリ内のファイルを参照します |
read_app_file | アプリのバックエンドディレクトリからファイルを読み取ります(UTF-8 または base64) |
query_db | 自動検出機能付きの読み取り専用 SQLite クエリを実行します |
invoke_command | アプリの実際の IPC 経路を通じて任意の Tauri コマンドを呼び出します(WebView の invoke 経由でディスパッチされるため、ライブウィンドウが必要です) |
app_state | アプリで定義されたバックエンド状態プローブ(パイプライン/キュー/キャッシュの内部状態)を読み取ります。IPC の往復は不要です |
get_memory_stats | OS プロセスのメモリ使用状況をリアルタイムで取得します(ワーキングセット、ページフォールト) |
IPC ツール
| ツール | 機能 |
|---|---|
get_registry | すべての #[inspectable] コマンドスキーマを一覧表示 |
detect_ghost_commands | 孤立したフロントエンドの IPC 呼び出しを検出(信頼度の高い confirmed_ghosts) |
check_ipc_integrity | 停滞・古い・エラー状態の IPC 呼び出しを検出 |
verify_state | フロントエンドの DOM とバックエンドの状態を比較 |
resolve_command | 自然言語から一致する Tauri コマンドを特定 |
Webview ツール
| ツール | 機能 |
|---|---|
eval_js | Webview で JavaScript を実行 |
dom_snapshot | 参照ハンドル付きの完全なアクセシビリティツリー |
find_elements | テキスト、ロール、テスト ID、CSS、ラベル、プレースホルダー、alt、タイトルで検索 |
screenshot | プラットフォームネイティブのウィンドウキャプチャ(Chromium 不使用) |
wait_for | テキスト、セレクター、IPC の完了、JS の expression、Tauri の event などの条件をポーリング — 待機処理を入れずに非同期のバックエンド処理を待機 |
assert_semantic | JS を評価し、期待値に対してアサーションを実行 |
複合ツール(1 つのツールで複数の操作)
| ツール | 操作 |
|---|---|
interact | click、double_click、hover、focus、scroll_into_view、select_option |
input | fill、type_text、press_key(キーボードの組み合わせに対応。trusted: true = OS レベルの入力、Windows のみ) |
window | get_state、list、manage、resize、move_to、set_title、introspectability |
storage | get、set、delete、get_cookies |
navigate | go_to、go_back、get_history、set_dialog_response、get_dialog_log |
recording | start、stop、checkpoint、list_checkpoints、get_events、events_between、get_replay、export、import、replay、flush |
inspect | get_styles、get_bounding_boxes、highlight、clear_highlights、audit_accessibility、get_performance |
css | inject、remove |
route | add(fetch と XHR のブロック/応答/遅延)、list、clear、clear_all、matches |
trace | start、stop、status、frames(バックグラウンドのスクリーンキャストリングバッファー) |
animation | list、scrub、sample(Web Animations API — CDP 不使用) |
logs | console、network、ipc、navigation、dialogs、events、slow_ipc、clear |
introspect | command_timings、coverage、command_catalog、contract_record、contract_check、contract_list、contract_clear、startup_timing、capabilities、db_health、plugin_state、processes、plugin_tasks、event_bus、event_bus_clear |
fault | inject(遅延/エラー/ドロップ/破損)、list、clear、clear_all |
explain | summary、last_action、diff |
get_plugin_info | プラグイン設定:ポート、ツール、プライバシー、バージョン |
get_diagnostics | Shadow DOM、サービスワーカー、iframe、大きな DOM の検出 |
MCP クライアントは不要です。すべてのツールはシェルコマンドとしても利用できます — victauri call query_db query="SELECT 1"
を実行すると結果が JSON で出力され(victauri tools <name> でツールの引数を確認できます)、REST エンドポイント
POST /api/tools/{name} からも利用できます。ツールリファレンスを参照してください。
動作の仕組み
AI Agent / cargo test / curl
|
v
HTTP on :7373
├── /mcp (MCP protocol — for AI agents)
├── /api/tools (REST API — for scripts and CI)
└── /health (health check — for monitoring)
|
v
Victauri Plugin (inside Tauri process)
| | |
v v v
WebView IPC Backend
- DOM - log - app config
- click - args - file system
- eval - cmds - SQLite DBs
- a11y - ghost - memory
- perf - verify- env vars
Victauri は Tauri プロセスの内部で実行されます。同じスレッドプール、同じメモリ空間を使用します。これは実装上の詳細にとどまらず、実現できることを変えます。
| 組み込み(Victauri) | 外部プロセス | |
|---|---|---|
| ツールの応答 | バックエンドのツール:localhost への HTTP 通信 1 回とプロセス内呼び出し(追加のプロセスは不要)。Webview のツール:約 10~30 ms の JS ラウンドトリップ | 同じ HTTP 通信に加え、別プロセスを経由する中継が発生 |
| 状態の正確性 | バックエンドの状態はプロセスからリアルタイムで読み取ります。Webview 側のログ(IPC、コンソール)は容量に上限のあるページバッファーに保存されます | 外部ツールが観測できる範囲の情報 |
| バックエンドへのアクセス | 完全(AppHandle、DB、状態) | 制限あり(Webview のみ) |
| セットアップ | Cargo.toml に 1 行追加 | 別プロセスと設定が必要 |
| リリースビルド | init() は何もしません(実行時コストはゼロ) | 手動で無効にする必要があります |
ポートの選択: Victauri は最初にポート 7373 を試し、使用中の場合は 7374~7383 を順に試します。実際に使用するポートは、クライアントが自動検出できるよう一時ディレクトリに書き込まれます。
アーキテクチャ
victauri/
├── crates/
│ ├── victauri-plugin/ # Tauri plugin + MCP server + JS bridge (the main crate)
│ ├── victauri-core/ # Shared types (events, registry, snapshots, verification)
│ ├── victauri-macros/ # #[inspectable] proc macro for command schemas
│ ├── victauri-test/ # Test client + Locator API + assertion helpers
│ ├── victauri-cli/ # CLI: init, check, test, record, watch, coverage
│ └── victauri-watchdog/ # Health-check sidecar for crash recovery
├── docs/ # mdbook documentation site
└── examples/
└── demo-app/ # Multi-window Tauri app with 21 instrumented commands
| クレート | 用途 | Tauri 依存関係 |
|---|---|---|
victauri-plugin | アプリに組み込みます — MCP サーバーとブリッジ | あり |
victauri-test | テストで使用します — クライアントとアサーション | なし |
victauri-cli | グローバルにインストールします — スキャフォールドと診断 | なし |
victauri-macros | コマンドで使用します — #[inspectable] | なし |
victauri-core | 共有型(通常、直接使用しません) | なし |
victauri-watchdog | クラッシュ復旧用のサイドカーとして実行します | なし |
セキュリティ
Victauri は本番環境ではなく、開発用に設計されています。
- デバッグビルドのみ:サーバーは
#[cfg(debug_assertions)]で制御されるため、init()は何もせず、リリースビルドでは何もリッスンしません - localhost のみ:127.0.0.1 にバインドし、DNS リバインディングを防止します
- デフォルトで認証有効:Bearer トークンを自動生成し、クライアントが自動検出します(無効にするには
.auth_disabled()を指定します) - レート制限あり:トークンバケットアルゴリズムにより、毎秒 1000 リクエストに制限します
- プライバシープロファイル:
Observe(読み取り専用)、Test(操作)、FullControl(すべて) - 出力の墨消し:ツールの応答から API キー、トークン、メールアドレスを自動的に除去します
脅威モデル、プライバシー設定、コマンドフィルタリングについては、セキュリティガイドをご覧ください。
CI 統合
GitHub Actions
組み込みのコンポジットアクションを使用すると、CI で Victauri のスモークテストを実行できます。
- name: Build my app
run: cargo build -p my-app
- name: Start app under xvfb
run: |
xvfb-run -a ./target/debug/my-app &
sleep 3
- uses: 4DA-Systems/victauri/.github/actions/[email protected]
with:
max-load-ms: 10000
max-heap-mb: 512
このアクションは victauri-cli をインストールし、サーバーが正常な状態になるまで待機して、11 個すべてのスモークチェックを実行します。使用可能な入力は次のとおりです。
| 入力 | デフォルト | 説明 |
|---|---|---|
port | 7373 | Victauri サーバーのポート |
max-load-ms | 10000 | DOM の読み込み完了までの最大時間(ms) |
max-heap-mb | 512 | JS ヒープ使用量の上限(MB) |
junit-path | JUnit XML レポートの出力先 | |
coverage | false | テスト後に IPC カバレッジレポートを実行します |
coverage-threshold | 最低カバレッジ率(未満の場合は失敗します) | |
health-timeout | 30 | サーバーが正常な状態になるまで待機する秒数 |
または、victauri init を使用して、プロジェクト用の CI ワークフローファイル一式を生成できます。
victauri init # generates .github/workflows/victauri.yml
ドキュメント
- はじめに — セットアップ、機能、最初の接続
- テストガイド — Locator API、IPC の検証、ビジュアルリグレッション、CI との統合
- ツールリファレンス — 35 個すべてのツールとパラメーター、使用例
- アーキテクチャ — 組み込み設計、JS ブリッジ、デュアルプロトコル
- 設定 — ポート、認証、プライバシー、容量の調整
- セキュリティ — 脅威モデル、プライバシープロファイル、秘匿化
- FAQ — よくある質問とトラブルシューティング
- 比較 — Victauri と他の Tauri エージェント/テストツールの比較、それぞれの強み
- VS Code 拡張機能 — エディターからのリアルタイム検査
- デモアプリ — 21 個の計測済みコマンドを備えたリファレンスアプリ
- エージェントセッション — AI エージェントの実際のトランスクリプト
- 移行ガイド — バージョン間のアップグレード
- コントリビューション — 貢献方法
- 変更履歴 — リリース履歴
できないこと
- 本番環境では使用できません — 設計上、デバッグビルドのみが対象です
- リモートアクセスには対応していません — localhost のみで、ポートフォワーディングはできません
- 同一オリジンのフレームのみ — 同一オリジンの iframe は走査され、クロスオリジンのフレームはマークされてスキップされます
- フロントエンド IPC の制御は fetch トランスポートのみ —
faultの注入は、Victauri 独自のinvoke_commandを通じて実行されるコマンドに適用されます。アプリの実際のinvokeに渡される内容を変更するには、routeルールで Tauri の fetch トランスポート(デスクトップのデフォルト)上の呼び出しをモックまたは遅延させます。ただし、postMessage 経由(Android、またはフォールバック後)では適用されません - webview↔Rust 間のすべてのメッセージが IPC ログに記録されるわけではありません — コマンド呼び出しは Tauri の両方のトランスポート(カスタムプロトコルの fetch と
postMessageフォールバック)でキャプチャされます(get_diagnosticsで使用中のトランスポートとキャプチャが完全かどうかを確認できます)。ただし、listen_events外の Rust→JS イベント、Channelメッセージ、isolation パターンの引数は記録されません。アーキテクチャ → IPC レイヤーを参照してください - 1.0 未満 — API は変更される可能性があります(CI で semver をチェック)
開発
cargo build --workspace # Build all crates
cargo test --workspace # Run all tests
cargo bench -p victauri-core # Criterion benchmarks (16)
cargo clippy --workspace --all-targets # Lint (20 enforced lints)
cargo fmt --all -- --check # Format
RUSTDOCFLAGS="-D warnings" cargo doc --workspace --no-deps # Docs (zero warnings)
Lint ポリシー: pedantic と nursery を合わせた 20 個の clippy lint を deny レベルで適用しています。Cargo.toml の [workspace.lints.clippy] を参照してください。
コミュニティとコントリビューション
Victauri は、4DA Systems が開発するオープンソースプロジェクトです。同社は自社の Tauri アプリのテストにも Victauri を使用しています。Tauri アプリのフルスタックテストでデフォルトとなる方法を目指しています。その実現には、1 社だけでは足りません。
- Tauri アプリで使っていますか? ぜひお知らせください。ディスカッションまたは issue を作成してください。「使用者」リストへの追加や、問題点を学ぶ機会を歓迎します。
- 貢献したいですか? CONTRIBUTING.mdを参照してください。最初の貢献に適した分野として、
victauri-testのアサーションヘルパーの追加、フレームワーク別のテストガイド、CI のレシピがあります。 - バグや、動作しない Tauri アプリを見つけましたか? アプリと失敗したツール呼び出しを添えて issue を作成してください。こうした報告は、皆さんから寄せられる情報の中でも特に価値があります。
Victauri のおかげで WebDriver のセットアップに費やす週末を節約できたなら、⭐ を付けて、ほかの Tauri 開発者にも見つけてもらいましょう。
ライセンス
Apache-2.0 — LICENSE
4DA Systems が開発・保守しています。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。