利用可能な公式プラグインを確認する

Tauri v2 の公式プラグイン 30 種の役割と、デスクトップ専用・モバイル専用の区別、このサイトで使い方を扱うレシピの対応表。tauri info と tauri permission ls で導入状況と権限を確かめる方法も示す。

プラグイン拡張 対象: Tauri 2.x 更新日: 読了目安: 約8分 plugin-001
目次
  1. 前提条件
  2. 公式プラグインの一覧と対応レシピ
  3. デスクトップ専用のプラグインの扱い
  4. 1. 実行中の OS で呼び分ける (TypeScript)
  5. 2. ビルド先で登録を分ける (Rust)
  6. 動作確認
  7. よくあるエラーと対処法
  8. OS ごとの違いと注意点
  9. 関連レシピ

Tauri v2 では、ファイル操作・ダイアログ・通知・HTTP 通信などの機能が公式プラグインに分かれていて、必要なものだけを入れます。そのぶん「どのプラグインか」「iOS / Android でも使えるか」を先に確かめる必要があります。公式プラグインの一覧とこのサイトの対応レシピ、デスクトップ専用とモバイル対応の違い、入っているプラグインと権限の確かめ方をまとめます。

前提条件

新しく作ったプロジェクト(Tauri プロジェクトを作成する)に最初から入っているプラグインは Opener だけで、ほかは npm run tauri add <名前> で足します(プラグインをインストールして有効化する)。1 章の例では次の 2 つを使います。

npm run tauri add os
npm run tauri add autostart

ウィンドウ・メニュー・トレイ・パス・イベント・アプリ情報は本体の機能なので、プラグインは要りません。@tauri-apps/api から使い、権限は core: で始まります。

公式プラグインの一覧と対応レシピ

2026 年 9 月時点で 30 個あります。「名前」は tauri add に渡す名前で、npm パッケージは @tauri-apps/plugin-<名前>、クレートは tauri-plugin-<名前> です。公式ドキュメントの URL(clipboard、logging など)とは違う名前があります。「両方」はデスクトップと iOS / Android の両方で使えます。

名前できること対応レシピ
autostartログイン時に自動起動デスクトップsys-022
cli起動引数の解析デスクトップsys-013
clipboard-managerクリップボード両方(モバイルはテキストのみ)sys-007
deep-linkmyapp:// などの URL でアプリを開く両方なし
dialogファイル選択・メッセージ両方(モバイルはフォルダ選択なし)dlg-004
fsファイルの読み書き・監視両方fs-001 / fs-025
global-shortcutアプリの外でも効くショートカットデスクトップwin-031
httpRust 経由の HTTP 通信両方net-001
localhost本番でも localhost から画面を配信デスクトップなし
logログの出力両方plugin-008
notification通知両方dlg-009
opener既定のアプリで URL やファイルを開く両方(モバイルは URL のみ)なし
osOS の種類・バージョン両方sys-001
persisted-scopefs の許可範囲の変更を保存両方plugin-013
positionerトレイの近くなどへ移動デスクトップplugin-010
processアプリの終了・再起動デスクトップmenu-010(終了)
shell外部コマンドの実行両方(モバイルは URL を開くのみ)shell-001
single-instance多重起動の防止デスクトップplugin-011
sqlSQLite などのデータベース両方db-001
store設定のキーバリュー保存両方db-004
stronghold暗号化した保存領域両方db-005
updaterアプリの自動更新デスクトップなし
uploadHTTP でファイルをアップロード両方net-006
websocketWebSocket 通信両方net-009
window-stateウィンドウの位置と大きさを記憶デスクトップplugin-005

モバイル専用は barcode-scanner(バーコードの読み取り)、biometric(生体認証)、geolocation(位置情報)、haptics(振動)、nfc の 5 つで、このサイトでは扱っていません。

デスクトップ専用のプラグインの扱い

デスクトップ専用のプラグインは iOS / Android 向けのビルドに含められません。tauri add で入れると、autostart や window-state などのクレートは Cargo.toml のデスクトップ向けの節に、権限は platforms をデスクトップに絞った capabilities/desktop.json に入ります。platforms が合わない capability はビルド時に読み飛ばされるので、モバイル向けのビルドで権限が無いというエラーにはなりません。

[target.'cfg(not(any(target_os = "android", target_os = "ios")))'.dependencies]
tauri-plugin-autostart = "2"
tauri-plugin-window-state = "2"

一方、lib.rs への登録は条件なしで足されるので、モバイルもビルドするなら 1・2 章のように JS と Rust で分けます。

1. 実行中の OS で呼び分ける (TypeScript)

モバイルでデスクトップ専用プラグインの関数を呼ぶと、開発ビルドでは「autostart.enable not allowed. Plugin not found」、リリースビルドでは「Command plugin:autostart|enable not allowed by ACL」になります。os プラグインの platform() で先に分け、設定項目ごと隠します。

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

// platform() は同期で 'windows' / 'macos' / 'linux' / 'ios' / 'android' などを返す
const os = platform();
export const isMobile = os === 'ios' || os === 'android';

// <div id="autostart-row"><input type="checkbox" id="autostart"></div> を想定
export async function setupAutostartRow() {
  const row = document.querySelector<HTMLElement>('#autostart-row');
  const box = document.querySelector<HTMLInputElement>('#autostart');
  if (!row || !box) return;
  row.hidden = isMobile; // モバイルでは項目ごと隠す
  if (isMobile) return; // ここから先はデスクトップだけ
  box.checked = await isEnabled();
  box.addEventListener('change', () => void (box.checked ? enable() : disable()));
}

2. ビルド先で登録を分ける (Rust)

Rust では #[cfg(desktop)] の中で登録します。desktop と mobile は Tauri のビルドスクリプトが用意する条件で、モバイル専用のプラグインは逆に #[cfg(mobile)] で囲みます。

#[cfg_attr(mobile, tauri::mobile_entry_point)]
pub fn run() {
    // どの OS でも使えるプラグイン
    let builder = tauri::Builder::default().plugin(tauri_plugin_os::init());

    // デスクトップ専用のプラグイン(Cargo.toml でもデスクトップ向けだけに入っている)
    #[cfg(desktop)]
    let builder = builder
        .plugin(tauri_plugin_autostart::Builder::new().build())
        .plugin(tauri_plugin_window_state::Builder::new().build());

    builder
        .run(tauri::generate_context!())
        .expect("error while running tauri application");
}

プラグインを使う自分のコマンドや use も同じように囲みます。

動作確認

入っているプラグインは npm run tauri info の「Plugins」に、クレートと npm パッケージの組で出ます。

[-] Plugins
    - tauri-plugin-os 🦀: 2.3.2
    - @tauri-apps/plugin-os  ⱼₛ: 2.3.2
    - tauri-plugin-single-instance 🦀: 2.4.4
    - @tauri-apps/plugin-single-instance  ⱼₛ: not installed!

2 つのバージョンは揃えます(Tauri CLI を最新版にアップグレードする)。single-instance と persisted-scope は Rust だけで動くので、npm 側が「not installed!」でも正常です。<名前>:default の中身は npm run tauri permission ls <名前> の「Permissions:」の行で分かります。

window-state:default
...
Permissions: allow-filename, allow-restore-state, allow-save-window-state

default がすべてを許可するとは限りません。clipboard-manager ではこの行が空で、os:default にはホスト名の取得が入っていません(OS の種類・CPU アーキテクチャ・ホスト名を取得する)。capability に $schema を書いておけば、権限の名前はエディターが補完します。1 章の関数を npm run tauri dev で呼ぶと、チェックボックスに今の登録状態が出ます。

よくあるエラーと対処法

  • tauri add clipboard で別のものが入る・失敗する: tauri add は知らない名前をコミュニティ製とみなし、tauri-plugin-<名前> というクレートを探します。clipboard ではコミュニティ製の tauri-plugin-clipboard が入り、logging はクレートが無いので失敗します。表の「名前」を使います。
  • モバイルで「autostart.enable not allowed. Plugin not found」: デスクトップ専用のプラグインを呼んでいます。1 章のように分けます。
  • モバイル向けのビルドだけ「use of unresolved module or unlinked crate」を含むエラーになる: 2 章の #[cfg(desktop)] の囲み忘れです。
  • tauri info で片方だけ「not installed!」: Rust だけのプラグインでなければ、npm か Cargo の片方の入れ忘れです。

OS ごとの違いと注意点

部分対応の詳細は、公式の一覧ページ末尾の対応表で「*」にカーソルを合わせると出ます。表の注記以外では次の点に注意します。

  • Windows: 通知はインストールしたアプリでないと正しく動かず、開発中は PowerShell の名前とアイコンで表示されます。
  • macOS / iOS / Android: deep-link の URL スキームは設定ファイルで登録し、実行中には登録できません。
  • iOS / Android: fs は既定でアプリのフォルダにしかアクセスできません。モバイル専用のプラグインは、実機かエミュレーターで確かめます。

関連レシピ

参考リンク(公式ドキュメント)

Web Ninja

この記事を書いた人

Web Ninja ウェブエンジニア (Web Engineer)

会社員ネットワークエンジニアから独立してかれこれ 25 年以上 Web エンジニアとして活動中。普段は JavaScript と Node.js を自在に操り、時には C++ や Perl といった古流の技も嗜みます。近年は Tauri × Rust という新たな武器を手に、デスクトップアプリ開発の最前線を駆け抜けています。「作りたい」を「作れる」に変えるための、実践的な「技」をお届けします。

お問い合わせ: tauri.ninja@gmail.com

内容の誤り・動かないコードを報告する