tauri-ipc-commandslisted
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 エ