AIアプリ開発について雑記
Codex、Claudeを用いたアプリ開発を日々行っています。
現在、リリース済みのアプリは3件あり、それらを改善しながら、並行して新たに2件を制作しています。
実際にAIを使ったアプリ開発に取り組んでみて、いくつかわかってきたことがあるので、今回はそれについて書いていきたいと思います。
まず、アプリの根幹となる機能部分についてですが、技術的に実現可能なものであれば、ほとんどすべて実装できるということがわかりました。
つまり、ロジック部分については、ほとんどAIに任せることができます。
「こういうデータを集めてDBを作る」「こういう条件で検索する」「このボタンを押したときにこの処理をする」「排他制御を入れる」といった内容についても、要件を伝えればAIが実装してくれます。
そのため、自分が欲しい機能を持ったアプリについては、ほぼ作れるようになったと言っても過言ではありません。
ただし、実際にユーザーに使い続けてもらえるアプリを作ることは、まったく別の問題です。
特に重要だと感じているのが、以下の3つです。
① データの質
例えば、天気や波のデータなどがわかりやすい例です。
無料で取得できるデータには限りがありますし、実際の現地の天気や波の状況と異なることもあります。
どれだけアプリ自体が使いやすくても、表示されているデータの精度が低ければ、ユーザーから信用されなくなります。
そのため、データの質が悪いことは、アプリの利用頻度の低下に直結すると感じています。
② UIの便利さ
ユーザーが「これをやりたい」と思ったときに、スムーズにその機能を使えなければ、継続して利用してもらうことは難しくなります。
例えばタイマー機能の場合、自分がよく使う時間の候補が用意されていなければ、毎回わざわざ時間を設定する必要があります。
たった数回の操作であっても、それが毎回発生すると面倒に感じるようになります。
そのため、できる限りユーザーの操作を減らし、「考えなくても使える」状態を作ることが重要だと感じています。
③ 継続したくなる仕組み
継続性については、「報酬」がわかりやすい例だと思います。
PixelPotという歩数計アプリでは、歩くことで綺麗な植物を育て、それをコレクションできます。
ユーザーは特別な操作をする必要がなく、普段通り歩いているだけで植物が育っていきます。
「手間をかけずに、素敵なものが少しずつ育っていく」という仕組みが、継続する理由になっています。
他にも、友人に勧めたくなる仕掛けや、SNSで共有したくなる仕組みなど、継続利用につながる要素はいろいろあります。
その中でも、実際にアプリを作っていて特に強く感じたのが、
- データの質
- UIの便利さ
- 継続したくなる仕組み
の3つです。
もちろん、まだロジックそのもので勝負できる領域もあると思います。
ただ、そのような領域はかなりニッチになってきているように感じます。
例えば、18歳のAI開発者がポケモンユナイトのマッチングシステムを作成し、それが人気を博した事例もあります。
このように、特定の課題に対して非常に優れたロジックを作ることで価値を出せるケースは、今後も残っていくのだと思います。
AIを使った開発自体についての気づき
次に、AIを使った開発そのものについて感じていることを書きます。
最近は、もっぱらCodexを利用しています。
Astraが登場してから、先ほど挙げた「② UIの便利さ」については、かなり解消されつつあるように感じています。
Sol 5.6を利用していた頃は、自分が思い描いているUIになかなか辿り着かないことも多かったのですが、Astraが登場してからは圧倒的に改善しました。
現在の基本的な開発フローでは、
- 要件定義
- 設計
- 開発・テスト
- 広告戦略
をそれぞれ分けて進めています。
こうすることで、それぞれの工程に必要なインプットとアウトプットをある程度固定でき、余計なトークンの消費を削減できていると思っています。
また、それぞれを分けることで、複数の作業を並行して進めやすくなりました。
AI開発を続ける中で発生した問題と、その対応については以下の通りです。
/tmpに大量の不要ファイルが作られる
AIに開発を任せていると、/tmpに大量のファイルを作成したり、テスト結果をそのまま残したりすることがあります。
そのため、不要なファイルを定期的に削除するためのルールを作成しました。
実装内容に対して過剰なテストを行う
小さな変更にもかかわらず、大規模なテストを実施することがありました。
そこで現在は、開発内容に応じて必要なテストレベルを自動的に判断するようにしています。
開発担当AIが作成したテストには漏れがある
実装を担当したAI自身にテスト仕様書を作成させると、どうしても実装内容に引っ張られ、テスト観点が抜けることがあります。
そのため、別のエージェントにテスト仕様書をレビューさせるようにしました。
変更管理を事前に作らない
以前は変更管理の内容を事前に作成していました。
しかし、開発中にチャットをしていると、「これも追加したい」「ここも変更したい」と次々にアイデアが出てきます。
そのため、現在は事前に変更内容を細かく固定するのではなく、リリース前に実際の変更内容を変更管理としてアウトプットするようにしています。
このほうが、AIを使った柔軟な開発スタイルには合っていると感じています。
現在抱えている課題
現在、特に課題だと感じているのは以下の3つです。
- アプリを継続利用してもらうための戦略
- トークン消費量を抑えるための仕組みづくり
- 端末容量やメモリの制約の中で、最高精度の3D表現を実現すること
アプリの機能そのものを作る難易度は、AIによって大きく下がりました。
一方で、実際にユーザーに使ってもらい、継続してもらう部分については、まだまだ人間側で考えなければならないことが多いと感じています。
今後は、このあたりについても試行錯誤しながら、また気づいたことを書いていきたいと思います。