Beancount の技術的優位性:Ledger、hledger、そして GnuCash と比較
· 約8分
個人向け会計システムを選ぶ際には、パフォーマンス、データ構造、拡張性のトレードオフが存在します。エンジニアや技術志向のユーザーにとっては、最も堅牢で予測可能、かつプログラム可能な基盤を提供するシステムが選択肢となります。
詳細な比較レポートに基づき、Beancount とその代表的なオープンソース競合製品である Ledger‑CLI、hledger、GnuCash の技術的側面を分析します。
スピードとパフォーマンス:定量ベンチマーク 🚀
真剣に扱うデータセットにとって、パフォーマンスは譲れない要件です。Beancount は数十年分の取引データを速度を犠牲にせずに処理できるよう設計されています。Python(v2)で実装されているにも関わらず、極めて最適化されたパーサは驚くほど効率的です。
- Beancount: 実運用では 数十万件の取引を約 2 秒で 読み込み・処理できることが確認されています。メモリ使用量も控えめで、10 万件の取引をパースする際は数十 MB の RAM しか使用しません。
- 1M 取引ストレステスト: 1 百万件の取引、1,000 件の勘定、1 百万件の価格エントリからなる合成元帳でベンチマークを実施し、アーキテクチャ上の大きな差異が明らかになりました。
- hledger(Haskell): 完全なパースとレポート生成に 80.2 秒、12,465 件/秒の処理速度で、メモリは 2.58 GB を使用。
- Ledger‑CLI(C++): 40 分でプロセスが強制終了。高度に複雑な元帳でのメモリ・CPU 使用量が過剰になる既知のリグレッションが原因と推測されます。
- Beancount: 本テストには含まれていませんが、既存の性能曲線から同規模のタスクでも十分に対応できると予想さ れます。さらに、C++ コアと Python API を備えた Beancount v3 がリリースされれば、スループットはさらに 10 倍規模で向上すると見込まれます。
- GnuCash(C/Scheme): GUI アプリケーションとして全データをメモリにロードするため、サイズが増えると顕著に遅延します。50 MB の XML ファイル(100k 超の取引) のオープンに 77 秒、SQLite バックエンドに切り替えても 55 秒 にしか改善しません。
結論: Beancount は予測可能にスケールする卓越したパフォーマンスを提供し、Ledger のような性能の壁や GnuCash の UI 依存遅延を回避します。
データアーキテクチャ:プレーンテキスト vs. 不透明データベース 📄
データの保存方式は、透明性・可搬性・耐久性を決定します。Beancount は人間が読めるプレーンテキスト形式を採用しており、技術ユーザーにとって最適です。
- コンパクトかつ効率的: 10 万件の取引を含む Beancount ファイルは 8.8 MB に収まります。Ledger の同等ファイル(約 10 MB)よりも小さいのは、取引の最終バランス金額を暗黙的に推論できる構文が冗長性を削減しているためです。