アプリを作り終えたら、あとはGoogle Playに出すだけ。
そう思っていた人は、私だけではないはずだ。
実際は違った。「完成」した瞬間から、まったく別の3日間が始まった。コードは1行も変えていないのに。
私は今、AIを使いながら、未経験からAndroidアプリを作っています。
作っているのは、スマホ依存を少しでも断ち切るためのアプリです。
普段はAIを使った制作代行をしています。
StepLockというアプリを、先日ようやく完成させた。「歩かないと、開けない」──100歩歩くごとに、YouTubeやInstagramを1分だけ使えるようにするAndroidアプリだ。開発の過程は5本のシリーズ記事に書いてきた。コードに初めて触れた日から、ロック機能がついにちゃんと動いた夜まで。
最終回に「完成した」と書いたとき、正直に言うと、すべてが終わったつもりでいた。
でも、そうではなかった。アプリを「作る」ことと、「世の中に出す」ことは、まるで別の仕事だったのだ。
第1章|「完成」の罠
アプリが動くようになったその週末、私はGoogle Play Console──Googleが開発者向けに用意した、アプリを登録・管理するための専用ページ──を初めて開いた。
手順は単純なはずだった。APKファイル(アプリの本体データを一つにまとめた、引越し荷物のようなもの)をPlay Consoleにアップロードするだけだ。ところが、ボタンを押した直後にエラーが返ってきた。
「有効なApp Bundleをアップロードしてください」
……何それ。
Claudeにそのままエラーメッセージをコピーして聞いてみた。するとClaudeは落ち着いた調子で教えてくれた。「Google Playは2021年以降、APKという形式を受け付けなくなっています。AAB(Android App Bundle)という新しい形式が必要です。」
聞いたことがない言葉だった。でも、Claudeの説明はちゃんと続いた。Android Studio(アプリを開発するためのソフト)のメニューから「Generate Signed Bundle / APK」を開いて、「Android App Bundle」を選んで書き出せばいい、と。要はファイルの形式を変えるだけのことだ。
やってみたら、今度は通った。「たった拡張子の違いだったのか」と思いかけたが、その作業で半日が消えていた。知らなかっただけで、知っている人には当たり前のことが、初めての人間には壁になる。開発とはそういうものなのかもしれない。
第2章|13項目の設定地獄
Play Consoleのダッシュボード(管理画面)には、リリースまでに完了しなければならない項目の一覧が表示される。それを見て、少し顔が青くなった。
項目数、13。
プライバシーポリシーのURL登録、コンテンツのレーティング審査(「このアプリは暴力的な内容を含みますか?」といった質問に答えると対象年齢が決まる)、データセーフティ(アプリがどんな情報を集めているかの申告)、広告の有無、行政機関が作ったアプリかどうか、金融機能があるかどうか──項目の名前だけ見ても、何を聞かれているのかわからないものが並んでいた。
その都度Claudeに聞いた。「プライバシーポリシーって何を書けばいい?」「データセーフティでStepLockは何を申告すべき?」と。Claudeはその度に、StepLockの機能と照らし合わせながら的確に答えてくれた。「このアプリはユーザーの情報を外部に送らないので、データ収集なしで申告できます」と言ってくれたとき、少し安心した。
プライバシーポリシーそのものも、Claudeと一緒に作った。NotionのページをPublic設定にして公開し、そのURLをPlay Consoleに登録する、という方法を教えてくれたのもClaudeだ。私はその指示通りに動けばよかった。
それでも、2日間かかった。
第3章|予想外の壁──「その動画、まだないですよね?」
13項目を全部終えて、ようやく終わりが見えてきた気がした。でも、Play Consoleはまだ別のエラーを表示していた。
「ユーザー補助サービスの権限に関する申告が完了していません」
StepLockには、AccessibilityServicesAPI──スマートフォンで今どのアプリが開かれているかを検知するためのAndroidの仕組み──が使われている。これがないとStepLockは成立しない。しかし、この仕組みを使うアプリにはGoogleから特別な義務が課されることを、私はこの瞬間まで知らなかった。
「アプリ内に、なぜこの機能を使うか・何の情報を取るか・どう扱うかを説明する画面を設けること。そしてその画面を映した動画のURLを提出すること」
……動画が、必要なのだった。
しかも問題は、その動画で映すべき「説明画面」が、StepLockの中にまだ存在しなかったことだ。出すための壁を越えようとしたら、また作る必要が生じた。
もう一度Claudeに頼った。「どんな画面を作ればいい?Googleが求める要件は?」と聞くと、Claudeはすぐに必要な要素をまとめてくれて、さらにそのままコードまで書いてくれた。私はそれをAndroid Studioに貼り付けて、動作を確認するだけでよかった。
新しいボタンをトップ画面に追加して、「アクセシビリティ機能について」という説明画面へ遷移する仕組みができた。コードを書いたのはClaudeで、私がやったのはそれを動かす判断と確認だ。それがこの開発の、ずっと変わらないスタイルだった。
第4章|エミュレーターという名の裏切り
説明画面ができたから、あとはその動画を撮るだけ──そう思ったら、またつまずいた。
Android Studioにはエミュレーターという機能がある。PC上に仮想のスマートフォンを起動して、実機がなくても動作確認できる仕組みだ。それを使って画面を録画しようとしたのだが、エミュレーターが立ち上がらなかった。
2回試みて、2回ともタイムアウトした。
「エミュレーターが起動しないんだけど、どうすれば?」とClaudeに聞いたら、環境によってはGPU仮想化の設定が原因でフリーズすることがある、と教えてくれた。そしてこう続けた。「実機がある場合は、ワイヤレスADBという方法で直接接続すると確実です。」
ワイヤレスADB。また聞いたことのない言葉だったが、手順はシンプルだった。スマートフォンの「開発者向けオプション」から「ワイヤレスデバッグ」を有効にして、QRコードをAndroid Studioでスキャンする。それだけで、手元のAQUOS(Androidスマートフォン)がPCと繋がった。
スマートフォンに直接アプリを入れて起動した。新しい説明画面が、ちゃんと本物の液晶に表示された。スマートフォンの画面録画機能で撮影して、3分以内に収まった。エミュレーターに2回裏切られた後、実機はあっさりと応えてくれた。
第5章|審査送信、完了
動画をYouTubeに「限定公開」でアップロードした。世の中に公開するためではなく、Googleに提出するためだけのURLが欲しいのだ。URLをコピーして、Play Consoleの申告画面に貼り付けた。
フォアグラウンドサービスの申告、健康アプリとしての申告、ACTIVITY_RECOGNITION権限の使用目的の説明文──これらもClaudeに下書きしてもらいながら、一つずつ潰していった。「これはどう答えるべき?」と聞けば、StepLockの仕様を踏まえた上で答えが返ってくる。私は判断して、ボタンを押すだけでいい。
「公開の概要」ページに移動すると、クイックチェックが自動で始まった。14分待つよう表示が出る。コーヒーでも飲みながら待った。
「変更内容を審査に送信できるようになりました」
青いボタンを押した。「13件の変更を審査に送信」。
画面の見出しが「審査中の変更」に切り替わった瞬間、静かに息を吐いた。
アプリが完成したのは、6月14日。審査を申請できたのは、6月17日。コードは1行も変えていない3日間が、こんなに長かった。
おわりに
「コードが動いた瞬間」が開発のクライマックスだと思っていた。でも実際は、その先にもう一幕あった。
知らない用語が出るたびにClaudeに聞き、コードを書いてもらい、壁を越えたと思ったらまた次の壁に当たる。その繰り返しだった。私一人だったら、どこかで諦めていたと思う。Claudeがいるから、続けられた。
「作った」と「出した」は、やっぱり別のことだ。
あなたはこんな経験、したことがあるだろうか。あるいは、いつかアプリを出してみたいと思っていただろうか。もしそうなら──Claudeがいれば、たぶん越えられる。
審査の結果は、まだ来ていない。