プラグインをインストールして有効化する

Recipe ID: plugin-002

Tauri のプラグインを使用するための一般的な手順を解説します。プラグインは通常、Rust 側のロジック(クレート)とフロントエンド側のインターフェース(npm パッケージ)の両方で構成されています。

1. インストール

Tauri のプラグインは、「Rust 側(バックエンド)」「JavaScript 側(フロントエンド)」の2つの部品で構成されています。

  • Rust 側: 実際のネイティブ機能(ファイル操作、OS情報取得など)を実行する実体。
  • JavaScript 側: Rust 側の機能をフロントエンドから呼び出すためのインターフェース。

そのため、JavaScript パッケージ (npm install) だけでは動作しません。必ず Rust 側のクレート (cargo add) も追加する必要があります。

Tauri CLI の add コマンドを使用すると、これら両方のインストールと設定を自動で行ってくれるため推奨されます。

# npm を使用している場合(推奨)
# 内部で Rust 依存関係と JS 依存関係の両方を追加します
npm run tauri add os

もし手動でインストールする場合は、両方のコマンドを実行する必要がある点に注意してください。

# 手動で行う場合(あくまで参考)
cargo add tauri-plugin-os
npm install @tauri-apps/plugin-os

2. Rust 側での登録

src-tauri/main.rs (または lib.rs) でプラグインをビルドプロセスに登録します。

fn main() {
    tauri::Builder::default()
        // プラグインの初期化関数を渡す
        .plugin(tauri_plugin_os::init())
        .run(tauri::generate_context!())
        .expect("error while running tauri application");
}

※ プラグインによっては init() ではなく Builder::new().build() などの形式を取る場合もあります。各プラグインのドキュメントを確認してください。

3. 権限の設定 (Capabilities)

Tauri v2 では、各プラグインを使用するために明示的な権限設定が必要です。src-tauri/capabilities/default.json などの設定ファイルに追記します。

{
  "permissions": [
    ...,
    // 必要な権限を追加 (例: すべて許可)
    "os:default",
    // または特定の操作のみ許可
    // "os:allow-platform",
    // "os:allow-version"
  ]
}

4. フロントエンドでの使用

JavaScript/TypeScript コードからプラグインの API を呼び出します。

import { platform, version } from '@tauri-apps/plugin-os';

const osPlatform = await platform();
const osVersion = await version();

console.log(`Platform: ${osPlatform}, Version: ${osVersion}`);

トラブルシューティング

トラブルシューティング

ビルドエラー

Rust 側の cargo add と JavaScript 側の npm install の両方が完了しているか、バージョンが整合しているか確認してください。

コマンドが見つからない (Command not found)

プラグインが src-tauri/src/lib.rs (または main.rs) で正しく初期化 (.plugin(...)) されていない可能性があります。Tauri v2 のテンプレートでは通常 lib.rs に記述します。

権限エラー (Permission Denied)

Tauri v2 では権限管理(Capabilities)が必須です。以下の2点を確認してください。

1. src-tauri/capabilities/default.json (または任意の権限ファイル) に、対象プラグインの権限(例: os:default)が記述されているか。
2. tauri.conf.jsonapp.security.capabilities に、その権限ファイルの名前(識別子)が含まれ、有効化されているか。