Gemini CLIを使ってPayPay履歴をAIが仕分けるアプリを作ってみた
はじめに
※本記事は一部Geminiによって書いてもらっています。
こんにちは!今回は、PayPayの利用履歴CSVをアップロードするだけで、AIが自動で支出を分類し、家計収支を可視化できるWebアプリケーションをGemini CLIを用いて試作的に開発しました。このアプリについてと、開発でどのようなステップを踏んだのかをご紹介いたします。
GitHubリンク
以下がGitHubリンクになっています。Gemini CLIのための"要件定義書.md"などのmdファイルも残してあります。
試すにはgit cloneをして、.envに自身のgoogle api keyを入力する必要があります。
開発の背景
PayPayは非常に便利な決済サービスですが、API制限がきつく家計簿アプリと連携できませんでした。しかし、利用履歴を家計簿に手動で入力するのは手間がかかります。特に、何にいくら使ったのかを正確に把握するためには、一つ一つの支出を分類する作業が避けられません。この手作業をAIの力で自動化し、簡単に家計管理をできるようにしたいと考えました。
開発のステップ
開発をGemini CLIにお願いする際に気を付けていたことはおおむね以下の2つです。
- 開発するアプリの仕様をできるだけ具体的に規定すること
- 不具合でGemini CLIが落ちてしまってもcontextを失わないように、mdファイルに記録を残させること
以上を実現するために、以下のようなステップを踏んでいます。
- まず最初にチャットアプリのGeminiの方にこういうアプリが作りたいので要件定義書を書いて、という風にお願いして要件定義をしてもらいました。その結果+少し手直ししたのが以下リンクのmdファイルになっています。
https://github.com/mugi0227/paypay-history-app/blob/master/要件定義書.md - 次に、Gemini CLIを立ち上げ、"要件定義書.md"をもとにGEMINI.mdを作成し、アプリを開発してくださいとお願いしました。
- あとは基本的に待つだけです。出来たものを起動しますと、まあまあいい感じのたたき台ができています。ここで、気になった点を列挙し、「以上を要件定義書.mdに追記して修正して」とお願いしました。そのため"要件定義書.md"には追記部分があります。
- 適宜、「これまでの進捗をprogress.mdに記載して」とお願いしながら、3.を繰り返し、完成しました。
所要時間はなんだかんだで大体1時間だったでしょうか。ちょっと長い気もしますねw
アプリケーションの概要
ここからはアプリの内容について、Geminiに説明してもらいます。
このアプリケーションは、クライアントサイドで完結するWebアプリとして設計されています。ユーザーはPayPayからダウンロードしたCSVファイルをアップロードするだけで、以下のプロセスが自動で実行されます。
- CSV解析: アップロードされたCSVデータがブラウザ内で解析されます。
- AIによる費目分類: 各支出項目がGoogle Gemini APIに送信され、AIが最適な費目を推測・分類します。
- 結果の表示と編集: AIが分類した結果が一覧で表示され、もしAIの分類が意図と異なる場合は、ユーザー自身で簡単に修正できます。
- 集計レポート: 最終的なデータに基づいて、費目ごとの合計金額が自動で集計され、レポートとして表示されます。このレポートはクリップボードにコピーしたり、CSVとしてダウンロードしたりすることも可能です。
技術スタック
このプロジェクトでは、以下の技術を採用しました。
-
フロントエンド: React
- ユーザーインターフェースの構築に、宣言的でコンポーネントベースのReactを採用しました。
-
スタイリング: Tailwind CSS
- ユーティリティファーストのCSSフレームワークであるTailwind CSSを使用し、迅速かつ効率的なUIデザインを実現しました。
-
CSV解析: PapaParse
- ブラウザ上でのCSV解析には、高速で堅牢なPapaParseライブラリを利用しました。
-
AI連携: Google AI JavaScript SDK (Gemini)
- 支出の自動分類には、Googleの強力なAIモデルであるGeminiをJavaScript SDK経由で利用しています。
アーキテクチャ図
図の解説
この図は、アプリケーションの構造とデータの流れを示しています。
-
エントリーポイント:
- ブラウザは
public/index.html
を読み込みます。 -
src/index.js
がReactアプリケーションを起動し、メインコンポーネントであるApp.js
を呼び出します。
- ブラウザは
-
メインコンポーネント (
App.js
):- アプリケーション全体の親コンポーネントです。
-
FileUpload.js
、TransactionTable.js
、SummaryReport.js
といった子コンポーネントを管理します。 - 取引データやAIによる分類結果などの状態(State)を一元管理する役割を担います。
-
UIコンポーネント (
src/components/
):-
FileUpload.js
: ユーザーがCSVファイルをアップロードするためのUIです。 -
TransactionTable.js
: AIによって分類された取引データを表形式で表示し、ユーザーが手動で修正できるようにします。 -
SummaryReport.js
: 最終的なデータを集計し、レポートとして表示します。
-
-
API連携 (
src/gemini.js
):- GoogleのGemini APIと通信するためのロジックがここに記述されます。
App.js
から呼び出され、取引データの費目分類をAIに依頼します。
- GoogleのGemini APIと通信するためのロジックがここに記述されます。
-
データの流れ:
- ユーザーが
FileUpload.js
でCSVファイルをアップロードします。 -
App.js
がファイルを受け取り、gemini.js
経由でGemini APIに送信して費目を分類させます。 - 分類結果を受け取った
App.js
は、そのデータをTransactionTable.js
に渡して表示します。 - ユーザーがテーブルでデータを編集すると、その変更が
App.js
に通知されます。 -
App.js
は最終的なデータをSummaryReport.js
に渡し、集計レポートを表示させます。
- ユーザーが
アプリケーションの主な機能
1. CSVアップロード画面
直感的なドラッグ&ドロップ、またはファイル選択でPayPayの利用履歴CSVを読み込めます。
2. データ処理とAI自動分類
アップロードされたCSVは即座にクライアントサイドで解析され、各取引データがGemini APIに送られます。Geminiは取引内容から最適な費目(例: 食費、交通費、娯楽費など)を推測し、分類結果を返します。
3. 結果確認・編集画面
AIが分類した結果は、見やすいテーブル形式で表示されます。もしAIの分類が期待と異なる場合でも、ユーザーはテーブル上で直接費目を手動で修正できます。これにより、AIの精度に依存しすぎず、ユーザーの意図を反映した家計簿を作成できます。
4. 集計レポート
分類が完了したデータは、費目ごとに合計金額が算出され、サマリーレポートとして表示されます。このレポートは、家計の全体像を把握するのに役立ちます。さらに、レポートデータをクリップボードにコピーしたり、CSVファイルとしてダウンロードしたりする機能も備わっています。
おわりに
こういうのが欲しいな~とおもったら手軽に作れる時代が本当に来たなと感じています。
AI駆動開発にはリスクもありますが、間違いなく夢が広がっているので、うまく使って今後もいろいろ楽しいことをしたいなと思います!
Discussion