Beancount (fava)でキャッシュフローを管理する。Plain Text Accountingに基づいたPython実装であり、軽快に動作する
キャッシュフローの管理に「GnuCash」を使っていたんだけど、また別のものに変えてしまった。
新たに使いはじめたのはBeancountという。
これはPlain Text Accounting (PTA)という発想に基づいてPython実装されたアプリになる。
Plain Text Accounting (PTA)
PTAは名前のとおり、会計のデータをプレーンテキストで扱おう、という思想のようだ。なんとマニアックな。
そんな思想ははじめて知ったんだけど、その界隈では頑張って活動しているみたいだ。たくさんのライブラリがあるし、今でも開発は続いているみたい。
プレーンテキストにしたら何が良いかって、例えば、Gitで履歴管理ができて、データの保全や切り戻しが容易になるってことだ。これがMariaDBやPostgresに入っているデータだと、バックアップやリストアにもちょっと工夫が必要になる。
私はそんなプレーンテキストが大好きなので、ちょっと使ってみたくなった。
Beancountを採用する
PTAはあくまで思想で、その実装は色々とあるようだ。
どうやら、データをプレーンテキストで作ることを主張しているんだけど、統一規格があるわけではないらしい。実装によってフォーマットが異なるようだ。
そうなると、これらの実装の中でも、できるだけメジャーで、開発が継続されているものがよいのだろうな。
いくつか候補はあったんだけど、Python実装で取り入れやすそうなBeancountを採用することにした。
Fava – BeancountのWeb実装
Beancountを採用するとしたが、それはあくまでプレーンテキストのデータを処理する会計エンジンのようなものらしい。
その処理結果を見るための実装がいくつかあって、中でもWeb実装のFavaがよく使われているようだ。ソースコードがアップされているGithubを見ると、開発もこまめに行われているっぽい。
PTAでキャッシュフローを管理したらどんなもんだろ?と思って調べ始めて、ここまでたどり着くのにまあまあ大変だった。
まとめると、会計データをプレーンテキストで管理するための実装にBeancountがあって、その実行結果を見やすくするためのインタフェースがFavaという位置づけである。慣れるとそういうものかと思うんだが、ここまで紐解かないと使えないんだとしたら、ちょっと普及は難しいぞ?と思ってしまう。
まあ、そんなこんなでBeancountを使ってみることとして、会計データをテキストで作って、favaで表示してみた。

favaはお世辞にもモダンなUIとは言えないのだけれど、損益決算書や貸借対照表、試算表といった財務諸表がワンクリックで見れるし、仕訳帳の表示や銀行口座ごとの入出金、残高の表示など、およそ財務状況を把握するのに必要そうなものは揃っているという印象。ちゃんと日本語で表示できるあたりもポイントが高い。
私が主にやりたいことは、銀行口座ごとの入出金のシミュレーションなので、十分に機能しそうである。
favaでもデータの編集はできるから、ちょっとデータを編集するだけならWebブラウザだけで完結できるというのも便利である。
Beancountでキャッシュフローを確認する
Beancountでキャッシュフローを確認するようになって、便利だと思ったのは、データがプレーンテキストであることだ。PTA万歳。
今月分のデータを打ち込むのはちょっと手間だったけど、来月分はコピペして月の部分だけごっそり置換してやれば、ひとまず来月にも繰り返し発生するデータは用意できる。
私の場合は、銀行の入出金をシミュレーションしたいので、各銀行の入出金データを作ればよくて、それはクレジットカードや年金事務所、借入金の引き落としなど、毎月ほとんど同じ項目が出てくるようなサイクルになる。
毎月繰り返し発生するデータはテンプレート化することができて、テンプレートをコピペして年月を揃えれば、あとは金額が変動するレコードだけ編集すればいい。運用としてはシンプルだ。
最初は面倒くさいと思ってたんだけど、慣れてくるとこれは便利だと思えてきた。
また、テキストデータを格納したファイルは、好きなように分割したり、階層化したりできるから、整理も簡単。法人の1年分、個人の1年分、とかでファイルを分けておいて、必要なファイルだけ読み込めばいいように設計した。
仕組みを理解し、データを作るところまではそれなりに手間取ったんだけど、仕組み化してしまえば運用はすぐにでもできそうだと思えた。
よって、すぐ採用となった。
おわりに
キャッシュフローをシミュレーションするツールを長年探していて、Beancountにたどり着いた。
プレーンテキストで会計データを作るというマニアックな思想に基づいた実装なわけだが、乗っかってみるとこれがなかなか小気味よい。
お家サーバーにfavaを置いておいて、テキストデータはVS Codeなど好きなエディタで編集すればよいので、運用も楽ちんだ。favaでもテキストデータの編集はできるから、ちょっとした編集ならWebブラウザだけで事足りるし。
できればもう少しモダンなGUI実装ができてくるといいと思うのだけれど、favaで機能は事足りているので今は気にしない。
Beancountを使って、プレーンテキストで会計データを管理するという仕組みは、構築する敷居はそこそこ高いと思うのだが、一度構築してしまえば結構便利なものだと思う。









