JS から Rust コマンドへ引数を渡す方法を解説します。
Tauri は引数を自動的にシリアライズ(JSON変換)し、Rust 側の引数名にマッピングします。
Rust 側の定義
引数名は JS 側のオブジェクトのキーと正確に一致している必要があります(デフォルトではキャメルケースからスネークケースへの変換は行われませんが、rename_all で設定可能です)。
#[tauri::command]
fn greet(name: String, age: u8, is_human: bool) {
println!("Hello {}, age {}, human? {}", name, age, is_human);
}
※ 基本的な型(String, integer, bool)以外を受け取るには serde::Deserialize を実装した構造体である必要があります。
フロントエンド側の実装
第2引数にオブジェクトとしてデータを渡します。
import { invoke } from '@tauri-apps/api/core';
invoke('greet', {
name: 'Tauri User',
age: 25,
isHuman: true // 注意: Rust側で is_human (snake_case) の場合、デフォルトではエラーになるか渡されない
// Rust側を `isHuman` にするか、`#[serde(rename_all = "camelCase")]` を使うか、JS側を `is_human` に合わせる必要があります。
});
// 推奨: Rust 側を camelCase 対応にする
/*
#[derive(serde::Deserialize)]
#[serde(rename_all = "camelCase")]
struct User {
name: String,
is_active: bool,
}
*/
Tips: スネークケース変換
一般的に Rust はスネークケース (my_arg)、JS はキャメルケース (myArg) が好まれます。
これを自動変換するには、Rust 側の関数引数を構造体で受け取るようにし、その構造体に #[serde(rename_all = "camelCase")] を付けるのがベストプラクティスです。