クリップボードにテキストをコピーする

Recipe ID: sys-007

クリップボードにテキスト(文字列)をコピーする方法を解説します。
Tauri v2 では @tauri-apps/plugin-clipboard-manager を使用します。

前提条件

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

npm run tauri add clipboard-manager

Permissions (権限) の設定

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

{
    "permissions": [
        "clipboard-manager:default",
        "clipboard-manager:allow-write-text",
        ...
    ]
}

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

@tauri-apps/plugin-clipboard-managerwriteText(text) 関数を使用します。非同期で実行されます。

import { writeText } from '@tauri-apps/plugin-clipboard-manager';

async function copyToClipboard(text: string) {
  try {
    await writeText(text);
    console.log('クリップボードにコピーしました');
  } catch (error) {
    console.error('コピーに失敗しました:', error);
  }
}

// 使用例
copyToClipboard("Hello, Tauri!");

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

Rust 側(バックエンド)でクリップボードを操作するには tauri_plugin_clipboard_manager::ClipboardExt トレイトを使用します。
これを使うには、npm run tauri add clipboard-manager を実行した際に src-tauri/Cargo.toml にプラグインが追加され、lib.rs で初期化されている必要があります。

Rust 実装

use tauri::command;
use tauri_plugin_clipboard_manager::ClipboardExt;

#[command]
fn copy_to_clipboard_from_rust(app: tauri::AppHandle, text: String) {
    // AppHandle または Window に対して .clipboard() メソッドが使えるようになります
    app.clipboard().write_text(text).unwrap();
}

#[cfg_attr(mobile, tauri::mobile_entry_point)]
pub fn run() {
    tauri::Builder::default()
        .plugin(tauri_plugin_clipboard_manager::init()) // プラグインの初期化が必要
        .invoke_handler(tauri::generate_handler![copy_to_clipboard_from_rust])
        .run(tauri::generate_context!())
        .expect("error while running tauri application");
}

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

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

invoke('copy_to_clipboard_from_rust', { text: 'Message from Rust!' });