Rustのエコシステムの拡がりを感じるデスクトップアプリのためのツールキットTauriを紹介
メモリーセーフなシステムプログラミング言語であるRustの利用が拡大している。Microsoftは2019年に、これまで開発してきたソフトウェアに関する脆弱性の70%はメモリー関連のバグが原因だったと開示した。そしてメモリーセーフなソフトウェアの重要性を強調し、それ以降、Rustに対する投資を増大させている。そんな状況を背景にRustのエコシステムが拡大、ミドルウェアやシステムに近い部分のソフトウェア以外にもデスクトップアプリケーションを開発するためのツールキットやゲームを開発するためのエンジンが登場している。これまではバックエンドのシステム関連ソフトウェアだけが対象と思われてきたRustだが、デスクトップアプリケーションやモバイルアプリケーションもメモリーセーフなシステムの対象になってきたことがわかる。今回はデスクトップアプリケーション開発のためのツールキットTauriを紹介する。Tauriはオープンソースソフトウェアとして公開されている。
参考:Tauri
Tauriはデスクトップアプリケーションを開発する場合にバックエンドの部分、主にアプリケーションのロジックの部分をRustで作ることができるというツールキットだ。フロントエンドの作成にはJavaScriptもしくはTypeScriptが想定されているが、ReactやSvelteなども選択可能だ。レンダリングにはWindowsの場合はWebView2、macOSの場合はWebKitを使用する。独自のレンダリングエンジンを内包しないことで、バイナリーサイズを縮小できる。またレンダリングエンジンに脆弱性が発見された場合も、OS側に任せることで個別のアップデートを行わなくても済むという利点がある。
これはElectronに対して最大の違いと言えるだろう。GitHubが開発したElectronはWebのテクノロジーを使ってWindowsやmacOS等に対応したアプリケーションを作るためのフレームワークだ。ElectronはChromiumをレンダリングエンジンとして内包することで、OSに頼らずにレンダリングができるという利点があったが、すでにWebView2やWebKitがOS標準になっていることを考えると、アプリケーションを肥大化させる欠点がある。加えてレンダリングエンジンにセキュリティ周りの更新が発生した場合に、OSとは別に更新を実施する必要があるという問題点を抱えている。
今回紹介するのは、2022年6月に公開されたQuick Intro - Tauri Desktop Appという動画で、この中ではツールのセットアップ、Visual Studio Codeを使ってRustとJavaScriptのコードを書く、実行形式をビルドする、Windowの作成と属性を変更するなどの操作を見せながら解説している。Node.jsのモジュールであるServorを使ってローカルホストに疑似的なWebサーバーを作ってTypeScriptのコードが変更されるたびにリロードされるように設定される様が解説されている。アプリケーションをとしてはボタンをクリックするとカウンターの数値が加算されるというシンプルなデスクトップアプリケーションを開発している。
参考:Rust Tauri 1.0 - Quick Intro - Rust Desktop App
Tauri自体の特徴は公式GitHubページに書かれている説明文から引用する。
公式GitHub:https://github.com/tauri-apps/tauri
ここでTAOとWRY(それぞれタオとライと発音)という外部のモジュールが紹介されている。TAOはWindowを操作するためのライブラリー、WRYはWebViewを使うためのライブラリーである。
すでにTauri自体は1.1というバージョンがリリースされており、順調に開発が進んでいることが見てとれる。
フロントエンドはJavaScriptやTypeScript、CSSで行えるためデザインの部分とアプリケーションロジックを切り離して開発することも可能、そしてできあがったバイナリーも確実にElectronよりも小さくなる。動画ではTypeScriptとCSSで外見を作成、ロジックはRustで記述という仕組みについてコードを追加しながら実際に行っている。以下の表ではバイナリーのサイズが小さいことを比較しているが、Electronの52MBに対してTauriは3MBという小ささだ。
デモではなくTauri自体の特徴の解説は以下の動画を参照して欲しい。これはRust Linz 2022という2022年2月に行われたバーチャルカンファレンスで公開されたセッションで、プレゼンテーションを行っているのはDaniel Thompson-Yvetot氏だ。
参考:@href>{https://www.youtube.com/watch?v=u4OsO6dow0c,Tauri Foundations by Daniel Thompson-Yvetot - Rust Linz\, February 2022}
この動画ではTauriがトレンドとして上昇していること、Electronとの比較で評価されていること、何よりもセキュリティを宣伝文句ではなく実際に実装していること、Tauriのコミュニティ、ガバナンスなど包括的に解説を行っている。40分という長い動画だが、約30分辺りからTauriそのものの解説が始まっている。
いわゆるデスクトップアプリケーション開発に必要なことは含まれており、GitHub Actionですべての対応プラットフォームのビルドができることなども解説されている。
セキュリティについては、オランダの調査会社であるRadically Open Securityと言う外部団体が監査したレポートを紹介。ここでもコミュニティだけではなく外部のサービスを使ってセキュアなソフトウェアであることを検証している。
セキュリティに関するレポート(PDF):https://github.com/tauri-apps/tauri/blob/dev/audits/Radically_Open_Security-v1-report.pdf
またオープンソースプロジェクトとしての成り立ちについてはCommons Conservancyによって監査が行われている。
現状ではすべてがボランティアとして行われており、寄付金によって運営が行われている。寄付や財政に関しては以下のサイトで確認できる。Thompson-Yvetot氏自身も寄付を行って運営しており、今後は企業からの大規模な財政的支援が必要になってくることは想定できるだろう。Rustを強力に推進しているMicrosoftからの支援は必要かもしれない。
参考:寄付の状況:https://opencollective.com/tauri
最後に日本語による解説動画を紹介。約10分という時間で概要を解説しており、日本語を母語としているのであれば何よりも最初にこの動画を見るべきだろう。タイトルは「【ゆっくり解説】Rust でアプリ開発!Tauri 1.0 リリース!」となっている。
参考:Tauriをゆっくり解説
システム関連のソフトウェアにおけるRustの状況については、Linuxカーネルがバージョン6.1でRustを標準として採用することが明らかにされた。今後はRustをデスクトップアプリやゲームの開発のために使うことが進んでいくだろう。ビジネスの世界でもCやJavaからRustに乗り換える準備が必要となる時期は近いかもしれない。
連載バックナンバー
Think ITメルマガ会員登録受付中
全文検索エンジンによるおすすめ記事
- 「TAURI」をはじめる前に -「Rust」の基礎と開発環境の構築
- RustNLからマルチプラットフォームのアプリ開発のためのツールRobiusのセッションを紹介
- RustNL 2024から2次元のGUIを実装するXilemを解説するセッションを紹介
- 「TAURI」の基礎知識を押さえ、簡単なTAURIアプリ開発を体験してみよう
- Rustでコードを書くゲームエンジンのBevyを使ってインベーダーゲームを作る動画を紹介
- Kubernetesを操作するターミナル用ツール、K9sとKDashを紹介
- デスクトップアプリ作成フレームワーク「Tauri 2.0」リリース
- 「TAURI」で「画像ビューア」のサンプルアプリを作ろう
- 「TAURI」と「Rust」の「Option型」と「Result型」を使いこなそう
- 「TAURI」で「ピアノ音楽」アプリを作ろう