このページ内容は2022年9月9日以降、再調査・再検証してません。実際に扱う際は最新の情報にアクセスしてください。
tauriはデスクトップアプリケーションを開発 (将来的にはモバイルアプリケーションも開発) するためのフレームワークで、UI部分はWebViewを利用し、アプリのバックエンドはRustを使いますtauri。
ちなみにWebViewはビルド時に統合されず、起動するプラットフォームごとに自動で切り替わるため、アプリのパッケージサイズが小さくなりますtauri_build。
tauriではパッケージマネージャーとして、cargoやyarn, npm, pnpmなどが選択できます。cargoを選択した場合はvanilla JSかyew (Rust) を選択でき、pnpm, yarn, npmを選択した場合はvanilla JS, Vue, Svelte, React, Solid, Next.js, PreactをTypeScriptの有無を含め選択できます。Roadmapは提供されてませんが、コードを見た感じだとAngular, Nuxt, Gatsbyあたりもサポートしそうでしたtauri_ui_support。あと、現状バックエンドはRustで固定ですが、将来的にGo, Nim, Python, C#を利用可能にするそうですtauri_backend_support。
初期テンプレートで作成すると、以下のようなディレクトリ構成になります。srcディレクトリはUI部分を書くところで、テンプレート作成時に選択したライブラリ・フレームワークのコードが追加されます。src-tauriディレクトリはRustのコードを追加する部分で、パフォーマンスやメモリ安全性を高めたいときに使います。
1tauri-sample-app2├── public3├── src4├── src-tauri5├── index.html6├── package.json7├── tsconfig.json8├── tsconfig.node.json9└── vite.config.ts
ちなみに初期テンプレートを起動すると以下のような、入力した名前を表示するデスクトップアプリを起動できます。
srcディレクトリでUI, src-tauriディレクトリでRustのコードを書きますが、Rust側で定義したメソッドを使うのも簡単にできます。まず、Rust側で以下のようにinvoke_handlerで関数を登録します。
src-tauri/src/main.rs1#[tauri::command]2fn greet(name: &str) -> String {3format!("Hello, {}! You've been greeted from Rust!", name)4}56fn main() {7tauri::Builder::default()8.invoke_handler(tauri::generate_handler![greet])9.run(tauri::generate_context!())10.expect("error while running tauri application");11}
その次に、UI側でinvoke APIを使ってRust関数を呼び出すことで、Rust側で定義したメソッドを利用できます。
src/App.tsx1import { useState } from "react";2import reactLogo from "./assets/react.svg";3import { invoke } from "@tauri-apps/api/tauri";4import "./App.css";56function App() {7const [greetMsg, setGreetMsg] = useState("");8const [name, setName] = useState("");910async function greet() {11setGreetMsg(await invoke("greet", { name }));12}1314return (15<div>16// ...17// input要素に入力された値をボタンを押したら表示する18<div>19<input onChange={(e) => setName(e.currentTarget.value)} />20<button type="button" onClick={() => greet()}>Greet</button>21</div>2223<p>{greetMsg}</p>24</div>25);26}2728export default App;