コラム

予算オーバーの通知は、使い切ってからでは遅い

公開日 2026/7/27
予算通知設計の話

家計簿の予算機能には、たいてい「予算を超えました」という通知がある。ふたかけにも最初からあった。

ある時期まで、この通知は消化率が100%を超えたときにだけ出るようになっていた。実装としては単純だし、間違ってもいない。

ただ、使っていて気づいた。100%を超えてから知らせても、もう打てる手がない。

「超えました」は事後報告でしかない

食費の予算が5万円だとする。月末近くに「予算を超えました」と通知が来る。

そのとき何ができるか。もう使ってしまったお金は戻らない。残りの数日を耐えることはできるが、超過分は消えない。通知が届いた時点で、その月の結果は確定している。

これは通知というより事後報告だ。知らないよりはいいが、行動を変える余地がない。

行動を変えられるのは、まだ月の途中で、まだ残額があるときだけだ。80%の時点で知っていれば、残り20%をどう配分するか決められる。50%の時点なら、月の前半で使いすぎたことに気づいて後半を調整できる。

だから、任意の消化率で通知を受け取れるようにした

しきい値は世帯で2つまで

設計するときに決めたことをいくつか書く。

設定できるのは最大2つ。 いくつでも設定できるようにすることもできたが、意図的に絞った。5つも6つも設定すると通知が増え、増えた通知は読まれなくなる。読まれない通知は、無いのと同じどころか、他の通知まで無視させるので害のほうが大きい。

2つあれば「早めの気づき(50%あたり)」と「そろそろ危ない(80%あたり)」を置ける。実用上はこれで足りる。

設定は世帯共通にした。 予算そのものが世帯で1つなので、しきい値だけ人ごとに分ける理由がない。ただし既読はこれまでどおり人ごとで、片方が読んでももう片方の未読は消えない。

範囲は1%から300%まで。 100%を超える値も設定できる。「120%を超えたらさすがに知らせてほしい」という使い方はありうるからだ。

ただし100ちょうどは設定できない。 これはシステム側の既定として常に有効なので、ユーザー設定として受け付けると同じ通知が2回出る。地味だが、こういう重複はデータの持ち方の段階で潰しておかないと、後から通知の重複排除を書く羽目になる。

一気に飛び越えたとき、何回通知するか

実装で一番考えたのがここだった。

50%と80%を設定していて、大きな買い物を1件記録した瞬間に、40%から85%まで一気に飛んだとする。50%も80%も同時に超えている。

素直に作れば2件通知が出る。これは正しいが、うるさい。しかも「50%を超えました」の直後に「80%を超えました」が並ぶのは、情報としても意味がない。50%の通知はもう役目を終えている。

そこで、一度に複数のしきい値を跨いだときは、最上位の1件だけを通知することにした。この例なら80%だけが出る。50%は出さないし、以後も再送しない(もう超えているものを後から知らせても仕方がない)。

通知機能を作るときは「どういうときに出すか」ばかり考えがちだが、「どういうときに出さないか」を同じだけ考えないと、すぐに無視される通知になる

将来のために1列だけ足しておいた

もうひとつ、実装上の判断を書いておく。

しきい値は今のところ世帯共通の1組しか設定できないが、データの持ち方としては「どのカテゴリのしきい値か」を書ける列を用意してある。今は常に空(=世帯共通)として使っている。

「食費だけ厳しめに、趣味は緩めに」という要望はいずれ出ると思っている。そのとき、データの構造を変えずに機能だけ足せる。

やりすぎると「使わない汎用性」でコードが太るので、将来足すと分かっているものだけ、列1つぶんの余白を残すくらいがちょうどいいと思っている。実際、この判断がなければ、後からカテゴリ別に広げるときにデータ移行が必要になっていた。

通知は「気づける最後のタイミング」に置く

まとめると、考え方はレシートの確認画面と同じだった。

レシートは手に持っている今しか確認できないから、そのタイミングで確認を挟む。予算はまだ月の途中で残額があるときしか手を打てないから、そのタイミングで知らせる。

どちらも「正しいことを知らせる」だけでは足りなくて、知らせても何もできない時点で知らせるのは、通知ではなく報告だという話だと思っている。

通知を設計するときは、「これを受け取った人が、何かできるか」を先に確かめるようにしている。何もできないなら、それは通知にする必要がない。

広告

関連記事