🐥

TauriとLeptosで作るデスクトップアプリ(3)バックエンドを呼び出す

2024/08/19に公開

はじめに

TauriとLeptosでデスクトップアプリを作っていきます。今回は、LeptosフロントエンドからTauriバックエンドのコマンドを呼び出します。あわせて、デバッグ用にフロントエンドのコンソールにログを表示できるようにします。

関連記事
環境
  • Windows 11 Home
  • Rust 1.81
  • Tauri 2.0.1

https://tauri.app/

  • Leptos 0.7.0-rc0

https://leptos.dev/

依存パッケージを追加する

  • ロギングを行う

Tauriバックエンド側では、標準出力はそのままcargo tauri devを実行したターミナルに表示されます。Leptosフロントエンド側では、ソースコード内でprintln!()としても、どこにも表示されません。開発者ツールのコンソールでログを確認できるようにlogconsole_logを追加します。

  • Tarui APIをRustフロントエンドで扱う

Rustフロントエンド側でTauri APIにバインディングするためにtauri-sysを追加します。同時にシリアライズするためにserdeを追加します。

上記2つをあわせて、./apps/src-ui/Cargo.toml[dependencies]を以下のように更新します。

https://github.com/daizutabi/tauri-leptos-example/blob/0.3/apps/src-ui/Cargo.toml#L6-L21

あいさつコンポーネントを作成する

Tauriのcreate-tauri-appでも自動で作られる「あいさつ」コンポーネントを作成します。LeptosフロントエンドからTauriバックエンドにStringを送信し、それを加工してTauriバックエンドからLeptosフロントエンドにStringを返信します。

Leptosフロントエンドクレート./apps/src-ui内のcomponentsモジュールにgreetサブモジュールを作ります。ディレクトリ構成は以下のとおりです。

tauri-leptos-example
├─ apps/
│  ├─ src-tauri/
│  └─ src-ui/
│     ├─ src/
│     │  ├─ components/
│     │  │  ├─ counter.rs
│     │  │  ├─ greet.rs
│     │  │  └─ mod.rs
│     │  ├─ app.rs
│     │  ├─ lib.rs
:     :  └─ main.rs

mod.rsgreetサブモジュールの宣言を追加します。

https://github.com/daizutabi/tauri-leptos-example/blob/0.3/apps/src-ui/src/components/mod.rs

greet.rsにあいさつコンポーネントを実装します。

https://github.com/daizutabi/tauri-leptos-example/blob/0.3/apps/src-ui/src/components/greet.rs

on_click関数の中でlog::info!("invoke: {name}");としています。これで、開発者ツールのコンソールにログが表示されます。tauri_sysを使うと、Tauriバックエンドのコマンド呼び出しがinvoke()関数で簡単にできます。view!マクロの<Button>コンポーネントでは、on_click属性が変数と同名なので、短縮表記をしています。また、ボタンのスタイルをappearance属性で指定しています。

以下、LeptosフロントエンドのRustソースコードを変更します。

https://github.com/daizutabi/tauri-leptos-example/blob/0.3/apps/src-ui/src/app.rs

https://github.com/daizutabi/tauri-leptos-example/blob/0.3/apps/src-ui/src/lib.rs

lib.rsでは、console_log::init()でログレベルをINFOに変更しています。

バックエンドでコマンドを用意する

Tauriバックエンドクレート./apps/src-tauri内でRustソースコードを実装します。ディレクトリ構成は以下のとおりです。

tauri-leptos-example
├─ apps/
│  ├─ src-tauri/
│  │  ├─ src/
│  │  │  ├─ commands.rs
│  │  │  ├─ lib.rs
│  │  :  └─ main.rs
:  └─ src-ui/

commands.rsにコマンドを書きます。今回はStringを受け取って、Stringを返す単純な関数です。引数の名前nameは、Leptosフロントエンドで用意した構造体GreetArgsのフィード名に一致する必要があります。

https://github.com/daizutabi/tauri-leptos-example/blob/0.3/apps/src-tauri/src/commands.rs#L1-L5

lib.rsでコマンドを実装した関数をハンドラに登録します。

https://github.com/daizutabi/tauri-leptos-example/blob/0.3/apps/src-tauri/src/lib.rs

プロジェクトを実行します。

> cargo tauri dev

greet

期待どおりの動作が確認できました。

サンプルコード

今回作成したプロジェクトは以下からダウンロード可能です。

https://github.com/daizutabi/tauri-leptos-example/tree/0.3

GitHubで編集を提案

Discussion