コミュニティショーケース : 実世界の Beancount セットアップ
実世界の Beancount セットアップ
イントロダクション
Beancount は汎用性の高いプレーンテキスト会計システムであり、ユーザーはそれをさまざまな実世界のニーズに合わせて形成してきました。このコミュニティショーケースでは、フリーランサーや中小企業の経営者から、個人のファイナンス愛好家まで、さまざまな人々が Beancount の会計ワークフローをどのように構築し、使用しているかを示す匿名化された例を紹介します。これらの例では、メタデータによるトランザクションのタグ付け、カスタムスクリプトによる台帳更新の自動化、複数通貨の処理、予算編成と予測、およびプラグインまたは統合(Fava Webインターフェイスなど)による Beancount の拡張などの創造的なプラクティスに焦点を当てています。目標は、Beancount の柔軟なシステムで何が可能かについて、会計士、開発者、および金融に精通したユーザーにインスピレーションを与え、情報を提供することです。
Fava インターフェイスの例 : 多くの Beancount ユーザーは、財務を可視化するために、オープンソースの Web ダッシュボードである Fava を利用しています。Fava は、Beancount の台帳をインタラクティブなレポートやチャートに変換できます。たとえば、上記のスクリーンショットは、カテゴリ別の収入と支出の内訳を示す 損益計算書 のツリーマップを示しており、お金がどこから来てどこに行くのかを簡単に把握できます。ユーザーは、時間、勘定科目、またはタグでこのビューをフィルタリングして、特定のプロジェクトまたは期間を掘り下げることができます。このような視覚化により、プレーンテキストデータへのアクセスが容易になり、ユーザーは傾向と異常を一目で把握できます。
各 Beancount セットアップは一意ですが 、共通のテーマが浮かび上がってきます。以下では、フリーランサー、中小企業の経営者、個人のファイナンスパワーユーザーの 3 つのシナリオを掘り下げて、彼らがどのように勘定科目を整理し、Beancount の機能を活用しているかを見ていきます。個人的な詳細はすべて削除または一般化されており、テクニックと構成のみに焦点を当てています。
フリーランサー : プロジェクトのタグ付けと請求書追跡
最初の例は、フリーランスのコンサルタントで、Beancount をビジネスファイナンスのバックボーンとして使用しています。このフリーランサーの台帳は、プロジェクトごとの収入と支出を追跡し、複数のクライアントの請求書を管理するように構成されています。彼らは、クライアントごとに資産の売掛金 (A/R) のための専用の勘定科目を設定しており、誰が何をいくら借りているかを区別するのに役立っています。プロジェクトを完了してクライアントに請求書を発行すると、クライアントの A/R 勘定科目を借方記入し、収入勘定科目を貸方記入するトランザクションを記録します。たとえば、新しい請求書は次のように記録されます。
2025-08-01 * "プロジェクト X 完了" ^INV-0001
Assets:AccountsReceivable:ClientA 5,000 USD
Income:Consulting -5,000 USD
ここで ^INV-0001
の表記は、このトランザクションに請求書番号でタグを付けるために使用される リンク (組み込みの Beancount メタデータ機能)です。クライアントがその請求書の一部または全部を支払うと、支払いトランザクションには同じ ^INV-0001
リンクが含まれ、2 つのエントリが結び付けられます。このリンクにより、支払いを特定の請求書に割り当て、未払い残高を確認することが容易になります。あるコミュニティメンバーが説明したように、このようなタグまたはリンクを使用して、請求書エントリと支払いエントリの両方で、一部支払い(たとえば、30 ドルの請求書に対する 20 ドルの支払い)を示すことができます。その請求書リンクについて台帳をクエリすることにより、フリーランサーは請求書の支払いが完了した金額と未払い残高を即座に確認できます。
リンクに加えて、フリーランサーは分類に タグ を多用しています。Beancount のタグは、後でフィルタリングするためにトランザクションをマークできる #
で始まるラベルです。このユーザーは、クライアントに請求可能な各経費にプロジェクトのコード(#ProjectX
など)でタグを付け、払い戻し可能な経費に #Reimbursable
でタグを付けます。たとえば、クライアントプロジェクトの航空券を購入する場合、経費エントリには #ProjectX #Reimbursable
が含まれる場合があります。このプラクティスにより、タグでフィルタリングして、プロジェクトまたはクライアントごとにレポートを生成できます。プロジェクトの後、フリーランサーはクエリを実行して、そのプロジェクトのすべての #Reimbursable
経費を一覧表示し、それぞれについてクライアントに請求することを確認できます。ある Beancount ユーザーは、出張経費にタグを付けると、払い戻しされなかった経費を把握するのに役立ったと指摘しました。理想的には、クライアントからのすべての払い戻しを受け取ると、出張の経費は 0 ドルになります。これは、タグ付けが Beancount のク エリ機能と組み合わさることで、請求可能な経費を管理するフリーランサーに特別な監視レイヤーを提供する方法を示しています。
未払い残高の状態を管理するために、フリーランサーは 保留中の売掛金 の特別な規則を使用しています。まだ全額支払われていない請求書トランザクションには、#UNRESOLVED
タグを適用します。Beancount (および Fava) はこのタグを強制しませんが、決済を待機しているトランザクションをマークするコミュニティによって確立されたパターンです。たとえば、クライアント A が 5,000 ドル全額を支払うまで、上記の請求書トランザクションには #UNRESOLVED
が含まれます。そのタグでフィルタリングすることにより、フリーランサーはいつでもすべての未払い請求書を一覧表示できます。支払いを受領して適用すると (対応する A/R トランザクションが入力されます)、#UNRESOLVED
タグを削除または無視すると、そのクライアントの売掛金勘定科目の残高はゼロになります。このシステムにより、請求書が「見過ごされる」ことがなくなります。これは基本的に、プレーンテキストで実行されるエージングレポートです。A/R がゼロ以外のままで、未解決のタグが付いている場合は、注意が必要です。
フリーランサーは複数の支払い方法や複数の通貨を扱うことが多いため、Beancount のセットアップはそれらをシームレスに対応しています。この例では、コンサルタントは一部のクライアントに USD で請求し、他のクライアントに EUR で請求する場合があります。複数通貨の処理 は Beancount では簡単です。どの勘定科目も複数のコモディティ (通貨はコモディティとして扱われます) を保持できます。フリーランサーは、通貨ごとに個別の補助勘定科目を保持するか (たとえば、Assets:AccountsReceivable:ClientA:EUR
対 ...:USD
)、または同じ勘定科目で適切な通貨でトランザクションを転記することができます。Beancount は、通貨ごとの残高を自動的に追跡します。あるユーザーは、「Beancount は、USD であろうとティッカーシンボルであろうと、任意の通貨で数量を追跡できるのが素晴らしい」と強調しました。フリーランサーは、レポート用に通貨を換算する必要がある場合は常に、price
ディレクティブで為替レートを記録することにより、これを利用しています。定期的な為替レートまたは市場価格を入力すると、自国通貨に換算された収入レポートを生成できます。
最後に、このフリーランサーは Beancount の台帳を実用的なツールと統合して、ワークフローを効率化しています。たとえば、各請求書の PDF コピーを ドキュメントメタデータ を使用して台帳に添付します。一般的な請求書支払いエントリは次のようになります。
2025-08-30 * "ClientA" "INV-0001 の支払い" ^INV-0001
Assets:Bank:Checking 5,000 USD
Assets:AccountsReceivable:ClientA -5,000 USD
document: "Invoices/ClientA/INV-0001.pdf"
Beancount の document
ディレクティブまたはメタデータを使用すると、エントリにファイルを関連付けることができ、Fava はこれらの添付ファイルのハイパーリンクを表示します。これは、フリーランサー (またはその会計士) が台帳レポートから直接クリックして元の請求書 PDF を表示し、バックアップドキュメントへの簡単なアクセスを保証できることを意味します。フリーランサーは、Fava のレポートを使用してビジネスを監視します。損益計算書または貸借対照表をクライアントでフィルタリングすることにより、クライアントごとの収益性を確認し、すべてのプロジェクトが支払われていることを確認できます。要約すると、このフリーランサーの Beancount システムは、プロジェクトベースの会計を管理するためのタグ付けとリンクの多用を示しています。プレーンテキスト台帳を堅牢なフリーランス会計ツールに変え、プロジェクトの経費、複数通貨の収入、請求書のステータスを明確に可視化します。
フリーランサーのセットアップの主要なプラクティス : プロジェクトまたは目的ごとにトランザクションをグループ化するためにタグを使用する、請求書と支払いを一意の ID でリンクする、未払いの売掛金を #UNRESOLVED
タグでマークする、参照用に請求書ドキュメントを台帳エントリに添付する、および Beancount の複数通貨サポートを活用して、手間をかけずに海外のクライアントに請求する。これらはすべて、プレーンテキストエントリといくつかのヘルパーツールで実現され、Beancount のメタデータの力を示しています。
中小企業 : 自動化と複数通貨会計
次に、中小企業の経営者(特にスタートアップの創業者)で、会社の帳簿を実行するために Beancount を採用した人を見ていきます。中小企業はフリーランサーと同様のニーズ (請求書、経費、複数通貨) を持っていますが、多くの場合、規模が大きく、自動化、一貫性、コラボレーションがより重視されます。この場合、創業者は技術に精通しており、手作業による簿記を最小限に抑えるために、高度に自動化された Beancount ワークフローを構築しました。QuickBooks などの従来の会計ソフトウェアを評価した後、データの完全な制御を維持するために Beancount のプレーンテキストアプローチを選択しました。数年にわたり、簿記プロセスの 95% を自動化するためのカスタムツールを反復的に開発しました。
自動インポートと調整 : 最初の課題の 1 つは、さまざまなソース (銀行口座、クレジットカード、決済処理業者) からのトランザクションを台帳にインポートすることでした。各トランザクションを入力する代わりに、このユーザーは インポートスクリプト を設定して、データを取得し、Beancount 形式に変換しました。各金融機関の CSV または API 形式用にカスタム Python インポーターを作成し、1 つのコマンドで新しいトランザクションをプルして台帳に追加できるようにしました。たとえば、Beancount の bean-extract
フレームワークを使用すると、創業者はスクリプトを実行して、新しいステートメントのダウンロードフォルダをスキャンし、それらを Beancount エントリとして出力できます。別のユーザーである Rhyd Lewis は、各銀行に個別のインポーター スクリプトがあり、シンプルなコマンド (Justfile を使用) でそれらを呼び出して台帳を更新できる同様のセットアップについて説明しました。私たちの中小企業の経営者も同様のことを行っています。すべての銀行取 引、クレジットカードの利用、さらには PayPal または Stripe のトランザクションまでが自動的に取得され、適切な勘定科目で分類されて帳簿に追加されます。
これらのエントリが自動的に追加された場合でもデータの整合性を確保するために、Beancount の検証ツールとプラグイン も使用します。たとえば、同じトランザクションを誤って 2 回インポートするのを防ぐために、beancount.plugins.noduplicates
プラグインが有効になっており、beancount.plugins.nounused
はエントリのない勘定科目にフラグを立てます (古い勘定科目をクリーンアップするのに役立ちます)。創業者はまた、フォーマッタ (bean-format
やコミュニティツール beancount-black など) を使用して、台帳ファイルのスタイルを一貫して維持します。多くの自動編集を行う場合、統一されたスタイルを使用すると、差分と監査が容易になるため、これは重要です。実際、創業者は台帳を Git リポジトリに保持し、台帳の更新をコードの変更のように扱います。インポートされた新しいトランザクションの各バッチは Git コミットになり、差分を確認して何が変更されたかを確認できます。あるスクリーンショットでは、「Costco」のクレジットカードトランザクションが、手動操作なしで台帳内で保留状態からクリア状態に移行する Git 履歴を示しています。バージョン管理は監査証跡を提供します。トランザクションが追加または変更された正確な時期を確認し、何かが誤ってインポートされた場合は変更を元に戻すこともできます。これは、ソフトウェア開発のベストプラクティス (ソース管理など) を会計記録に取り入 れた優れた例です。
複数通貨と国際取引 : 中小企業は、多くの場合、複数の通貨で取引を行います。たとえば、スタートアップは USD で経費が発生するだけでなく、EUR で支払いを受けたり、GBP の銀行口座を保持したりする場合があります。私たちのショーケース企業は、Beancount の複数通貨機能を使用して、これらすべてを 1 つの台帳に統合します。一般的なアプローチの 1 つとして、通貨ごとに個別の勘定科目 (たとえば、Assets:Bank:Checking:USD
と Assets:Bank:Checking:EUR
) を開設しました。ただし、異なる通貨が勘定科目を共有している場合でも、Beancount は各通貨の残高を個別に追跡し、トランザクションが通貨ごとにバランスが取れていることを要求します。創業者は、定期的に評価レポートを実行して、会社の総残高を基本通貨に換算して確認します。Beancount は価格検索をサポートしているため、bean-price
ツールまたはプラグインを使用して、為替レート (および投資の株価) の毎日の価格フィードを設定しました。その結果、いつでも最新のレートで換算された EUR 口座を含む USD で貸借対照表を生成できます。コミュニティメンバーは、台帳形式の会計で複数の通貨を処理するのは簡単だと指摘しています。必要な通貨でトランザクションを追加し、必要に応じて為替レートを記録するだけです。たとえば、あるユーザーは、Beancount で通貨換算を管理する方法として、USD から EUR、CAD への中間勘定科目による換算の例を共有しました。今回の場合、中小企業は必ずしもトランザクションで通貨を換算するわけではありません (元の通貨で保持します) が、レポートを使用して統合します。この柔軟性は、スタートアップがグローバルに拡大するにつれて非常に重要になっています。
カスタムスクリプトと拡張機能 : 創業者が求めるすべてのものがすぐに利用できるわけではなかったので、カスタムプラグインで Beancount を拡張しました。時間をかけて、パーサーライブラリ、フォーマットツール、およびルールベースのトランザクションインポーターを作成し、これらの多くをオープンソースパッケージとしてリリースしました。たとえば、YAML 構成を使用してトランザクションを自動的に分類する ルールベースのインポートエンジン を構築しました。この構成のスニペットは、特定の支払人または説明 (「Comcast」や「PG&E」など) が特定の経費勘定科目と説明にどのようにマッピングされるかを示しており、銀行フィードにそれらが表示されると、手動で編集することなく、正しい Beancount エントリが生成されます。これは基本的に、簿記ルール (公共料金、サブスクリプションなど) をその場で適用するカスタム自動化です。別のプラグインは、台帳が常にバランスが取れており、フォーマットされていることを保証します。これらのツールはすべて、新しいデータが取り込まれるたびに、創業者のワークフローの一部として実行されます。その結果、最小限の介入で「自動的に更新される」台帳が作成され、自動化に夢中な開発者として「純粋な喜び」をもたらすと創業者は言います。
セキュリティとアクセシビリティも懸念事項でした。創業者は、財務チーム (および監督者として機能する配偶者さえも) が帳簿を簡単に閲覧できるようにしたい と考えていました。このために、クラウドに Fava のプライベートデプロイメントを設定しました。新しい台帳コミットをプライベート Git リポジトリにプッシュするたびに、CI パイプライン (GitHub Actions と AWS Elastic Beanstalk を使用) は更新された Fava インスタンスをデプロイします。Web インターフェイスはパスワードで保護されているため (基本的な認証を備えた Nginx プロキシを使用)、承認された人だけが表示できます。これにより、最新の財務諸表は、ローカルに何もインストールしなくても、ブラウザダッシュボードから常に利用できます。以下のアーキテクチャ図は、このセットアップを示しています。Beancount ファイルと必要な構成は、Fava とともに Docker イメージにバンドルされ、AWS で提供され、Cloudflare がセキュリティのために前面に配置されます。
クラウドでの Beancount の自動化 : この図は、Beancount 台帳 + Fava のデプロイメントパイプラインを示しています。ユーザーは台帳ファイルをローカルで更新し、Git にプッシュします。Docker コンテナ (認証用の Fava と Nginx を含む) が構築され、AWS Beanstalk サーバーにデプロイされ、Cloudflare がプロキシとして機能します。その結果、中小企業の財務データにどこからでも (所有者またはチームによって) リアルタイムでアクセスできる安全な Web ポータル が実現します。この高度なセットアップは、中小企業が Beancount を最新のクラウドツールと統合して、データ所有権を放棄することなく利便性を実現する方法を示しています。
日常的な使用では、中小企業の経営者はデータ入力ではなく 例外処理 に重点を置いています 。毎月、自動的にインポートされたトランザクション (Git の差分または Fava のジャーナルビューを使用) を簡単に確認して、未分類または誤ったエントリを把握します。また、Beancount の残高アサーション を使用して勘定科目を調整します。たとえば、6 月のすべてのトランザクションを入力した後、銀行口座の期末残高がステートメントと一致することを確認するために残高チェックを追加する場合があります。そうでない場合、Beancount はエラーを発生させ、何か不足しているか、誤って入力されていることを示します。これにより、帳簿の正確性が維持されます。
中小企業のセットアップの主要なプラクティス : カスタムインポーターとスクリプトによる高度な自動化 (台帳を「95% 自動」にする)、監査証跡とコラボレーションのためのバージョン管理の使用、評価のための価格フィードによる複数通貨会計、および財務レポートへの簡単で共有可能なアクセスのための Fava のデプロイメント。中小企業のシナリオは、エンジニアリングの努力によって Beancount がどこまで進むことができるかを示しています。透明性と柔軟性を維持しながら、会計をほぼ自動化されたパイプラインに変えています。プログラマーでなくても、コミュニティプラグイン (フォーマット、重複検出など) を使用し、頻繁なレビューとバックアップを推奨するプレーンテキストワークフローを採用することで、これらの利点の多くを実現できます。