OS 起動時にアプリを自動起動させる

Recipe ID: sys-022

OS(Windows/Mac/Linux)の起動時に、アプリを自動的に起動させる方法を解説します。
Tauri v2 では @tauri-apps/plugin-autostart を使用します。

前提条件

プラグインのインストールが必要です。

npm run tauri add autostart

Permissions (権限) の設定

src-tauri/capabilities/default.json に以下の権限を追加します。

{
    "permissions": [
        "autostart:allow-enable",
        "autostart:allow-disable",
        "autostart:allow-is-enabled",
        ...
    ]
}

1. フロントエンドから作成する (TypeScript)

@tauri-apps/plugin-autostartenable(), disable(), isEnabled() 関数を使用します。
通常はアプリの設定画面などでユーザーがトグルスイッチを操作したタイミングで呼び出します。

import { enable, disable, isEnabled } from '@tauri-apps/plugin-autostart';

// 自動起動を有効にする
async function enableAutoStart() {
  try {
    await enable();
    console.log('自動起動を有効にしました');
  } catch (e) {
    console.error('有効化に失敗:', e);
  }
}

// 自動起動を無効にする
async function disableAutoStart() {
  try {
    await disable();
    console.log('自動起動を無効にしました');
  } catch (e) {
    console.error('無効化に失敗:', e);
  }
}

// 現在の状態を確認する
async function checkAutoStartStatus() {
  const active = await isEnabled();
  console.log(`現在の自動起動設定: ${active ? '有効' : '無効'}`);
}

// 使用例: HTML のボタンなどに割り当て
/*
<button id="enable-btn">Enable</button>
<button id="disable-btn">Disable</button>
*/

document.getElementById('enable-btn')?.addEventListener('click', enableAutoStart);
document.getElementById('disable-btn')?.addEventListener('click', disableAutoStart);

// 初期チェック
checkAutoStartStatus();

2. バックエンドから作成する (Rust)

Rust 側で自動起動の制御を行うには、ManagerExt トレイトを使用します。
lib.rs での初期化時に MacosLauncher の設定が必要です。

Rust 実装

src-tauri/Cargo.tomltauri-plugin-autostart が追加されていることを確認してください。

use tauri::{command, AppHandle};
use tauri_plugin_autostart::MacosLauncher;
use tauri_plugin_autostart::ManagerExt;

#[command]
fn toggle_autostart(app: AppHandle, enable: bool) -> Result<(), String> {
    let autostart_manager = app.autostart();
    
    if enable {
        autostart_manager.enable().map_err(|e| e.to_string())?;
    } else {
        autostart_manager.disable().map_err(|e| e.to_string())?;
    }
    Ok(())
}

#[cfg_attr(mobile, tauri::mobile_entry_point)]
pub fn run() {
    tauri::Builder::default()
        .plugin(tauri_plugin_autostart::init(MacosLauncher::LaunchAgent, Some(vec!["--flag"])))
        .invoke_handler(tauri::generate_handler![toggle_autostart])
        .run(tauri::generate_context!())
        .expect("error while running tauri application");
}

フロントエンドからの呼び出し

import { invoke } from '@tauri-apps/api/core';

// 有効化
invoke('toggle_autostart', { enable: true });

// 無効化
invoke('toggle_autostart', { enable: false });