しばらく前から家計簿をbeancountで管理しているので紹介したい。 beancountは「コードを書く人向けのテキストベースの複式簿記フォーマット」とでも言うべきものだ。Getting Startedあたりを読むと分かるとおり、次のようなテキスト形式にて記帳してことになる。
2026-05-09 * "○○映画館" "プロジェクト・ヘイル・メアリー"
Assets:Cash -1,300 * 2 JPY
note: "××と2人分"
Expenses:Entertainment:映画
この説明からはいくつか疑問が浮かぶことだろう。テキストベースであることの利点は何か、なぜコードを書く人向けなのか、クラウド家計簿サービスでは駄目なのか。
Beancountの特性
テキストベース管理の利点
テキストベースであることでgit等による履歴管理が自然にできるようになる。gitに慣れている人には大きな利点だ。
プロの経理でない一般人が自分の帳簿を管理する場合には、少しまとめて何日分かを一気に処理することもある。間違いに気がついて過去の記帳を修正することもあるし、元に戻したかったり比較したかったりすることもある。そのとき必要なのは厳格な改竄防止や修正履歴が常に表に出ていることではなく、必要なときに必要なだけdiffを見られることだ。言うまでもなくgitはこのユースケースを強力にサポートする。ブランチが必要なことはめったにないが、偶に新しい記帳法を試すときに使うこともある。
テキストベースであると言うことは、テキスト処理をするあらゆるツールが使えるということでもある。手に馴染んだエディタ, awk, sed, ruby。一括処理のためや分析のために、いつものツールがいくらでも使えるということだ。
beancountの前には何年かGnuCashも使っていたが、テキストベースで処理できるという魅力は圧倒的で、これがbeancountを使い始める決め手となった。
コードを書く人向け
上で述べたように、テキストベースであることはコマンドラインツールやgitに慣れた人にとってこそ真価を発揮する。これがコードを書く人向けであると述べた理由の1つだ。 四則演算程度の式言語も持っているから記帳の背景にある単価や個数情報を捨てる必要がないし、BQLというクエリ言語で分析もできる。期待残高を宣言する"balance" assertionというのがあって、一種の単体テストとして機能する。こういうのもコードに慣れた人には嬉しい点だ。
もう1つには、beancountエコシステムにおける自動記帳システムであるbeangulpをはじめ、多くのものがPython libraryとして提供されている。エントリポイントは自分のユースケースに合わせて自分で書くという想定だ。そのためか、相対パスの基準ディレクトリをエントリポイントのスクリプトの所在としている箇所もある。 日本の金融機関向けのimporter実装はあまりないから、そういうのは自分で書くしかなかったりもする。つまり、beancountはコードを書かない人には少々扱いが難しい。
ただし、私は「コードを書く人向け」と言った。職業プログラマ向けとは言っていないことに注意してほしい。確かに、職業プログラマには何の心配もいらないだろう。しかし、今や誰もがAI coding agentを通じてコードを書ける時代でもある。試した限りではClaude Codeはbeancountエコシステムを十分に分かっているから、対話的に自分用のエントリポイントを書き上げたり、CSVのサンプルを示してimporterを作らせたりするのはたやすい。
一応は https://beancount.io/ のようなホスティングサービスもあって、コードを書いたりpipxを叩いたりせずにbeancountをweb上で使えるのだが、私は使っていない。
クラウド家計簿サービスとの比較
いまどきは個人家計簿向けにもマネーフォワードのような便利なサービスがあって、金融機関口座と連携して自動的に取引を記帳してくれる。こういうのも便利なのだが、私はいくつか不満を持っていた。
第一に、複数通貨建ての記帳機能が弱いということ。私は、通貨も株式もそれぞれのunit数を把握しつつ、更にそれぞれの日本円換算時価のようなものを同時に把握したい。
パスワードを引き渡す設計もセキュリティ上の観点から気に食わない。読み出し認可トークンを使ってAPIで連携できる金融機関がもっと多かったら良いのだが、現実には多くの金融機関でパスワードを引き渡してスクレイピングさせる仕組みになっている。
最後に何よりも、ロックインされるのが気に食わない。一応過去の履歴をダウンロードできるようになっているとは言え、それはマネーフォワードで言えば口座ごと・月ごとにポチポチwebからダウンロードできるということであって、何年も使い続けるとデータを人質にロックインされるという側面はどうしても発生する。 家計管理という重要なものを支えるデータは自分で所有して管理できるべきだ。
私は今もマネーフォワードも使ってはいるのだが、期待しているのはAPI連携できる金融機関に対して履歴を統一CSVフォーマットに変換できるfetcherとしての機能が主であると言える。
より便利に使うために
Beancountをより便利に使うためにいくつかのツールを追加で紹介したい。
- https://github.com/beancount/fava - 準公式のwebフロントエンドで、先に紹介したbeancount.io はこれを元にしているようだ。B/S, P/Lを表示したり、その他にも様々な形でデータをビジュアライズしたりできる。Wasmで書かれたエディタも内蔵していてファイルを編集もできるし、BQLを走らせて結果を表示もできる。
- beansprout - beancount用の汎用エントリポイントとして私が開発している。beancountを使い始めるときの学習曲線を緩やかにすることを目的としている。
- 標準のやり方では、beancount, beanprice, beangulp等を自分で組み合わせたり、帳簿ファイル配置を自分で決めて使いやすいエントリポイントを自分で書いたりする必要があった。この負荷を軽減するためにお仕着せのエントリポイントで、データの変換・取り込み、価格データの自動取得などをサポートする。
- beangulpにない、「既存のファイルに新規の仕訳をmergeする」機能があるのは特にこだわった点だ。ただし、ちょっと遅いのが気になっていて、go-beancountでGoによる再実装を試みている。

