この記事はClaude (Opus 5) と一緒に執筆しました。
言いたいこと
Androidのホームアプリ(ランチャー)を、Claude Opusに手伝ってもらって自作しました。
長らくNova Launcher派だったのですが、自分専用のランチャーなら、もう作ってしまったほうが早いです。
Opus 5でなくてもできたと思いますが、細かく指示していないところまで意図を汲んでくれました。
そう感じた理由は3つあります。
- 普段どう使っているかを伝えるだけで、そのとおりのものが出てくる
- 自分専用なら、必要な機能だけ作ればいい(=作らない判断が自由にできる)
- アプリのグルーピングや初期配置まで任せられる
3つ目が個人的には一番の収穫でした。順に書いていきます。
既製のランチャーは「他人の平均」に合わせてある
高機能なランチャーはたくさんありますが、どれも不特定多数向けです。だから
設定項目が膨大になり、自分が絶対に使わない機能のための項目を延々とスクロールして、
使いたい設定を探すことになります。
自分専用なら、そこが全部いりません。作らないと決めた機能は、設定項目もUIもテストも発生しません。 汎用ランチャーが抱えている複雑さの大半は「誰かは使うかもしれない」から来ているので、その部分を切ってしまえば個人でも作れる規模に収まります。
「普段どう使っているか」を話すと仕様になる
Androidアプリを作った経験はありませんが、Android Studioのインストールから始めて、まず基本的なランチャーを作ってもらい、あとは「こうしてほしい」「普段はこう使っている」と繰り返し会話するだけで完成します。
ポケットの中で誤操作してアイコンを消してしまうのを防ぐ、といった自分だけが困っている要望も思いのままです。
ポイント: アプリのグルーピングと初期配置を任せる
ここが一番「やってよかった」ところです。デバッグのために実機の画面も見てくれていたので、それなら配置まで任せられるのでは、と思いつきました。
アプリはできたものの、端末には200近いアプリが入っています。これをカテゴリごとのフォルダにまとめてドックとドロワーに並べるとなると、手作業では1つずつ長押しして、フォルダを作って、名前を付けて……を延々と繰り返すことになります。それも任せてしまえばいい、というわけです。
買い物、ゲーム、設定といった大まかな項目名を伝えるだけで、それなりに分類して配置して
くれました。パッケージ名から中身を言い当てるのは、人間にはつらくLLMには得意な作業です。
詰まったところ
こちらが問題に気付く間もなく解決してくれていたので、あとから聞いた話です。
時間を食ったのは機能の実装ではなく、次の2つでした。
-
ジェスチャーの競合。ドロワーの「下スワイプで閉じる」が長らく無反応でしたが、
原因は子のLazyVerticalGridが親より先にドラッグを消費していたことでした
(nestedScrollのonPostScrollで余剰分を拾って解決)。ドラッグ中のアイコンが
ドックの裏に潜り込む問題も、zIndexが同じ親の中でしか効かないためで、
ルート直下のオーバーレイに描き直す必要がありました。 -
実機での検証。
input swipe一発ではドラッグを再現できません(等速で動くので
長押し判定の前にキャンセルされる)。input motioneventの DOWN → MOVE 複数回 → UP を
個別に送ります。
こういう「一度踏んだ罠」は、会話の中で共有してもセッションが終われば消えます。
AGENTS.md に書いておくと、次のセッションでは何も言わなくても守られます。仕様は
SPEC.md、罠と設計判断は AGENTS.md、と分けて置いています。更新される理由が違うからです。
まとめ
-
自分専用のランチャーは、既製品の設定を詰めるより作るほうが早い。
汎用ランチャーの複雑さの大半は「誰かは使うかもしれない機能」から来ているので、
そこを切れば個人でも作れる規模になる - 普段どう使っているかを話すだけで仕様になる。 Androidアプリの開発経験は要らなかった
-
アプリのグルーピングと初期配置まで任せられる。 200件近い分類は、手でやる気には
ならないが頼めば数分で終わる - 自分で作れば広告も無く、身に覚えのない情報収集も無い