Open8

60日後に Google Play デベロッパーアカウントを閉鎖されたくない フロントエンドエンジニア

お窓お窓

経緯

ある日、こんなのが届きました。

調べてみると、GooglePlayストアのポリシー的に休眠アカウントは勝手に消されてしまうそう。

https://zenn.dev/tfandkusu/scraps/f35ce2c9e67e62

これは 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
https://play.google.com/store/apps/details?id=com.shifthackz.aisdv1.app
https://github.com/ShiftHackZ/Stable-Diffusion-Android

Stable Diffusion Sketch / OSS
https://github.com/jordenyt/stable_diffusion_sketch

SD-kiwi / 日本製クローズドソース?
https://note.com/diff_momot/n/nca002afc4a3d

Fluid Diffusion / クローズドソース?
https://play.google.com/store/apps/details?id=com.vrstormlab.fluiddiffusion

この中だと、(今はGooglePlayの検閲で潰されてる?が) SD-kiwiの事例がだいぶ便利そうで自分もほしいので、これを参考に それっぽいものを作ってみることにする。

お窓お窓

要件定義

参考資料を見て、Perplexityに色々やりたいことを投げ込んでできた アプリの仕様はこちら。

基本機能

    1. 画像生成
    • プロンプトによる画像生成
    • キーワード入力補完機能
    • 生成タスクのキューイング
    • 生成完了時の通知
    1. ギャラリー
    • 日付別セクション表示
    • グリッドレイアウト
    • 画像詳細表示
    • 他アプリへの共有機能
    • 画像の削除機能
    1. 設定管理
    • WebUI APIサーバーの設定
    • 接続テスト機能
    • 認証情報の管理

技術スタック

  • 使用パッケージ
    • provider (状態管理)
    • flutter_keyboard_actions (キーワード補完)
    • flutter_local_notifications (通知)
    • shared_preferences (設定保存)
    • http (API通信)

主要な実装ポイント

    1. キューイングシステム
    • sd-queue extensionとの連携
      • ライセンスが書いてなかったので自分でそれっぽい似たのを書く
    • ポーリングによる進捗管理
    • バックグラウンド処理
    1. データ永続化
    • 生成画像の保存
    • メタデータ管理
    • 設定情報の保存
    1. UI/UX
    • Material Design 3準拠
    • レスポンシブ対応
      -直感的な操作性
お窓お窓

だいたいやりたいことはまとまったので、一旦寝てまたそのうち とりあえずざっくりとPerplexityが書いてくれたコードをためしてみる。

ちなみに開発環境は Windows10で VSCodeを使う。

この場合の開発環境導入は Flutter SDKをダウンロード、展開してどっかにおいてPATHを通し、VSCodeのFlutter拡張機能を入れると大体完了となるらしい (とても手軽だ...