「アプリが起動した瞬間に初期設定ファイルを読み込みたい」「アプリが終了するときにログを保存したい」といった処理は、Tauri のライフサイクルフックを利用して記述します。
1. 起動時の処理: setup フック
アプリの起動直後、まだウィンドウが表示される前などに実行されます。
ここで初期データのロードや、ディレクトリの作成などを行います。
Tauri v2 では通常 src-tauri/src/lib.rs に記述します。
// src-tauri/src/lib.rs
use tauri::Manager; // app.path() などを使うために必要
#[cfg_attr(mobile, tauri::mobile_entry_point)]
pub fn run() {
tauri::Builder::default()
.setup(|app| {
// --- 起動時の処理ここから ---
println!("アプリの初期化を開始します...");
// 例: データ保存用ディレクトリのパスを取得
// app.path().app_data_dir() は Result を返すため unwrap 等で処理
let app_data_dir = app.path().app_data_dir().unwrap();
// ディレクトリが存在しない場合は作成する
if !app_data_dir.exists() {
std::fs::create_dir_all(&app_data_dir)?;
println!("データディレクトリを作成しました: {:?}", app_data_dir);
}
// --- 起動時の処理ここまで ---
// Ok(()) を返さないとアプリが起動せずに終了します
Ok(())
})
.run(tauri::generate_context!())
.expect("error while running tauri application");
}
2. 実行中・終了時の処理: run コールバック
.run() メソッドにクロージャ(関数)を渡すことで、イベントループ内の様々なイベントを捕捉できます。
特に アプリ終了時 の処理を書きたい場合に便利です。
// src-tauri/src/lib.rs
#[cfg_attr(mobile, tauri::mobile_entry_point)]
pub fn run() {
// 1. ビルダーを作成し、.build() で App インスタンスを生成する
let app = tauri::Builder::default()
.setup(|app| {
// ... setup処理 ...
Ok(())
})
.build(tauri::generate_context!())
.expect("error while running tauri application");
// 2. app.run() にクロージャを渡してイベントを監視する
app.run(|_app_handle, event| {
match event {
// アプリ終了リクエスト (ウィンドウの閉じるボタンや CMD+Q など)
tauri::RunEvent::ExitRequested { api, .. } => {
println!("アプリが終了しようとしています");
// 終了前に保存処理などを行う
// save_app_state();
// 必要であれば終了をキャンセルする
// api.prevent_exit();
}
_ => {}
}
});
}
// 補足: 状態保存用の関数例
fn save_app_state() {
println!("データを保存しました");
}