最近、ポストペット風のアプリを開発しています。
|
| カワイイネ! |
もともとElectronを使って開発していたのですが、Tauriというフレームワークの存在を知り、使ってみることに。
ElectronとTauriについて
Electronは、Chromium(ブラウザ)+
Node.jsを丸ごと同梱してデスクトップアプリを作るフレームワークです。HTML/CSS/JSでデスクトップアプリが作れるもので、VSCodeやSlackなどもこれで動いてます。過去Steamで公開したペパちゃんもこれで動いてます。
一方Tauriは、OSのWebView(標準ブラウザエンジン)を使い、バックエンドをRustで書く、かなり新しいフレームワークです。フロント部分は、基本的にHTML/CSS/JSで書けるのですが、Rustをちょっと頑張らなくてはなりません(※AIががんばってくれました)。
フォロワーさんが紹介していたこちらの記事を読み、とにかくアプリが軽くなることと、メモリの使用量がすごく小さくなる、ということに惹かれて、Tauriへの移行をしてみることにしたのです。
移行してみた結果
Electron
アプリ容量
608MB
メモリ使用量
約197 MB(本体 71.4 MB + Renderer 75.8 MB + Helper × 3 (6.8 + 35.4 + 7.3
MB))
Tauri
アプリ容量
168MB
メモリ使用量
約113 MB(本体 28.3 MB + Networking 7.3 MB + Graphics 17.0 MB + localhost
60.1 MB)
め、めちゃくちゃ軽くなっとる!!!!
アプリ自体のサイズは3割を切り、メモリ使用量も6割くらいになりました。
しかし、致命的な問題が。
問題1: 通知がおかしい
Tauriに載せ替えた結果、通知がちゃんとこなくなったのです。
Tauriだと、アプリがトレイに格納された状態でない限り、通知をひっそりと通知センターにしまい込むようになっていたのです。
Electronは、アプリにフォーカスが当たっているどうかで判断して通知を送ってくれていたので、たとえば別ウィンドウで作業していても、通知を出してくれていたのですが、それができなくなっていました。
どうやらTauriは、macOSの「アクティブなアプリの通知はバナーを出さない」というデフォルトの余計な親切設計に準拠して動いているようでした。
問題2: タイマーがおかしい
帰宅時・起床する時、こちらでアプリをチェックしない限り、予定時刻を過ぎても勝手に帰ってきたり起きてる状態にならなくなっていたのです(アプリチェックした瞬間にドアが開いたり、おはようメッセが出る)。
WKWebViewは、ウィンドウが隠れている時に、余計なお世話で省エネして、setTimeout/setIntervalを動かさなくなってしまうのです。
そのため、ウィンドウが隠れている間は動かず、開いた瞬間に溜まった分が一気に実行される動作になっていたのですね。
一方Electronは、Chromiumを内包しているので、私が見ていなくても、忠実にタイマーを更新し続けていてくれたので、この問題が起きていなかったのです。
結論
Electronに戻しました。
タイマーの問題は、JSでなくRustのtokioというタイマー機能を使うことで解決はできたのですが、通知問題がどうしてもダメだったからです。
...いや、正確には、objcクレートと呼ばれる、RustからmacOSのネイティブAPIを呼び出すためのライブラリを使って、アプリが前面にいるときでも通知バナーを表示するよう実装することもできたのですが、だいぶハードルが高そうで諦めました。
もちろんAIに頼めば一瞬で書けるとは思うのですが、Rustの知識0なので、うまくいかなくなった時に沼ると思い、やめることに。このためだけにわざわざ勉強するモチベが上がらなかったのだ...
メリットとして、アプリサイズとメモリ使用量の低下は大きかったのですが、通知、つまりキャラが私に話しかけてくれるという部分の体験が致命的に壊れるのは耐え難かったので、Electronの安定性に頼ることにしました。
バイブコーディングを使ってこのあたりを試していたので、1日でパッとTauriにして、パッとElectronに戻す、という早業が実現できたのが良かったな、と思います。
自力だけでやっていたら、そもそもほぼ安定稼働しているアプリをわざわざ崩してTauriにしようとも思えず、新しい技術を試すこともできなかったでしょうし、そこからまた元に戻すのも辛すぎて、不具合を抱えたままTauriの沼で粘り続けてしんどくなっていたかもしれません。
これはAIあってこそ、選択の自由度が上がったことだなぁ、と感じたのでした。
まとめ
ちょっと最近バイブコーディングに頼りすぎて、ばかになってるかもしれない。笑
けれども、バイブコーディングのおかげで、自分のやりたいことを自由に実現できる道の選択肢が広がっているようにも感じます。
今後も上手に使っていきたいですね。


コメントを投稿
別ページに移動します