Excel嫌いの家計簿術 My Balance Utils
開発::util
序
私が家計簿をつけ始めたのは2020年で、ドラム(防音室込)を導入するにあたり、長期に渡るローンを組んで支払いに問題がないかを確認するためであった。
自営業をやっている以上、事業としての収支はつけているが、自分個人としてのキャッシュフローは銀行の残高変動で見ている程度であり、ちゃんと把握はしていなかった。 出費をカードで管理するようになってから出費の内訳が見やすくなったので、これベースにすればちゃんと分析し、節約も捗るのではないかと考えたのだ。
そうして収支記録のデータフォーマットを決め、それを描画するユーティリティを作り、さらにカード明細から取り込めるようにした。 後々、また違う角度での分析も欲しくなり、少しずつツールは増えていった。
おそらく、Excel大好きな人なら、Excelで簡単にできることをわざわざプログラミングしていると考えるだろう。 しかし、私はExcelがだいっっっっっきらいなので、Excelを使わなくて済むなら喜んでプログラミングする。 それに、最近はスプレッドシートを使うこともあるが、入力にラグがある上にキーストロークが多く、行をはさむだけでもマウスでぽちぽちする必要があり、さらにそのラグい応答をまたなければならないなど、かなり体験が良くないので、むしろこのほうがつけやすいのではないかと思っている。コピペも楽だ。
My Balance Utils
My Balance Utilsは、家計簿をつけた後、それを描画・分析するためのツール郡である。
基本的なフローとしてはまずベースとなるシート(YAMLファイル)を用意する。 これは、賃料など金額が固定のものを予め記入し、カテゴリも用意したテンプレートファイルをコピーしている。 そして、converterを使って各カード明細から取り込んでいく。私が手動で入力できない程度には使っている3つのカードはコンバーターが用意されている。
注意すべきはエポスカードだ。 エポスカードでCSVをダウンロードできるのは請求が確定されてから引き落とされるまでの間だけなので、毎月忘れずダウンロードしなければならない。
なお、私は現金の明細はつけていない。毎月現金枠で計上しているだけだ。 だって面倒だから。
calc.rb
でグラフ描画を伴う毎月の分析シートはHTMLで出力する。
かなりの力技だが、個人的には実用性は問題ない。
単月の収支と、何の出費が大きかったかを分析するのにはこれが良い。
残高変動というキャッシュフローを中心にした見方ができるのがaccounts-calc-column.rb
だ。
残高は手動入力だが、口座の月ごとに残高を書くだけなので負担は感じていない。
これで総残高はどの程度あり、お金が減っているのか増えているのかを判断できる。
減り続けていれば危険な状態であり節制が必要だ。
plot.rb
はその補助的なツールで、シート側の収支変動を分析できる。
カードを使っているということはシートで判断できる収支と実際のキャッシュフローにはズレがあるため、出費を管理することを目的としている。
収入の変動は小さいと思うが、出費傾向にあるなど自分の「状態」を客観視しやすくなる。
グラフになることで見え方が変わり、認識は結構変わってくるものだ。
analyze.rb
はより問題に対応するアプローチとして作られたものだ。
「今月は大きく赤字だった」「今月はどういうわけか結構黒字だった」といったことがある場合に、その要因はなんだったかという分析をしやすくする。
これは単月単位の分析であるrenderedからも見えるものではあるが、「収支を左右している大きな要因」というのは比較しないとわかりにくい。
このとき、複数月のシートを比べて自分で書き出す、というのは無駄な労力なので、カテゴリごとの変動というくくり方で表示できるようにした。
例えば、「今月は食費かかりすぎたなぁ」と思ったとしても、実際に食費の増加量がどの程度影響を与えているかというのは分析しないと分かりづらい。 こうした問題に対応するためで、つい先日書いた。
Focus to codes
端末ベースで考えられているために、コードは非常に簡単で、「手間はかかるが難しくはない」タイプのものになっている。 もともと公開するつもりのなかったツール群なので、読みやすくはないし、値の大部分がハードコーディングされている。
他のプログラムではあまりやらないこととしては、printf
を使ってテーブル整形しているのと、\e[Nm
の形でANSIエスケープシーケンスを使っていること。
端末用に特化したプログラムは、私はあんまり書かない。
あとは、結構力技であることだろうか。
日常レベルの実用コードを書くのが苦手な人には役立つかもしれないが、正直なところ教材としてはあまり適していない。