SSELMOISS STORIES

쓸모있는 이야기를 나누는 블로그

일상에서 발견한 정보와 경험을 읽기 편한 글로 만나보세요.

최신 글

バイブコーディングで自分専用の家計簿アプリを作った記録

カード通知、明細画像OCR、現金支出、予算比較まで、対話型AIを使って個人用Android家計簿を段階的に改善した記録です。

バイブコーディングで自分専用の家計簿アプリを作った記録

完成度の高い家計簿アプリは数多くありますが、自分の管理方法に完全に合うものは見つかりませんでした。カードごとに利用期間が異なり、カードだけでなく現金と固定費も一つの画面で確認したかったからです。過去の履歴は明細画像から取り込みたい一方、金融情報を外部サーバーへ送りたくありませんでした。

そこで、対話型AIに必要な機能を説明し、実機へインストールし、見つかった問題を再び伝える方法で個人用Androidアプリを作りました。いわゆるバイブコーディングですが、一つのプロンプトで完成したわけではありません。要件を小さく分け、実行し、合計を比較し、不一致の原因を探してテストを追加する反復作業でした。

この記事の画像では個人情報と実際の金額をすべて削除し、棒の高さから金額を推測できるグラフも隠しています。

「一目で確認したい」から始まりました

最初の目標は、月間予算、現在のカード利用期間の合計、今月の現金支出、消費状況をトップ画面で確認することでした。画面はサマリー、カード、現金、予算、取り込みに分けました。

初期版はAndroidの通知アクセスを利用して、指定したカード会社の新しい決済通知だけを保存するMVPでした。銀行ログイン、口座アクセス、SMS・連絡先の読み取り、広告SDK、サーバー送信は意図的に除外しました。通知と整理済みデータは端末内にだけ保存します。家計簿には生活パターンが含まれるため、便利さより先にプライバシーの範囲を決めました。

カード別の利用期間が最初の難関でした

毎月1日から末日まで単純に集計すると、実際の請求と一致しません。カードごとに期間が異なるため、個別の期間計算と前後期間への移動を追加しました。

同じ取引が通知と画像の両方から入れば一度だけ数える必要があります。一方、同じ店で同額を複数回支払った正常な取引は残さなければなりません。最終的にデータの出所、カード会社、期間、時刻、金額を組み合わせて判定し、サマリーと詳細画面は同じ計算ロジックを使うようにしました。

過去の明細には端末内OCRを使いました

通知アクセスで取得できるのはインストール後の新しい通知です。過去の履歴を補うため、カード明細や利用履歴の画像を取り込む機能を追加しました。利用者がカード会社を選択すると、日本語ではなく韓国語向けのOCRが端末内で実行されます。確認前には保存せず、別のカードを選んだ時には以前の候補を消去します。

カード会社ごとに画面構成が異なるため、日付と金額を画面上の位置で対応させる処理、メニューが行を隠す場合、取消と利用を区別する処理を何度も改善しました。

予算表と現金支出を統合しました

カードだけでは家計全体を把握できません。既存のGoogle Sheets予算表から分類合計と行単位の詳細を読み込めるようにしました。現金支出は固定費と一時支出に分け、固定費だけ翌月へ引き継ぎます。追加・編集・削除はサマリーと月別グラフへ直ちに反映されます。

最後に複数月のカードと現金を比較し、予算より節約できているか超過しているかを文章で表示しました。

プロンプトより検証が重要でした

AIは実装を速めましたが、家計簿の数字には明確な定義と人の検証が必要です。カード期間の境界、通知解析、OCRの日付と金額の対応、複数ソース間の重複排除、正常な重複決済の保持、固定費の繰り越し、各画面の合計一致、予算明細と全体合計を自動テストにしました。

大きな変更前にはソースをバックアップし、変更後には単体テストとAPKの実機確認を繰り返しました。一つの画面で正しく見えても、別の画面が異なる計算規則を使っている可能性があります。見える結果と内部ルールの両方を確認する必要がありました。

使いながら進化するアプリ

バイブコーディングの最大の利点は速度だけではなく、日常の要望をすぐ試せることでした。しかしAIの最初の結果をそのまま信頼することはできません。プライバシー、合計の定義、重複処理、既存機能の回帰を繰り返し確認しました。

役に立つ製品を作ったのは魔法の一文ではなく、小さな要件、実データで見つかった不具合、バックアップ、テスト、再検証の循環でした。万人向けではありませんが、自分が本当に必要とする流れを持つ個人ツールになりました。