AIエージェントを使ってJavaでAndroid家計簿アプリを作ってみた
はじめに
こんにちは。
今回は、AIエージェントを活用してAndroidの家計簿アプリを個人開発してみました。
これまでJavaやSpring Bootなどを学習してきましたが、Androidアプリの開発は本格的には経験していませんでした。
そこで、
「AIエージェントを活用して、仕様を考えるところからAndroidアプリを完成させることができるのか?」
ということを試してみることにしました。
ただコードを書いてもらうだけではなく、今回はSpec駆動開発の考え方を取り入れ、仕様・設計・実装・テストを分けて開発してみました。
1. どんなアプリを作るのか
今回作成するのは、個人で使用するAndroid向けの家計簿アプリです。
一般的な家計簿では「家計全体」を管理することが多いですが、今回は、
- 現金
- 自分の財布
- 生活費用の財布
- その他の用途
など、複数の財布を分けて管理できるようにしたいと考えました。
イメージとしては、Excelのシートを複数作り、それぞれを別の財布として管理するような仕組みです。
2. 作ろうと思ったきっかけ
今回アプリを作ろうと思ったきっかけは、Androidアプリ開発を実際に経験してみたかったことです。
これまでJavaやデータベースなどを学習してきましたが、学習した知識を実際のアプリケーションとして組み合わせることで、より実践的な開発経験を身につけたいと考えました。
また、せっかく作るのであれば、単純な「収入・支出を登録するだけ」のアプリではなく、自分自身が実際に使いたいと思えるものを作ることにしました。
そこで、
- 複数の財布を管理できる
- 月ごとの収支を確認できる
- カテゴリー別に支出を確認できる
- 固定費を自動登録できる
- 予算を管理できる
- グラフで支出を確認できる
といった機能を追加することにしました。
3. 今回の開発で重視したこと
今回特に重視したのは、「実際に継続して使いやすいこと」です。
そのため、単純に機能を増やすだけではなく、操作のしやすさも意識しました。
例えば、金額入力では通常のテキスト入力だけではなく、電卓形式の入力画面を用意します。
7 8 9 +
4 5 6 −
1 2 3 ×
0 . = ÷
これにより、
500 + 300 + 120
のような計算をしながら金額を入力できます。
また、毎月発生するサブスクや保険などについては「定期登録」を用意し、自動的に家計簿へ登録できるようにします。【今後実装予定】
4. 開発環境
今回の主な技術構成は以下です。
| 項目 | 採用技術 |
|---|---|
| 言語 | Java |
| UI | XML |
| アーキテクチャ | MVVM |
| データベース | Room |
| AIエージェント | Zoo Code |
| 開発手法 | Spec駆動開発 |
KotlinやJetpack Composeではなく、今回はJava + XMLでAndroidアプリを開発することにしました。
これまでJavaを学習してきたため、Javaの知識をAndroid開発へ応用することを目的としています。
5. なぜAIエージェントを使うのか
今回の開発では、単純にChatGPTへコードを質問する方法ではなく、Zoo CodeをAIエージェントとして利用することにしました。
AIエージェントを利用すると、コードの生成だけでなく、
- プロジェクトのファイル確認
- 複数ファイルの編集
- テストの実行
- ビルド
- エラー確認
など、開発作業そのものをある程度まとめて任せることができます。
ただし、AIにすべてを任せるのではなく、仕様や設計については人間が確認する方針にしました。
6. Spec駆動開発を取り入れる
今回の開発で特に試してみたかったのが、Spec駆動開発です。
最初からコードを書き始めるのではなく、まず「何を作るのか」をドキュメントとして整理します。
最終的には、以下のような構成にしました。
docs/
├── architecture.md
├── data.md
├── prompt.md
├── rules.md
├── spec.md
├── spec_detail.md
├── tasks.md
└── ui.md
それぞれ役割を分けています。
architecture.md
Java、XML、MVVM、Roomなど、技術・アーキテクチャ方針を定義します。
data.md
データモデルやデータ間の関係を定義します。
rules.md
業務ルールやコーディングルールを定義します。
spec.md
「何を作るのか」を定義します。
spec_detail.md
仕様が確定した後に、AIエージェントが機能単位の詳細設計を作成します。
クラス図やシーケンス図もMermaidで記述します。
tasks.md
詳細設計をもとに、実装するタスクを整理します。
ui.md
画面構成や画面遷移を定義します。
画面遷移図にはMermaidを使用します。
7. AIにいきなりコードを書かせない
今回、AIエージェントを利用する上で特に意識したのが、
「AIにいきなり実装させない」
ということです。
開発フローは以下のようにしました。
仕様書確認
↓
不明点・矛盾点の確認
↓
人間による確認
↓
仕様確定
↓
spec_detail.md生成
↓
人間による詳細設計レビュー
↓
承認
↓
実装
↓
単体テスト
↓
ビルド
↓
人間による動作確認
AIが仕様に対して疑問を持った場合は、勝手に判断せず質問させます。
また、仕様書を変更する必要がある場合も、AIが勝手に変更するのではなく、
- なぜ変更が必要なのか
- 何を変更するのか
- 変更によって何に影響するのか
を提示させ、人間が承認してから変更するようにしました。
8. AIのモデルも使い分ける
Zoo Codeでは、開発フェーズによってAIモデルを使い分けることにしました。
仕様確認や詳細設計など、考えることが多い部分では高性能なモデルを使用します。
一方、詳細設計が確定した後の実装では、比較的低コストなモデルを使用します。
【Design Mode】
仕様確認
↓
仕様修正
↓
詳細設計
↓
人間レビュー
高性能モデル
↓
【Implementation Mode】
実装
↓
単体テスト
↓
ビルド
↓
人間テスト
低コストモデル
このように分けることで、AIのコストを抑えながら、設計部分には十分な推論能力を使うことを狙っています。
9. どんな機能を実装するのか
現在実装済みの主な機能は以下です。
基本機能
- 年別表示
- 月別表示
- 日別表示
- 収入登録
- 支出登録
- 編集・削除
複数財布
複数のシートを作成できます。
例えば、
┌──────────────┐
│ 現金 │ 生活費 │ 貯金 │
└──────────────┘
のように、それぞれを別の財布として管理します。
シート名も自由に変更できるようにします。
また、シートタブはすべての画面の下部に固定表示します。
10. 収支カテゴリー
支出カテゴリーには、
- 食費
- 日用品
- 交通費
- 趣味
- 娯楽
- 衣服・美容
- 交際費
- 医療
- 教育・教養
- 水道・光熱費
- 通信費
- 住宅
- 車・バイク
- 税・社会保障
- 保険
- 特別な支出
- 資産形成
- その他
を用意します。
また、ユーザー自身でカテゴリーを追加できるようにします。
収入についても、
- 給料
- ボーナス
- 臨時収入
を初期カテゴリーとして用意し、こちらも追加できるようにします。
11. 定期登録【今後実装予定】
※実装完了後に実体験を追記する予定です。
今回作るアプリで特に実用性を意識した機能が「定期登録」ですが、なかなか登録できず、今後実装します。
例えば、
Netflix 1,500円
保険 8,000円
スマートフォン 5,000円
など、毎月発生する支出を登録しておきます。
自動登録日を設定すると、その日に家計簿へ自動的に登録します。
ただし、ここで重要なのが、
自動登録されたデータを固定データとして扱わない
という点です。
例えば、保険料が今月だけ8,500円になった場合、
定期登録
8,000円
を変更するのではなく、
今月生成された明細
8,500円
だけを編集できるようにします。
12. 集計・分析機能
登録するだけではなく、家計を確認できるようにします。
トップ画面では、
- 月ごとの収入合計
- 月ごとの支出合計
- 月ごとの収支
- 支出カテゴリー別集計
- 収入カテゴリー別集計
を確認できるようにします。
さらに、
- グラフ表示
- 予算管理
- 検索
- 残高管理
- CSV出力
なども実装予定です。
13. AIを使ってみて感じたこと
- 仕様を明確にしてからAIに依頼することが重要
- 仕様が曖昧なまま実装を依頼すると、AIは一見正しそうなコードを生成してくれます。
- しかし、AIが仕様を独自に解釈してしまい、自分が本当に作りたかったものとは異なる実装になる可能性があります。
- 一度に大量の実装を依頼しない
- 複数の機能をまとめて依頼すると、AIは大量のソースファイルを一度に生成してくれます。
- 実際に100件以上のソースファイルが生成されたこともあり、人間の目で一つひとつ確認することが難しくなりました。
- 仕様を一つずつ区切って依頼する
- 一度に多くの機能を依頼するのではなく、仕様や機能ごとに区切ってAIに依頼する方がよいと感じました。
- 生成されるファイルやコードの範囲を絞ることで、人間も内容を確認しやすくなり、想定と異なる実装にも早い段階で気づけます。
- AIに任せる部分と人間が確認する部分を分ける
- AIに実装を任せることで開発速度を上げられますが、生成されたコードをそのまま採用するのではなく、人間が仕様や実装内容を確認することが大切だと感じました。
- AIを効率よく活用するためには、依頼の仕方や作業範囲を適切に管理する必要があります。
14. 今後やってみたいこと
まずは現在予定している家計簿機能を完成させたいと思っています。
その後は、
- クラウド同期
- 複数端末でのデータ共有
- バックアップ・復元
- 通知機能
- ウィジェット
- AIによる支出分析
などにも挑戦してみたいです。
特に、今回のアプリは将来的なクラウド同期を考慮した設計にしているため、ローカルアプリとして完成した後、クラウド同期まで発展させてみたいと考えています。
15. まとめ
今回は、AIエージェントのRoo Codeを利用して、Java + XMLによるAndroid家計簿アプリをSpec駆動開発で作ってみることにしました。
単純にAIへ「アプリを作って」とお願いするのではなく、
要件定義
↓
アーキテクチャ設計
↓
UI設計
↓
データ設計
↓
詳細設計
↓
実装
↓
テスト
という流れを作り、人間とAIの役割を分けて開発しています。
まだ開発途中ですが、AIを「コード生成ツール」としてだけではなく、開発プロセスの中で一緒に設計・実装を進めるエージェントとして活用することで、どこまで個人開発の幅を広げられるのか試していきたいと思います。
今後、実際の開発で発生したエラーやAIとのやり取り、Spec駆動開発をやってみて分かったことなども追記していく予定です。