SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

フロントエンジニアのためのTauri 2.0ではじめるRustプログラミング

Rustを使って「名前を付けて保存」メニューとファイルを保存する機能を実装しよう!

フロントエンジニアのための「Tauri 2.0」ではじめるRustプログラミング 第7回


  • X ポスト
  • このエントリーをはてなブックマークに追加

ベジェ曲線データをターミナルに表示する

 バックエンドでメニューを実行したら、フロンエンドにファイルを保存するイベントのメッセージを送ります。フロントエンドでそのイベントメッセージを受け取ったら、またバックエンドに"save"メッセージとともに保存する「ベジェ曲線データ」を引数として送り、TAURIコマンド「save」関数でファイルを保存する処理を行います。まだこのPage 2では、ベジェ曲線データの数値をターミナルに表示するだけで保存まではしません。

キャンバスを真っ白に初期化する新規作成メニュー

 次のサンプルコードを追記して、プロジェクトをデバッグビルドして実行したら、「ファイル」→「新規作成」メニューを実行してください。バックエンドから'event-new'イベントメッセージが呼ばれて、描いた絵が消えて初期状態に戻ります。

サンプルコード「src」→「main.js」
(前略)
// 新規
async function setNew() {
  await window.__TAURI__.event.listen('event-new', () => {
    _pos.length = 0;
    _current = 0;
    line();
  });
}
// 全てのDOMが読み込み完了したら
window.addEventListener("DOMContentLoaded", () => {
  setNew();
  setOpen();
(中略)
});
(後略)

サンプルコードの解説

 「setNew」関数において、TAURIのlistenメソッドで'event-new'メッセージが送られてくるのを待機します。'event-new'メッセージが送られてきたらベジェ曲線データを初期化して、空白でキャンバスを塗り潰します。

 htmlファイルのDOMが読み込み完了したらsetNew関数を呼び出します。

バックエンドからTAURIコマンド「save関数」を呼び出す

 バックエンドから「名前を付けて保存」のメッセージが送られてきたら、バックエンドにベジェ曲線データをTAURIコマンドsave関数に送ります。このとき、まだ何も処理していないので何も起こりません。

 戻り値の_saved変数には、最後に保存したパスが入っており、ファイルを開くダイアログを開くときに、そのディレクトリを最初に開きます。

サンプルコード「src」→「main.js」
(前略)
// 書き込み関数
async function setSave() {
  await window.__TAURI__.event.listen('event-save', async () => {
    _pos.length = _current*4;
    _saved = await invoke("save", {data: _pos});
  });
}
// 全てのDOMが読み込み完了したら
window.addEventListener("DOMContentLoaded", () => {
  setNew();
  setOpen();
  setSave();
(中略)
});
(後略)

サンプルコードの解説

 「setSave」関数において、TAURIのlistenメソッドで'event-save'メッセージが送られてくるのを待機します。'event-save'メッセージが送られてきたらベジェ曲線データを引数としてバックエンドに送ります。

 htmlファイルのDOMが読み込み完了したらsetSave関数を呼び出します。

TAURIコマンドsave関数

 以下のサンプルコード[2]を追記して、プロジェクトをデバッグビルドして実行します。その後、何らかの絵を描いて「ファイル」→「名前を付けて保存」メニューを実行します。すると、次の図のようにターミナルにベジェ曲線データの整数値が表示されます。

 #[tauri::command]で「save」関数をTAURIコマンド関数として宣言します。暫定的に戻り値に空の文字列を保存したファイル名として返します。

ターミナルにベジェ曲線データの数値を表示
ターミナルにベジェ曲線データの数値を表示
[2] サンプルコード「src-tauri」→「src」→「lib.rs」
(前略)
// データ保存TAURIコマンド関数
#[tauri::command]
fn save(data: Vec<isize>,loadsave: State<'_, LoadSavePath>) -> String {
  for d in data { println!("{}",d.to_string()); }
  "".to_string()
}
// エントリーポイント
#[cfg_attr(mobile, tauri::mobile_entry_point)]
pub fn run() {
  tauri::Builder::default()
  .plugin(tauri_plugin_shell::init())
  // TAURIコマンド関数の登録
  .invoke_handler(tauri::generate_handler![load,save])
  .setup(|app| {
    let _ = app.set_menu(get_menu(app.handle())?);
    let path = LoadSavePath::new(app);
    app.manage(path);
    app.on_menu_event(|handle, event| { run_menu_process(handle, event.id().as_ref()) });
    Ok(())
  })
  .run(tauri::generate_context!())
  .expect("error while running tauri application");
}
(後略)

サンプルコードの解説

 TAURIコマンドsave関数で、引数のdata配列を1行ずつターミナルに表示します。空白の文字列を戻り値で返します。

 「run」関数でTAURIビルダーのinvoke_handlerメソッドでTAURIコマンドsave関数を登録します。invokeは「呼び出す」意味で、handlerは「何かを扱う代理」の意味です。

次のページ
ファイルにベジェ曲線データを保存する

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
フロントエンジニアのためのTauri 2.0ではじめるRustプログラミング連載記事一覧

もっと読む

この記事の著者

大西 武(オオニシ タケシ)

 1975年香川県生まれ。大阪大学経済学部経営学科中退。プログラミング入門書などを30冊以上商業出版する作家。ドコモでグランプリなどコンテストに20回以上入賞するアーティスト。オリジナルの間違い探し「3Dクイズ」がTVで約10回出題。プロフィールサイト:https://profile.vixar.jp

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

CodeZine編集部(コードジンヘンシュウブ)

CodeZineは、株式会社翔泳社が運営するソフトウェア開発者向けのWebメディアです。「デベロッパーの成長と課題解決に貢献するメディア」をコンセプトに、現場で役立つ最新情報を日々お届けします。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/21158 2025/05/12 18:07

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング