プレーンテキスト会計で財務管理を行うと決めたなら、それはすでに賢明な選択です。財務データは完全にコントロール可能な人間が読み取り可能なファイルに保存され、バージョン管理で追跡でき、ベンダーロックインからも解放されます。しかし、次なる疑問が生じます。どのツールを使うべきでしょうか?
Beancountとhledgerは、現在最も人気のある2つのプレーンテキスト会計(PTA)ツールです。どちらもオープンソースで、活発にメンテナンスされており、個人の予算管理から複雑な投資ポートフォリオまで、あらゆる処理が可能です。しかし、財務データの記録、検証、分析に対するアプローチは根本的に異なります。
このガイドでは、あなたのワークフロー、経験レベル、そして財務追跡のニーズに合った方を選べるよう、主な違いを解説します。
根本的な哲学:厳格か、柔軟か
Beancountとhledgerの最大の違いは機能ではなく、その考え方にあります。
Beancountは厳格な教師です。 ユーザーがデータ入力ミスをすることを前提としており、それを早期に発見するためのガードレールを備えています。すべての勘定科目は使用前に明示的にオープンする必要があります。すべてのトランザクションの貸借はゼロで一致しなければなりません。通貨は厳格な形式に従う必要があります。何か不自然な点があれば、Beancountはファイルが修正されるまで処理を拒否します。
hledgerは寛容な友人です。 よりリラックスした構文を採用しており、勘定科目の事前宣言を省略でき、バランス調整のための入力を推論することさえ可能です。最小限のセットアップで財務追跡を開始し、ニーズの変化に合わせて徐々に構造を追加していくことができます。
どちらのアプローチが客観的に優れているということはありません。エラーが蓄積してデバッグに何時間も費やす前に間違いを見つけたいなら、Beancountの厳格さは強力な機能になります。素早く開始したい、あるいは柔軟性を好むなら、hledgerの寛容さが利点となるでしょう。
構文とデータ形式
どちらのツールもトランザクションをプレーンテキストファイルに保存しますが、構文のルールには大きな違いがあります。
Beancountの構文
2026-03-15 * "Whole Foods" "Weekly groceries"
Expenses:Food:Groceries 85.42 USD
Liabilities:CreditCard:Visa主なルール:
- 日付はISO 8601形式(
YYYY-MM-DD)を使用 - 通貨は大文字のアルファベット(例:
USD,EUR)でなければならず、$や€などの記号は使用不可 - 勘定科目名はコロンで区切られた少なくとも2つの要素(例:
Expenses:Food)が必要 - 説明(摘要)は引用符で囲まれた文字列である必要がある
- すべての勘定科目は
openディレクティブで明示的にオープンする必要がある
hledgerの構文
2026-03-15 Whole Foods | Weekly groceries
expenses:food:groceries $85.42
liabilities:creditcard:visa主なルール:
- より柔軟な日付形式
$や€などの通貨記号が使用可能- 勘定科目名は小文字やより自由な形式が可能
- 説明に引用符は不要
- 勘定科目の事前宣言は不要
結論:Beancountの厳格な構文は、初期の手間はかかりますが曖昧さを排除します。hledgerの緩やかな構文は開始しやすいですが、一貫性を保つためにはより自己規律が求められます。
データの完全性と検証
ここでBeancountの真価が発揮されます。
残高照合
どちらのツールも、記録された残高が銀行明細と一致しているかを検証する残高照合(Balance Assertion)をサポートしています。しかし、その仕組みは異なります。
Beancountは、順序に依存しない日付ベースの残高照合を使用します。トランザクションファイルの順序を自由に入れ替えても、照合は正しく機能します。一方、hledgerの照合はファイル内の記述順序に依存するため、トランザクションを移動させると照合が壊れる可能性があります。
在庫追跡
投資を追跡する人にとって、これは非常に重要です。Beancountは厳格な在庫記帳を強制します。購入していない株式を売却することはできず、取得原価(コストベース)を正確に追跡します。これにより、キャピタルゲインの計算が現実と乖離してしまう、微妙ながら厄介なバグを防ぐことができます。
hledgerもコモディティやロットを扱えますが、強制力は弱くなります。柔軟性は高いですが、確定申告の時期まで気づかないようなミスを許容してしまう可能性も孕んでいます。
勘定科目のカテゴリ
Beancountでは、すべての勘定科目が5つのカテゴリ(Assets/資産、Liabilities/負債、Income/収益、Expenses/費用、Equity/純資産)のいずれかに属している必要があります。この制約により、貸借対照表や損益計算書を自動的に正しく生成できます。
hledgerでは、ルートカテゴリの制限なく任意の勘定科目階層を作成できます。これにより自由度は高まりますが、意味のある財務レポートを得るためには、手動で慣習に従う必要があります。
ユーザーインターフェースとレポート
Beancount + Fava
Beancountの際立った特徴は、Fava という洗練されたウェブインターフェースです。Favaは以下を提供します。
- インタラクティブなチャートとグラフ(純資産の推移、支出の内訳、収益vs費用)
- 支出カテゴリのツリーマップ可視化
- 勘定科目、タグ、期間、支払先による強力なフィルタリング
- カスタムレポート用のクエリ言語
- 元帳ファイル用の組み込みエディタ
Favaは、プレーンテキスト会計のエコシステムにおいて最高のUIであると広く認識されています。ダッシュボードやチャートを好む視覚的なタイプの人にとって、これはBeancountを選ぶ大きな理由になります。
hledgerのインターフェース
hledgerはマルチインターフェースのアプローチを採用しています:
- CLI: 数多くの組み込みコマンド(
balance、register、incomestatement、cashflowなど)を備えた豊富なコマンドラインレポート機能 - hledger-ui: 勘定科目や取引をインタラクティブに閲覧するためのターミナルベースのUI
- hledger-web: 基本的な閲覧とデータ入力のための、よりシンプルなウェブインターフェース
hledgerのCLIは、標準状態でBeancountよりも強力です。ターミナルを中心に活動し、高速でスクリプト実行可能なレポートが必要な場合、hledgerがその真価を発揮します。
パフォーマンス
hledgerはHaskellで記述されており、1秒間に約25,000件の取引を処理します。ほとんどの個人財務ユーザーにとって、どちらのツールも実質的に瞬時に動作します。しかし、複数のエンティティにわたる長年の取引など、大規模なデータセットを管理している場合、hledgerの圧倒的な処理速度が優位性をもたらします。
Beancount (v3) は、コアパーサーがC++で書き直され、オリジナルのPython実装よりもパフォーマンスが大幅に向上しました。一般的な個人利用や小規模ビジネスでの利用であれば、その差を感じることはないでしょう。
拡張性とプラグイン
Beancountのプラグイン
Beancountは、非常に強力なネイティブのPythonプラグインシステムを備えています。プラグインを使用すると、以下のことが可能になります:
- 取引の自動分割(例:共有経費)
- 定期的な取引の生成
- カスタムバリデーション(検証)ルールの適用
- 処理パイプライン内でのデータ変換
Pythonのエコシステムを利用できるため、プラグイン内で任意のPythonライブラリを活用できます。これにより、Beancountは複雑な財務シナリオに合わせて高度にカスタマイズ可能です。
hledgerの拡張機能
hledgerは以下を通じて拡張性を提供しています:
- 銀行明細の自動化のためのCSVインポートルール
- CLI出力を利用したカスタムレポートスクリプト
- 統合機能を構築するためのHTTP-JSON API
- Haskellベースのアドオンコマンド
hledgerのCSVインポートシステムは特に高く評価されています。CSVの列を勘定科目の記帳にマッピングするルールファイルにより、銀行明細のインポートの自動化が非常に明快になります。
導入と学習曲線
hledger:導入のハードルが低い
hledgerは一般的に開始するのがより簡単です:
- 単一のバイナリをインストールするだけ(Windowsを含む優れたクロスプラットフォーム対応)
- ファイルを作成してすぐに取引の記録を開始できる
- 勘定科目の宣言や厳格な命名規則に従う必要がない
- 包括的でよくメンテナンスされたドキュメント
- 初心者に優しいリソースが豊富なアクティブなコミュニティ
Beancount:より多くの設定、より厳格な構造
Beancountは初期設定により多くの手間を要します:
- PythonとBeancount(およびウェブインターフェース用のFava)のインストールが必要
- 使用する前に勘定科目の宣言を作成する必要がある
- 初日から厳格な構文規則に従う必要がある
- 5つの勘定科目カテゴリを学ぶ必要がある
その代わり、この先行投資は大きな利益をもたらします。適切に構造化されたBeancountの帳簿は、規模が大きくなっても保守、検証、監査が容易です。
コミュニティとエコシステム
両方のプロジェクトには、アクティブで協力的なコミュニティがあります:
- Beancount: 活発なメーリングリスト、サードパーティ製ツール(インポーター、プラグイン、Fava拡張機能)の成長中のエコシステム、そして強力なPython開発者コミュニティ
- hledger: 頻繁なリリース(概ね四半期ごと)、広範なドキュメント、活発なチャットチャネル、そしてより広いplaintextaccounting.orgコミュニティ
どちらのツールも、広範なプレーンテキスト会計ムーブメントの恩恵を受けており、リソース、インポーター、コミュニティの知見が共有されています。
ツール間の移行
一方のツールで始めて、後で切り替えたくなった場合、移行は可能ですが簡単ではありません:
- hledgerからBeancountへ:
hledger print -o tmp.beancountを開始点として使用し、その後、構文を調整します(勘定科目の宣言の追加、通貨形式の修正、勘定科目名の再構成など)。 - Beancountからhledgerへ:
bean-reportツールでエクスポートが可能ですが、通常は手動での修正が必要になります。
プレーンテキストという共通の哲学があるため、データがロックインされることはありません。たとえ手動のクリーンアップが必要だとしても、いつでもファイルを読み取って変換することができます。
クイック比較表
| 機能 | Beancount | hledger |
|---|---|---|
| 言語 | Python/C++ | Haskell |
| 構文の厳格さ | 厳格 | 柔軟 |
| 勘定科目の宣言 | 必須 | 任意 |
| 最良のUI | Fava (ウェブ) | CLI + TUI |
| 投資管理 | 非常に優れている | 良好 |
| プラグインシステム | Pythonプラグイン | スクリプト + API |
| CSVインポート | インポーター経由 | ビルトインルール |
| 学習曲線 | 高め | 低め |
| 残高照合 | 順序に依存しない | ファイルの順序に依存 |
| パフォーマンス | 高速 (v3) | 非常に高速 |
| Windowsサポート | 良好 | 非常に優れている |
どちらを選ぶべきか?
次のような場合はBeancountを選んでください:
- 財務状況を可視化するための美しいウェブダッシュボードが欲しい
- 投資を追跡し、正確な取得原価の取り扱いが必要
- エラーを早期に発見し、一貫性を強制するシステムを好む
- Pythonに慣れており、強力なプラグイン拡張性を活用したい
- 順序に依存しないファイル構成を重視する
次のような場合はhledgerを選んでください:
- 高速でスクリプト実行可能なレポートを使用して、ターミナルで作業することを好む
- 最小限の設定ですぐに始めたい
- 優れたWindowsサポートが必要
- 自分のスタイルに適応する柔軟な構文を好む
- 頻繁なリリースと活発なメンテナンスを求める
正直なところ: どちらのツールも素晴らしいものです。プレーンテキスト会計のコミュニティは、どちらのツールを使用していても歓迎してくれます。また、一方で学んだスキルはもう一方でもすぐに役立ちます。自分のワークフローに合う方を選び、1ヶ月試してみて、必要に応じて調整してください。
Beancount.ioで財務管理をシンプルに
Beancountでもhledgerでも、プレーンテキスト会計なら財務データを自分で完全にコントロールできます。ホスト型のFavaダッシュボード、銀行データの自動インポート、そしてインフラ管理不要でBeancountのパワーを活用したいなら、Beancount.ioがそれを簡単に実現します。無料で始めて、セットアップの手間なくプレーンテキスト会計を体験してください。