60日後に Google Play デベロッパーアカウントを閉鎖されたくない フロントエンドエンジニア
経緯
ある日、こんなのが届きました。
調べてみると、GooglePlayストアのポリシー的に休眠アカウントは勝手に消されてしまうそう。
これは 20人のテスターが必要になるポリシー改正に直前に作って、何も公開せずに塩漬けにしていたGooglePlayデベロッパーアカウント。このまま閉鎖されてしまうと、登録時に払った$15が丸々損になるだけでなく、今後また登録したとて、個人でアプリを公開するのが非常にめんどくさくなってしまう。(F-droidを使うなり、普通に野良アプリとして配布するのも手ではあるけど)
なのでアプリ作る
$15 払った元を取るため 60日でアプリ開発して公開します
もともとTWA(TrustedWebActivity)でアプリを公開するつもりだったのだけど、そのプロジェクトは頓挫しているので、完全に新しくなにかを作る。
どんなアプリを作成して公開するか
Androidアプリ開発経験は
- 古代のJavaで数取り器っぽいアプリ(習い事)
- 古代のKotlinで大学マップアプリ(授業課題)
- 古代のDart/Flutterでギフトコードの管理アプリ(頓挫)
ぐらい。
こんなかだと普段から使ってるTypeScriptにやや近いDart/Flutterが良さそうなのでFlutterを使う。
ただ、もちろん専門外であんまり複雑なことはできる気がしないので、それなりにシンプルそうなアプリを作る。
ぱっと思いついた案は、最近マイブームでよく使っている AUTOMATIC1111 Stable Diffusion WebUI (生成画像作成の総合環境)のAPIモードのスマホクライアント。
どうやら、このWebUIはGradioというライブラリベースでできており、ちょっと設定変えれば外部からのアクセスができる他、FastAPI製のREST APIエンドポイントも生えているらしい。
単純に指定されたエンドポイントにリクエストを送って、画像を生成するようなアプリだったら、まあまあ作れそうなのでやってみる。
注: 先駆者が既にいる
ざっと調べた感じ 下記の4つがあった。
Stable Diffusion AI (SDAI) / OSS
Stable Diffusion Sketch / OSS
SD-kiwi / 日本製クローズドソース?
Fluid Diffusion / クローズドソース?
この中だと、(今はGooglePlayの検閲で潰されてる?が) SD-kiwiの事例がだいぶ便利そうで自分もほしいので、これを参考に それっぽいものを作ってみることにする。
要件定義
参考資料を見て、Perplexityに色々やりたいことを投げ込んでできた アプリの仕様はこちら。
基本機能
-
- 画像生成
- プロンプトによる画像生成
- キーワード入力補完機能
- 生成タスクのキューイング
- 生成完了時の通知
-
- ギャラリー
- 日付別セクション表示
- グリッドレイアウト
- 画像詳細表示
- 他アプリへの共有機能
- 画像の削除機能
-
- 設定管理
- WebUI APIサーバーの設定
- 接続テスト機能
- 認証情報の管理
技術スタック
- 使用パッケージ
- provider (状態管理)
- flutter_keyboard_actions (キーワード補完)
- flutter_local_notifications (通知)
- shared_preferences (設定保存)
- http (API通信)
主要な実装ポイント
-
- キューイングシステム
-
sd-queue extensionとの連携- ライセンスが書いてなかったので自分でそれっぽい似たのを書く
- ポーリングによる進捗管理
- バックグラウンド処理
-
- データ永続化
- 生成画像の保存
- メタデータ管理
- 設定情報の保存
-
- UI/UX
- Material Design 3準拠
- レスポンシブ対応
-直感的な操作性
ついでで、Flutterでは Feature-Firstアーキテクチャというのがベストプラクティスらしいので、それも採用して作る。
だいたいやりたいことはまとまったので、一旦寝てまたそのうち とりあえずざっくりとPerplexityが書いてくれたコードをためしてみる。
ちなみに開発環境は Windows10で VSCodeを使う。
この場合の開発環境導入は Flutter SDKをダウンロード、展開してどっかにおいてPATHを通し、VSCodeのFlutter拡張機能を入れると大体完了となるらしい (とても手軽だ...
これはライセンスがApacheなので、これに依存すると良さそう