RustでGUIいろいろメモ

何を使うか?

RustでGUIアプリを作るには何を使えばよいか? どうもまだ決め手が無い感じ。最近有力なのは Tauri。歴史あるGTKバインディングである gtk-rs。この2つがまだしも情報が多い。あとは iced、egui、Slint、conrod、Rust-Qt、…などいろいろあるけども情報が少ない。RustでWebアプリを作る手段としてはWebAssemblyがあり、こちらは情報が多い。

Tauri

  • 2024年現在では、いちばん情報が多く最有力候補か。
  • Web技術でデスクトップアプリを作れる。同様のコンセプトのElectronよりは軽くて速いらしい。
  • フロントエンド(GUI)をHTML+JavaScriptで作り、バックエンド(ロジック)をRustで作る。
  • 初回ビルドにかなり時間がかかり、クソデカい中間ファイルが吐かれる。
  • フロントエンドとバックエンドでメモリの共有が出来ず、おそらくソケット通信でデータのやりとりをしている。そのため画像データのような巨大なデータをやりとりするのは効率が悪い。
  • ぶっちゃけフロントエンドだけでかなりのことができてしまうので、Rustを使わずJavaScriptだけでもいいのではと思ってしまう。
  • VSCode拡張機能で Tauri VS Code Extension がある。
  • フロントエンドを Rust で書くこともできるらしい。( Leptos などのフレームワークが利用できる )
  • Electron代替として有望かもしれないけど、「RustでサクッとGUI」という目的からは外れる気がする。

gtk-rs

  • 歴史あるGTKツールキットをRustで使えるようにしたもの。
  • LinuxMac では簡単に導入できるようだが、Windowsでは導入がとても面倒。
  • WindowsのWSL上に導入することもできそうだが、そもそもWSLはGUIに対応させるのがとても面倒。
  • WindowsやWSLでの導入をがんばるくらいなら、仮想マシン上のLinuxに導入するほうが簡単そうだが、仮想マシン上で動くデスクトップアプリを作って意味があるかは?

WebAssembly