家計簿アプリKakeLogでは、支払い直後に細かな分類まで入力させるのではなく、まず金額を記録し、あとから整理できる仕組みを作っている。今回の開発では、Money Inbox、Widget、月別分析などの主要画面を実装し、アプリとWidgetが別プロセスで動くことによる状態更新の問題も確認した。

金額だけを先に記録する

支払い直後は、カテゴリやメモを正確に入力するより、記録そのものを残すことが重要になる。そこでクイック入力では、金額・日時・支出または収入という最小限の情報を先に保存する。詳細が空でも支出はMoney Inboxに残り、時間のあるときにカテゴリや内容を確認できる。

この設計では、記録を急ぐ場面と家計を整理する場面を分けられる。Widgetから任意の金額や長いメモを入力するのは難しいため、Widgetでは支出・収入の入口を用意し、アプリを開いた入力画面へディープリンクする。アプリ側では金額欄へ自動フォーカスし、入力速度を優先した。

支払額とReal Costを分ける

家計簿の支出には、実際にお金が出ていった額と、最終的に自分が負担する額が一致しないケースがある。代表払い、会社経費、共同精算、立替回収などを同じ「支出」だけで扱うと、月の負担額が分かりにくくなる。

そこでKakeLogでは、キャッシュフローとReal Costを別の概念として扱う。ホームでは当月の実質負担、予算、未回収、未整理を確認でき、立替回収の記録も追加できる。立替相手ごとの詳細履歴やカテゴリ別予算などは、現時点では今後の課題として残している。

Widgetは保存場所だけでなく更新方法も設計する

Widgetを実装した初期段階では、コードがコンパイルできてもホーム画面へ追加できなかった。Widget Extensionのターゲット、埋め込み、App Group、entitlements、Extension用schemeが必要であり、Widgetのコードが存在することと、配布可能なWidgetになることは別だった。

AppとWidgetはApp Groupの共有ストアを使うが、共有されるのは保存場所であって、アプリのメモリ上のObservation状態ではない。Widgetからランチ代500円を登録したあと、起動済みアプリのInbox件数が増えたように見えない問題が発生した。原因はアプリが初回起動時にしかデータを読み直していなかったことだった。

scenePhaseがactiveになったタイミングでRepositoryから再取得するように変更し、Widget登録後にアプリへ戻るとInboxが3件から4件へ更新されることを確認した。この経験から、App Group対応では保存場所の共有だけでなく、別プロセスからの変更をいつ画面へ反映するかまで決める必要があると分かった。

使用状況を確認するWidgetと、プリセットを登録するWidgetは役割を分けた。中サイズの登録Widgetでは説明見出しを削り、2列×2行の候補表示へ領域を使った。支出と収入は色だけに依存せず、矢印やアイコンも併用して区別している。

履歴と分析の期間をそろえる

分析画面が当月固定の集計値を直接参照していたため、過去月を比較できない問題も修正した。選択月を画面の状態として持ち、同じ月境界からカード、日別集計、カテゴリ集計、未回収額を生成する形に変更した。

履歴は取引ごとに日付を繰り返すのではなく、大きな日付見出しと日次合計を持つセクション形式にした。カテゴリ分析では割合だけで金額が分からなくならないよう、ドーナツ型グラフと金額一覧を併記した。日本語表示では、端末言語の影響で日付だけ英語になる問題があったため、MVPの日付書式へ日本語ロケールを明示した。

検証結果と残課題

2026年9月23日時点で、KakeLog本体とWidget Extensionの汎用iOS Simulator向けDebugビルドは成功している。これまでのシミュレータ確認では、5タブ構成、クイック入力、金額入力、Widget登録後のInbox更新、未整理項目の連続確認、画面遷移を確認した。

一方で、自動テストターゲットはまだなく、SwiftDataのマイグレーション、起動時のStore生成失敗、App Group導入前データの移行、Widgetギャラリーへの追加、実機のApp Group共有は未検証である。現在の実装は主要な入力と集計の流れを形にした段階であり、データ保護と回帰テストを次の課題としている。

家計簿アプリの使いやすさは、入力画面の項目数だけで決まらない。急いでいるときは金額だけを保存し、別プロセスのWidgetからの変更を復帰時に再取得し、後からReal Costやカテゴリを整理できる。この役割分担をデータモデル、画面遷移、Widget Extensionまで一貫させることが、KakeLogの現在の開発テーマになっている。