1. 概要

Rustとwebフロント技術でデスクトップアプリケーション開発のできるフレームワーク「Tauri」が正式リリースされたと聞いて,公式のQuick Startを試したり,フロントを書き換えてビルドしたりして遊んでみた.

2. 背景

動機

Rustで動くデスクトップアプリ開発フレームワークが先日(2022/06/16)正式リリースされたと知った.

    • Electron代替を目指すRust製フレームワーク「Tauri」がバージョン1.0に到達、Windows/Mac/Linuxに対応 - Publickey

 

    Tauri on Twitter

最近ちょうどRustを触りたいと思っていて,さらにデスクトップアプリ開発にも興味があったので,とりあえずクイックスタートから試してみることにした.

調査

基本情報
クロスプラットフォームなアプリ開発フレームワークで,web技術でフロント,Rustで内部処理を記述できる.

    Build smaller, faster, and more secure desktop applications with a web frontend | Tauri Studio

Version.1.0の現在(2022/6/19)時点で,Windows,Mac,Linuxに対応していて,将来的にはモバイル(Android,iOS)への対応予定もある.(昔はM1 Macで動作しなかったという情報も見かけたが,今回試した範囲ではM1 Macでも動作した.)

OSのWebレンダー(HTMLを表示する機能)を利用することで,軽量なアプリサイズを実現している.

    • TAURIを触ってみて感じたこと – Qiita

 

    • Rustの活用でElectronよりも軽くて速いアプリフレームワーク「Tauri」が安定版に – 窓の杜

 

    Rust GUI の決定版! Tauri を使ってクロスプラットフォームなデスクトップアプリを作ろう

Electronとの比較
web技術でデスクトップアプリを開発できるという点で,よくElectronと比較されている.

    • 内部処理をRustで書けるため,Node.jsで処理するElectronよりも軽くて速い点で優れている.

 

    他方で,Rustの知識が必要なことと,開発中も更新の度に毎回ビルド(やや時間がかかる)をする必要がある点などを気にしている人もいた.

(以上,デスクトップアプリ開発未経験者がwebで調べた情報)

開発環境

    • マシン:MacBook Air (M1, 2020)

 

    OS:MacOS Big Sur

3. Quick Start

公式のQuick Startを試してみる.

    Quick Start | Tauri Studio

HTML/CSS/JSとViteが用意されているが,今回はHTML/CSS/JS を試すことにした.

    HTML/CSS/JavaScript | Tauri Studio

アプリケーションの雛形を作る

Tauriホームページに書かれているcreateコマンドを実行(今回はyarnを使用)

 yarn create tauri-app

※ npm,yarn,pnpmを使う方法は公式ガイドを参照

アプリ名,ウィンドウ名の入力と,開発環境の選択が案内される

    今回は,アプリ名とウィンドウ名をデフォルト(Tauri App),開発環境をVanilla.jsとした.

終了すると以下のメッセージが表示される

    Your installation completed.
    $ cd tauri-app
    $ yarn install
    $ yarn tauri dev

上記のコマンドを実行すると以下の画面が表示される

画像

アプリのカスタマイズ方法を学ぶ

フロント開発用のディレクトリを作成

HTMLでUIを作成する

    ディレクトリuiを作成し,その中にindex.htmlを作成する
 mkdir ui
 <!DOCTYPE html>
 <html lang="en">
   <head>
     <meta charset="UTF-8" />
     <meta http-equiv="X-UA-Compatible" content="IE=edge" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
     <title>Document</title>
   </head>
   <body>
     <h1>Welcome from Tauri!</h1>
   </body>
 </html>

Rustプロジェクトを作成

Tauri AppのコアとなるRustプロジェクトを作成する.

    • TauriはtauriというRust crateを通じて,ウィンドウ,ビュー,OSを呼び出す.

 

    管理には,RustのビルドツールであるCargoを使用する.

initコマンドの実行
initコマンドで,最小限のRustプロジェクトを構成する.

 yarn tauri init

※npm,yarn,pnpm,cargoを使用する方法は公式ガイドを参照

質問内容

1.アプリ名

    今回はtauri-app

2.ウィンドウタイトル

    今回はtauri-app

3.webアセットのパス

    • 本番用にビルドするフロントエンドのパス

/src-tauri/taruri.conf.jsonからの相対パスで記入する
今回は../uiと答える

4.devサーバのURL

    • 開発中にビルドするフロントエンドのパス

/src-tauri/taruri.conf.jsonからの相対パスで記入する
今回は../uiと答える

完了すると,src-tauri/が作成される

生成されたファイルの説明

src-tauri/Cargo.toml

Cargoのmanifestファイル
アプリ構築のメタデータなどを記述

src-tauri/tauri.conf.json

アプリのアセットや構成をカスタマイズするために使用

先ほど入力したフロントエンドのパスが”buirld”:{“devPath”, “distDir”}に書かれている

APIの許可リストなどに利用

src-tauri/icons/

デフォルトのアイコン画像の入ったディレクトリ

src-tauri/src/main.rs

tauriのエントリーポイントとなるメインプログラム

#![cfg_attr()]は,windowsでアプリを開く際にコマンドプロンプトを表示しないための記述

main()はアプリのエントリーポイントとなるメイン関数

  #![cfg_attr(
     all(not(debug_assertions), target_os = "windows"),
     windows_subsystem = "windows"
  )]
 
 fn main() {
 tauri::Builder::default()
    .run(tauri::generate_context!())
    .expect("error while running tauri application");
 }

ビルドして変更が反映されていることを確認

再びdevモードでビルドして,新たに作成したUIとRustプログラムが動いていることを確認する.

 yarn tauri dev

※ npm,yarn,pnpmを使うは公式ガイドを参照

画像

4. フロント部分のカスタマイズ

ui/に適当なフロント要素(HTML/CSS/JS)を配置してみる.

画像

5. アプリケーションのビルド

そのままビルドコマンドを実行するとエラーが発生する

You must change the bundle identifier in tauri.conf.json > tauri > bundle > identifier. The default value com.tauri.dev is not allowed as it must be unique across applications.

アプリケーションのIDをユニークなものに変更する.

    • 今回は検証で公開予定もないので,適当に.sandboxを末尾につけ足したものだけのものを用いた.

 

    Cf. Generate unique bundle identifier · Issue #2431 · tauri-apps/tauri
画像

ビルドコマンドを実行する

 yarn tauri build

src-tauri/target/release/tauri-app(アプリ)とtauri-app/src-tauri/target/release/bundle/dmg/tauri-app_0.1.0_aarch64.dmg(ディスクイメージ)がビルドされる.

画像
画像
画像

6. まとめ

TauriのQuick Startを試して,その後にフロント部分を変えてビルドまで試してみました.
これから,内部処理の書き方も勉強して色々試してみます.
何か面白いことがあったら続報を上げます.

广告
将在 10 秒后关闭
bannerAds