クロスプラットフォームでGUI:Tauriを試してみる(1)

f:id:ironoir:20210214165648p:plain

tauri.studio

少し前にどこかで見て、気になっていました。最近はデスクトップアプリケーションでGUIをどうやって作成するのかということにかなり興味があって、ここでは(まだ)取り上げてはないんですけど、いくつかのフレームワークを色々と見回っていて、今回もその一環なわけです。

まず、最近だと、ほとんどの場合は「クロスプラットフォームGUIを作るときは、Webブラウザの描画に頼る」というのが主流になっているように見えます。そもそもクロスプラットフォームで(だいたい)同じ画面を描画できる手段が存在するだけで、現代は幸運じゃのう、と思わないといけないというか、半ば諦めざるをえないわけです、他の手段を使うというのは。他の信頼できる手段といっても、選択肢はあまり多くないですけど。Qt?Tcl/Tk?最近触れてないので全然わかりませんが、.NET界隈だともうちょっとがんばってるんだっけ?Blazorとか?(ぜんぜんわかってません)

さて、Webブラウザの描画に頼る、という意味では、Electronが最も有名じゃないでしょうか。というかほぼ唯一勝利したプラットフォームでは?もはやそもそもChromiumやん、というツッコミもなんのその、わたしもたくさんのElectron製アプリケーションを使いまくっています。そして一通り勉強して簡単なアプリケーションを作ってみたこともありました。でもなんだか、「重厚」なんですよね。やっぱりバックエンドとフロントエンドのやりとりはIPCになるわけですし、気軽に手を出せるわけでもない。「なんか思ってたんとちゃう…」となりました。その上、「セキュリティには気をつけてください」と書籍にも書いてある。あ、こっちが気を付ける感じですか…そうなると個人で気軽にアプリケーションを作って公開する、みたいなのは難しいんちゃうかな、と思ってしまったんですよね。

前置きが長くなりましたが、TauriはElectronの短所を克服しようとしているしくみです。紹介の中でもはっきりそう言っています。なお、克服しようとしているのは

  • バイナリサイズ
  • セキュリティ

だそうで、上記、まさに、わたしが挙げた弱点です。

基本的な説明から始めると、Tauriの基本構造は「Web描画エンジン+ローカルリソース使用API」です。Web描画エンジンはnodeのライブラリ、そしてローカルへのアクセス用ライブラリはRustでできています。したがって、動作には上記のプログラミング環境は必須です。

そしていわゆる「Webバックエンド」は出てきません。併用できますが、オプションです。使いたい場合は、普通にWebサーバを別途起動してもらいますが、Tauriはnode側、Rust側とそれぞれやりとりするためのAPIを提供している、といった形で連携をサポートしています。

これは便利だなと思ったのは、ユースケースに応じて、アーキテクチャを使い分けられること。また、パターン集についても公式ドキュメントで図解されています。

tauri.studio

上記はその一つ、もっともSPAに近い形ですね。ただし、Tauriに期待するのは、やはりWebバックエンドなしで動作可能なこと。それはバイナリサイズを小さくすることにも一役買っているわけです。また、Rustとのやりとりを行うAPIは、細かく権限が分かれていて、アプリケーション全体で可能な操作を設定ファイルで制限することができます。これによってセキュリティを高めようという狙いのようです。

全然書ききれない。続きは次回。