← ClaudeAtlas

tauri-ipc-commandslisted

vibe-editor で新しい Tauri IPC コマンド (Rust → Renderer) を追加・変更するときに必ず使うチェックリスト skill。`src/types/shared.ts` の型・`src-tauri/src/commands/<領域>.rs` の Rust 構造体 (`#[serde(rename_all = "camelCase")]`)・`src-tauri/src/commands/mod.rs` のモジュール宣言・`src-tauri/src/lib.rs` の `invoke_handler!` 登録・`src/renderer/src/lib/tauri-api.ts` の wrapper の **5 点同期** が外れると runtime エラーや silent 失敗を起こすため、必ずこの skill の手順で進める。ユーザーが「IPC を足す」「invoke を追加」「tauri command を新規」「Rust から呼べるように」「shared.ts に型を足して」「window.api.◯◯ を追加」「Rust ↔ TS の型同期」「emit / listen を追加」「PTY コマンドを追加」「git コマンドを追加」「settings に保存項目を追加」等を言ったとき、また `#[tauri::command]` を新規に書きそうなとき、`commands/<領域>.rs` を編集するときには必ずこの skill を起動すること。
yusei531642/vibe-editor · ★ 3 · Code & Development · score 69
Install: claude install-skill yusei531642/vibe-editor
# tauri-ipc-commands vibe-editor で「Rust 側の機能を Renderer から呼べるようにする」ときの **5 点同期チェックリスト**。 1 か所でも漏れると、`window.api.xxx is not a function` / `invoke "xxx" not found` / camelCase ⇄ snake_case の型不一致 / runtime エラーが発生する。 > 既存コマンドは `src-tauri/src/commands/{app,git,terminal,settings,dialog,sessions,team_history,files,fs_watch,atomic_write,role_profiles,vibe_team_skill}.rs`。 > Renderer 側ラッパは `src/renderer/src/lib/tauri-api.ts`。 > 型は `src/types/shared.ts`。 --- ## 5 点同期 (どれも必須) ``` ┌──────────────────────────────────────────┐ │ 1. src/types/shared.ts │ TS 型 (Request / Response, camelCase) │ 2. src-tauri/src/commands/<領域>.rs │ Rust 構造体 + #[tauri::command] │ 3. src-tauri/src/commands/mod.rs │ pub mod 宣言 (新ファイルを足したとき) │ 4. src-tauri/src/lib.rs │ invoke_handler! に function 名を登録 │ 5. src/renderer/src/lib/tauri-api.ts │ invoke('xxx', { ... }) wrapper └──────────────────────────────────────────┘ ``` **この順番で書くと最後に typecheck で必ず噛み合う**。逆順に書くと型不一致を検出するタイミングが遅れる。 --- ## Step 1: `src/types/shared.ts` に Request / Response 型を追加 camelCase で書く (Rust 側で `#[serde(rename_all = "camelCase")]` するので、TS 側は素直な camelCase)。 ```ts // 例: ファイルのハッシュを取得する hashFile コマンド export interface HashFileRequest { path: string; /** sha256 / md5。省略時は sha256 */ algorithm?: 'sha256' | 'md5'; } export interface HashFileResult { hash: string; byteLen: number; modifiedMs: number; } ``` ### 既存型の流用判断 - `path` 系は string で書く (Rust 側で `PathBuf` に from する)。 - 「成功 or エ