[misc] TauriはLinux向けではメリットが損なわれる話

作成:2024年12月9日  最終更新:2024年12月9日

この記事は2つのAdvent Calendar向けのものです。

https://qiita.com/advent-calendar/2024/webview_native_app_frameworks
https://qiita.com/advent-calendar/2024/linux

異なるOSでも動作するGUIアプリケーションを作れるライブラリ/プラットフォームは以前からいくつもありました(wxWidetsやQt、一時期はJava AWT/Swing/Javafxなど)。近年だとElectronがWeb技術でほぼ書けてしまう上に見た目の制御も柔軟なためよく使われます。ただ、ElectronはChromiumとNode.jsを丸ごと含むため配布サイズが大きくなりがちだし、それぞれのアップデートが最終バイナリに影響するので頻繁な更新が求められがちです。

最近ではWebView2(Chromium)がWindows標準搭載になってきたこともあり、OS標準のブラウザコンポーネントを使うことで配布サイズを下げるアプローチも出ています(Tauri、Wailsなど)。これにより、アプリケーション本体が小さければ数MiBの配布サイズで済むようになりました。ブラウザ側が統一ではない(WindowsのみChromium、LinuxやmacOSはWebKit)ので少なくともLinux/macOSでの動作確認は必須ですが、ずいぶんと書きやすくなった……はずでした。

しかし、Linuxに配布しようとすると別の壁にぶち当たることになります。

(注)macOSは年間$99支払わないとアプリケーションが事実上配布できなくなっているので、当方ではmacOSについては考慮しません。

macOS 15 Sequoiaではランタイム保護のアップデートにより、署名/公証されていないアプリを開く際にコンテキストメニューからGatekeeperをオーバーライドすることが不可能に。
https://applech2.com/archives/20240807-apple-gatekeeper-update-in-macos-15-sequoia.html

■webkit2gtkバージョン問題

Tauri公式リポジトリのIssueにある下記のコメントが最も分かりやすいと思います。
https://github.com/tauri-apps/tauri/issues/9039#issuecomment-1973353831

Tauriwebkit2gtkUbuntu系RHEL系
v1webkit2gtk-4.015.04~23.10Cent7~9, RHEL8~9
v2webkit2gtk-4.122.04~なし(Fedora 37以降はOK)

これにTauriの配布設定を組み合わせると、次のようになります。

  • Tauri v1はUbuntuだと23.10までしか使えない(最新LTSは24.04)。CentOS/RHELは最新版9で動くが、rpmパッケージ作成はTauri v1の設定にはない。
  • Tauri v2はUbuntuだと22.04以降で動く。CentOS/RHELは最新版9でも動作しない(rpmパッケージ作成がついたのでFedora37以降なら動く)。

UbuntuとRHELの最新版で使えるアプリケーションを作れないのは、なかなかに残念です。

なお webkit2gtk のバージョン違いは libsoup のバージョンとも関連しているため、簡単には解決しづらいところです。少なくともエンドユーザになんとかしてもらうのは難しいでしょう。

解決法は、現時点では AppImage の作成ということになると思います。実際、これで Tauri v1で作ったものをUbuntu 24.04で動かせています。ただし、AppImageは関連ライブラリのバイナリを全て含むため、WebKitなどを全部含めることになり、配布サイズは100MiBを優に越えます。「Electronと違って配布サイズが小さい」というメリットは、Linuxでは事実上享受不可能ということになりそうです。

なお、Tauri v1とv2では権限設定が全然違うほか、微妙にcore層の違いがあるようで、Tauri v1からv2へのマイグレーションではrustコードを少しいじる必要がありましたし、プラグインも違いがあります。v1とv2両方のコードを維持するのは、決して不可能ではないと思いますが、あまりおすすめはできません。

■インライン入力問題

ここまでを見ると、結論としては「最新のTauri v2で作ってLinux向けはAppImage配布」ということになりそうですが、見逃せない問題があります。

Tauri v2だと、テキスト入力欄でインライン入力ができません。
create-tauri-appで作った初期状態で再現します。
https://github.com/tauri-apps/tauri/issues/11412

ちなみに Tauri v1 ではこの問題はありません(中国語IMEだと一時期インライン入力できず、修正された模様)。

このため、日本語入力が必要なアプリケーションをTauriで作る場合は「あえてTauri v1で作ってLinux向けはAppImage配布」という選択肢を考える必要があります。

■おまけ : Wailsについて

個人的にはWailsは使っていないのですが、WailsのLinux開発ページビルドのページの注記を見る限りだと標準状態では "libwebkit2gtk-4.0" を使いつつ4.1対応も考慮という感じですね。4.0と4.1両方の配布ファイルを作れるのかは分かりません。

なお次期バージョン(Wails 3.x)では少し変化があるようです。

  • ChangeLogの「v3.0.0-alpha.5」では「Update linux webkit dependency to webkit2gtk-4.1 over webkitgtk2-4.0 to support Ubuntu 24.04 LTS」とあるのでwails3.0では4.1がデフォルトになるようです
  • 同じChangeLogの「v3.0.0-alpha.8」では「Support of linux packaging of deb,rpm, and arch linux packager builds」とあります。逆にいうと現状ではdebやrpmは作れないようですね。

一方、インライン入力がどうなるのかは試していないので不明です。


■まとめ

WindowsとLinuxの両方に、それなりの見た目のGUIアプリケーションを共通コードからリリースする場合、Web技術を使おうとしてTauriを使うと、webkit2gtkバージョン問題とインライン入力問題への対応を考慮する必要があります。

TauriやWailsは、Windows向けだと、配布サイズが巨大じゃないGUIアプリケーションを作れて非常に有用です(webviewのアップデートもWindowsがやってくれるのでアプリケーション自身の都合以外で更新する必要がほぼないのも魅力的です)。

しかし、Linux向けでは(社内のみ利用とかのケースを除いて)実質上配布サイズのメリットは享受できないと考えた方がいいだろうと思います。

それならElectronの方が開発しやすいかも……という気がしなくもありません(ちなみに4年前に作ったElectronアプリケーションのdebファイルはUbuntu 24.04でも使えました)。


◀(前記事)[mail] さくらインターネットのメーリングリスト(fml)からGmailに配信するには
▶(次記事)[misc] Windows11で「代替の構成」を設定するには

(一覧)[2.技術情報 (tech)]