テキストや画像のコピー&ペースト機能を Rust 側から制御する方法です。
Tauri v2 では tauri-plugin-clipboard-manager プラグインを使用します。
前提条件
Permissions (権限) の設定
クリップボード操作は機密情報に触れる可能性があるため、明示的な権限設定が必要です。
src-tauri/capabilities/default.json に以下を追加します。
{
"permissions": [
"clipboard-manager:allow-read-image",
"clipboard-manager:allow-read-text",
"clipboard-manager:allow-write-image",
"clipboard-manager:allow-write-text",
...
]
}
1. プラグインの導入
src-tauri ディレクトリで以下のコマンドを実行します。
cargo add tauri-plugin-clipboard-manager
また、画像を扱う場合は Cargo.toml の tauri 依存関係に image-png (または image-ico) 機能を追加する必要があります。
[dependencies]
tauri = { version = "2", features = ["image-png"] }
lib.rs でプラグインを初期化します。
#[cfg_attr(mobile, tauri::mobile_entry_point)]
pub fn run() {
tauri::Builder::default()
.plugin(tauri_plugin_clipboard_manager::init())
.run(tauri::generate_context!())
.expect("error while running tauri application");
}
2. テキストの読み書き
tauri_plugin_clipboard_manager::ClipboardExt トレイトを use することで、app.clipboard() が使えるようになります。
use tauri_plugin_clipboard_manager::ClipboardExt;
#[tauri::command]
fn copy_text(app: tauri::AppHandle, text: String) {
// クリップボードに書き込み
if let Err(e) = app.clipboard().write_text(text) {
eprintln!("コピー失敗: {}", e);
}
}
#[tauri::command]
fn paste_text(app: tauri::AppHandle) -> String {
// クリップボードから読み取り
// 失敗する(中身がない、テキストではない等)場合は空文字を返す例
app.clipboard().read_text().unwrap_or_default()
}
3. 画像の書き込み
画像データを書き込むには tauri::image::Image を使います。
use tauri::image::Image;
use tauri_plugin_clipboard_manager::ClipboardExt;
#[tauri::command]
fn copy_icon(app: tauri::AppHandle) {
// 例として、埋め込まれたPNG画像データをコピーします
let bytes = include_bytes!("../icons/icon.png");
// バイト列から Image オブジェクトを作成
if let Ok(image) = Image::from_bytes(bytes) {
// クリップボードへ書き込み
let _ = app.clipboard().write_image(&image);
println!("アイコンをコピーしました");
}
}
まとめ
- プラグイン
tauri-plugin-clipboard-managerを使う。 ClipboardExtを use することで、app.clipboard()メソッドが利用可能になる。read_text,write_text,read_image,write_imageが基本メソッド。capabilities(権限) の設定を忘れずに。