「AIを使えばアプリが作れる」── それは本当だった。シリーズ5本にわたって書いてきたように、私でも動くアプリができた。でも「動く」と「使える」のあいだには、もう一段の壁があった。AIはそれを、教えてくれなかった。
私は今、AIを使いながら、Androidアプリを作っています。
作っているのは、スマホ依存を少しでも断ち切るためのアプリです。
普段はAIを使った制作代行をしています。
エミュレーターでは、完璧に動いていた。
StepLockが「動いた」まではシリーズに書いた。エミュレーター(パソコン上で動かす仮想スマホ)では完璧に動いていたので、次はクローズドテストだ。Google Playで一般公開するには審査の前に、限られた方(テスター)だけにアプリを配布して動作確認してもらうフェーズがある。
早速、クローズドテストに着工し、声をかけて集まってくれた12名のテスターさんに転送。
すると、すぐに報告が届いた。
「うちの端末では動きません」
エミュレーターでは何十回とテストした。なのに、なぜ。Claudeに状況を伝えると「端末のメーカーとAndroidのバージョンを教えてください」と返ってきた。その瞬間、知らなかった壁の存在に気づいた。
壁その1:ColorOSは、鍵をかけていた。
テスターさんが使っていたのはOPPOの端末だった。OPPOは中国の大手スマートフォンメーカーで、ColorOSという中国製の独自OSを搭載している。このOSはAccessibilityService(アプリの起動を監視するAndroid独自の仕組み)を「電池の無駄遣い」と判断して、バックグラウンドで静かに止めてしまうことがある。
「コードでの対処には限界があります。ユーザーにバッテリー最適化の除外設定をしてもらう必要があります」── Claudeの返答だった。コードではなく、案内文をアプリ内に入れる方針に切り替え、Claudeが実装し、いったんの解決、ということにした。
壁その2:AndroidのバージョンはOSではなく、方言だった。
別のテスターさんからも動けない報告。
端末のAndroidバージョンを確認してもらうと、私のテストしたバージョン違いであることが判明した。
13と14で動き方が違うようだ。
Claudeは「日本語と関西弁くらいの差です。同じ意味のことを言っているのに、表現が違う」と説明した。
バージョンで書き方を分岐させたコードをClaudeが書き、テスターさんに再度試してもらった。「動きました」── その報告が届いたとき、心からホッとした。
壁その3:Xiaomiで、電池が燃えた。
「電池の減りがおかしい」とXiaomiの機種を使っているテスターさんから報告が届いた。
XiaomiはMIUI(ミュイ)という独自OSで、バックグラウンドのアプリを積極的に止める。常に動き続けなければならないStepLockと衝突して、互いに引っ張り合い電池を食い潰していたのだ。
Claudeに相談したところ、コードの書き加えで対処が図れる、ということだった。
早速書き加え、改善された報告をテスターさんにいただいた。
壁その4:iPhoneアプリ
3つの壁を越えながら審査を待つ日々の中で、あるnoteを読んだ。「iPhoneアプリなら2日でリリースできた」という体験談だった。これだけ実機で苦労したなら、いっそiOS版も作れないかとChatGPTに聞いてみた。
「iOSの2日公開は、OSの深い権限に踏み込まない単純なアプリの話です。StepLockのように他アプリを監視・制限する機能は、iOSではScreen Time API(スクリーンタイムAPI:アプリの使用時間を管理するApple公式の仕組み)を使った別設計が必要になります。移植ではなく、ほぼ別のアプリです」。
そして最後にこう言った。「AndroidでStepLockを最初に作ったのは、実はかなり合理的な選択でした。この種のアプリはAndroidの方が自由度が高い」。
iOSでのアプリ作成もまた、ぼんやりAIを使っているだけでは気づくことのできない問題だった。
AIで何でもできる、の裏側。
「AIを使えば何でもできる」「アプリだってすぐに作れる」── そういう言葉をよく見かける。嘘ではない。でも、その言葉はそこにそびえ立っている壁を見えなくする。
ColorOSの制限、Androidのバージョン差、Xiaomiの電池問題、iOSという別の設計── どれもAIが自動では教えてくれなかった。直面するまで、存在すら知らなかった壁だった。
心地よい言葉ほど、見えていないものがある。「簡単にできる」を聞いたとき、「どこで詰まるか」を同時に知ろうとしてほしい。このシリーズを書いているのはそのためだ。