ようやく落ち着いたのは…
Expo - Web とモバイルの両方に対応
純粋な Web アプリを手軽に開発して、Capacitor など(Tauri も含む)でラップするという手軽さに惹かれていたものの、WebView が最新技術とはあまりにも違う挙動をするせいで、Android で動かすのに苦労してしまった。
Tauri はデスクトップに特化できるのが利点だ。しかし、せいぜい全プラットフォーム向けのラッパーにすぎない。Web 技術の制約を受けることになり、スマホでのドラッグジェスチャーには回避策が必要だし、オフラインストレージの容量などにも悩まされる。
ともあれ、後々デスクトップアプリが欲しくなったら、Expo の React Native プロジェクトを Electron でラップすることもできる。
LegendState
MobX(かつての私のお気に入り)よりも効率的でモダンだと謳われている。だが、このプロジェクトで使っている主な理由は、Supabase とのオフライン同期用のプラグインが組み込まれていることだ。いくつかバグや回避策は必要だが、今のところ快調に動いている。
Web では IndexedDB、モバイルでは SQLite を使えるので、各プラットフォームの良さを最大限に引き出したい私にはまさにうってつけだ。
Supabase
ひとえに Postgres が定番であり、Auth と Stripe 連携をすぐ使える形で提供してくれるからだ。Appwrite をセルフホストして RxDB と組み合わせることも試したが、奇妙な問題があり、しかもそれが Capacitor プロジェクト上だったので、今はひとまず脇に置いている。悪いアイデアではなかったけれど。ただ、次回は Appwrite を使う場合でも LegendState を使うつもりだ。RxDB はモバイルで SQLite を使うのが無料ではないからね。
Stripe
オンライン SaaS の唯一の解だ。しかも Supabase とのスターターテンプレートがあるので、その上に構築している。
最後に…
今こうして形になったことに感謝している。あとはこのスタックでアプリを作り、使いこなせるようになって、作りたかった他のアプリを全部作るだけだ。
楽勝だ。