フロントエンドから呼び出せる Rust の関数(コマンド)を定義する基本手順を解説します。
#[tauri::command] マクロを付与し、tauri::Builder でハンドラとして登録する必要があります。
基本的な定義
#[tauri::command] マクロを関数に付与します。
// src-tauri/src/lib.rs などに記述
// 単純な文字列を返す例
#[tauri::command]
fn greet(name: &str) -> String {
format!("Hello, {}!", name)
}
登録方法 (src-tauri/src/lib.rs)
src-tauri/src/lib.rs にある tauri::Builder の invoke_handler チェーンメソッド内で generate_handler! マクロを使用して登録します。Tauri v2 のデフォルトテンプレートでは、アプリケーションのエントリーポイント生成ロジックは lib.rs に記述されています。
// src-tauri/src/lib.rs
#[cfg_attr(mobile, tauri::mobile_entry_point)]
pub fn run() {
tauri::Builder::default()
.invoke_handler(tauri::generate_handler![greet]) // 配列の中にカンマ区切りで複数のコマンド記述可能
.run(tauri::generate_context!())
.expect("error while running tauri application");
}
フロントエンドからの呼び出し
@tauri-apps/api/core の invoke 関数を使用して、登録したコマンドを呼び出します。
invoke は Promise を返すため、async/await または .then() で処理します。
import { invoke } from '@tauri-apps/api/core';
async function callGreet() {
try {
// ジェネリクスで戻り値の型を指定可能 (<string>)
// 引数はオブジェクトとして渡す (キーはRust側の引数名と一致させる)
const message = await invoke<string>('greet', { name: 'World' });
console.log(message);
} catch (error) {
console.error('Failed to invoke greet:', error);
}
}
注意点
- 関数名はフロントエンドで呼び出すときの引数(文字列)になります(スネークケースが標準)。
- 引数や戻り値は
serde::Serialize/serde::Deserializeを実装している必要があります。