- Tauriは、すべての主要なデスクトップ(macOS、Linux、Windows)およびモバイル(iOS、Android)プラットフォーム向けに、小さく高速なバイナリを構築するためのフレームワーク
- HTML、JavaScript、CSSにコンパイルされるあらゆるフロントエンドフレームワークを統合でき、必要に応じてバックエンドロジックのためにRust、Swift、Kotlinのような言語を活用できる
- 幅広いJavaScript APIを提供しており、ほとんどの場合はRust、Swift、Kotlinでコードを書く必要はない
いつTauriを使うべきか?
- すべてのプラットフォーム向けに単一のUIコードベースを求める場合
- できるだけ多くのユーザーに、それぞれのプラットフォーム(例: Windows、macOS、Linux、Android、iOS)でアクセスしてもらいたい場合
- フロントエンドWeb開発者で、ネイティブアプリケーションを書きたい場合
- Rust開発者で、必要に応じてRustでも書ける選択肢を持ちながら、優れたUIでアプリケーションを作りたい場合
- Web開発者チームがあり、低い初期投資でネイティブアプリケーション市場へ拡張したい場合
- Rust開発者チームがあり、すべてをRustで書きたい場合
2.0の利点と改善点
はじめやすさの改善
- 開発者体験(DX)を重視し、この初期プロセスを最終的なアプリケーションの構築・配布と同じくらいスムーズにしようとしている
- create-tauri-app(CTA)というプロジェクトを用意し、開発者がゼロから始めて、数時間ではなく数分で動作するTauriアプリを手に入れられる
Hot-Module Replacement
- 1.xですでに開発プロセス改善のために検討されていたホットモジュールリプレースメント(HMR)を、モバイル端末およびエミュレーターへ拡張
- アプリケーションのフロントエンドへのあらゆる変更は、アプリ全体を再ビルドする必要がなく、開発中の端末やOS上でどのように見えるかをリアルタイムでプレビューできる
プラグイン
- Tauri 2.0では、より進化したプラグインシステムを構築。従来機能の多くを公式プラグインへ移行し、コミュニティがTauriへより簡単に貢献できるようにした
- プラグインシステムはモバイルプラグインもサポート。iOSではSwift、AndroidではKotlinでネイティブコードを書いたり再利用したりでき、アノテーション(Androidの
@Command)を使ったり、サブクラス(iOSのYourPluginClass: Plugin)を実装したり、RustベースのTauriコマンドからSwiftまたはKotlinコードを呼び出したりして、Tauriフロントエンドへ関数を直接公開できる
- 提供される公式プラグインはTauriのメジャーバージョンに追従する
- Autostart: システム起動時にアプリを自動実行
- Barcode Scanner: モバイルアプリでQRコード、EAN-13などのバーコードをスキャン
- Biometric: AndroidとiOSで生体認証プロンプトを表示
- Clipboard: システムクリップボードの読み書き
- Command Line Interface (CLI): コマンドラインインターフェースで引数を解析
- Deep Linking: TauriアプリケーションをURLの既定ハンドラーとして設定
- Dialog: ファイルの開く・保存、メッセージダイアログのためのネイティブシステムダイアログ
- File System: ファイルシステムへのアクセス
- Global Shortcut: グローバルショートカットの登録
- HTTP Client: Rustで書かれたHTTPクライアントへのアクセス
- Localhost: 本番アプリでlocalhostサーバーを利用
- Logging: 設定可能なロギング
- NFC: AndroidおよびiOSでNFCタグの読み書き
- Notifications: ユーザーへネイティブ通知を送信
- OS Information: OSに関する情報を読み取る
- Persisted Scope: ファイルシステムにランタイムのスコープ変更を保持
- Positioner: ウィンドウを一般的な位置へ移動
- Process: 現在のプロセスへのアクセス
- Shell: 既定のアプリケーションを使ったファイルやURLの管理、および子プロセス生成のためにシステムシェルへアクセス
- Single Instance: Tauriアプリの単一インスタンスのみが同時に実行されることを保証
- SQL:
sqlx経由でフロントエンドがSQLデータベースと通信できるインターフェースを提供するTauriプラグイン
- Store: 永続的なキー・バリューストレージ
- Stronghold: 暗号化された安全なデータベース
- System Tray
- Updater: Tauriアプリケーションのアプリ内アップデート
- Upload: HTTP経由でのファイルアップロード
- Websocket: JavaScriptからRustクライアントを使ってWebSocket接続を開く
- Window Customization
- Window State: ウィンドウのサイズと位置を保持
Allowlistの終焉、Allowlistよ永遠なれ
allowlistはもはや存在しない。このシステムの限界にすぐ到達してしまったため
- Tauriのコア機能専用に作られていたが、TauriのすべてのAPIを扱っていたわけではなかった
- 新しいシステムはTauriのすべてのコアAPI表面を扱うだけでなく、アプリおよびプラグイン開発者が統一された方法で独自のアクセス制御とスコープ設定を実装できるよう支援する
permissions - "Tauriコマンドに対するオン・オフトグル"、scopes - "Tauriコマンドに対するパラメータ検証"、capabilities - "WindowsとWebViewに権限とスコープを関連付ける" を使い、柔軟でありながら使いやすいアクセス制御システムを構築
- 名前付きの権限またはスコープファイルを作成し、ほかの名前付き権限やスコープと再利用・組み合わせできる
- これにより、複数の単純または複雑な権限とスコープを含む、より細かく説明的なセットを構築できる
- この追加機能により、TauriコアはフロントエンドWebViewからのコマンド呼び出しメッセージがコマンド関数へ到達することを許可すべきかどうかを理解できるようになった
プロセス間通信(IPC)の書き直し
- IPCレイヤーを書き直し、長らく望まれていたRaw Payloadという機能をサポートし、内部的な動作方式も変更
- 従来はすべてのIPCペイロードがjsonとしてシリアライズ・デシリアライズされていたためオーバーヘッドが発生していた。これはフロントエンドとバックエンド間で数キロバイトを超えるデータが送られると顕著だった
- 新しいシステムはRaw Requestをサポート。生のバイト列を直接使うか、独自の(デ)シリアライズ処理(例: bson、protobuf、avroなど)を使うことで、バックエンドからフロントエンドへ、またはその逆への大量データ転送を高速化する
配布ガイド
- Tauri 2.0では、モバイルエコシステムとコミュニティ貢献により、配布の多様性が大きく増した
- Apple Appstore、Google Play、Microsoft Store、CrabNebula Cloud、Flathub、Snapcraft、AURおよびその他の配布形式へデプロイする方法に関する公式ガイドが、配布ドキュメントに含まれている
4件のコメント
https://github.com/DioxusLabs/dioxus
Rustだけで開発するなら、こちらのほうが良さそうですね。今知りました。Tauriに集中しようと思っていましたが、Rustという1つの言語だけですべて開発できるとのことなので、こっちで~* IPCより速く、ネイティブに直接アクセスできるそうです。
Dioxus - Reactに影響を受けたRust向けUIライブラリ
以前私が一度投稿したときは0.3バージョンだったからか、やや難点があるというコメントがありました。
Dioxus 0.5: Rustで開発するWeb、デスクトップ、モバイルアプリ
今は0.5なので、変わっているかもしれませんね。
本当に驚くべきニュースです。Windows向けネイティブアプリ開発にも役立ちそうですし、モバイルでもとても便利に活用されそうです。
IPCの書き直しとは……。動画のような大きなデータを送るのに良さそうですね。