Beancountで請求書の作成と追跡
プレーンテキストテンプレート、繰り返し可能な ワークフロー、そして「まだ支払われていないのは誰?」という単一クエリ
請求書作成は、完了した仕事と待っている支払いの間に挟まれた面倒な作業に感じられることがあります。しかし、優れた請求書プロセスは健全なキャッシュフローの根幹です。請求書は二重の役割を果たします。クライアントに何をいつ支払うべきかを明確に伝えると同時に、会計システムに必要な確固たる事実を提供します。
専用の SaaS アプリは洗練された自動 PDF を送信できますが、月額料金がかかり、データがプロプライエタリなサイロにロックされがちです。Beancount を使った軽量なプレーンテキストアプローチは、強力な代替手段を提供します。各請求書を明確な会計エントリのセットに変換でき、バージョン管理、豊富なメタデータ、即時クエリのすべての利点を享受できます—サブスクリプションは不要です。
最低限必要な請求書(絶対に省いてはいけない項目)
帳簿に手を付ける前に、プロフェッショナルな請求書が必要です。フォーマットはシンプルでも、内容は正確でなければなりません。長年の中小企業の実務から借用したこれらの項目は交渉の余地がありません。
- 販売者情報: 事業者名と所在地。
- 顧客情報: 顧客名と(可能であれば)住所。
- 請求書番号: 再利用されない一意の連番 ID。
INV-045
はINV-044
の次です。 - 発行日・支払期日: 請求書の発行日と支払期日を明記。
- 明細項目: サービスまたは製品の明確な説明、数量、単価、合計金額。
- 小計・税金・合計: 計算式を示し、顧客が容易に追跡できるように。
- 任意の備考: 感謝の言葉、振込指示、顧客が提供した発注書番号など。
開始にあたって、これらすべての項目を含む編集可能なテンプレートを用意しました。スプレッドシート版は合計金額を自動計算します。
注: 請求書テンプレートは近日公開予定です!それまでの間は、上記項目を使って Google Docs、Word、Sheets、Excel、または任意の文書形式で独自に作成してください。
請求書を帳簿に記録する
クライアントに PDF 請求書を送付したら、Beancount に記録する必要があります。これは、収益が「発生した」時点で認識し、支払われた時点だけでなく、会計上重要なステップです。プロセスは 2 つの取引に分かれます。
1. 請求書を発行したとき:
総額を Income
勘定から Assets:AccountsReceivable
に移す取引を作成します。これにより帳簿上にデジタル IOU が生成されます。
; 2025‑07‑21 Invoice #045 Web design sprint for Acme Corp.
2025-07-21 * "Acme Corp" "INV-045 Web design sprint"
Assets:AccountsReceivable 3500.00 USD ; due:2025-08-04
Income:Design:Web
invoice_id: "INV-045"
contact_email: "ap@acme.example"
link: "docs/invoices/2025-07-21_Acme_INV-045.pdf"
ここでは AccountsReceivable
を借方、Income
勘定を貸方にしています。メタデータとして支払期日、固有の invoice_id
、送付した PDF への直接 link:
が含まれています。
2. クライアントが支払ったとき:
入金が銀行口座に届いたら、IOU を「決済」する第 2 の取引を記録します。AccountsReceivable
からチェック口座へ金額を移動します。
2025-08-01 * "Acme Corp" "Payment INV-045"
Assets:Bank:Checking 3500.00 USD
Assets:AccountsReceivable
invoice_id: "INV-045"
Assets:AccountsReceivable
の INV-045
の残高はゼロになり、帳簿は完全にバランスします。
PDF を添付:
link:
メタデータキーは、Beancount のウェブインターフェースである Fava と組み合わせると特に威力を発揮します。Fava は取引ビューにクリック可能なリンクを直接表示し、元文書がワンクリックで参照できます。このワークフローは 2016 年の機能要望で既に提案されていました(GitHub)。
未回収請求書を一覧表示するクエリ
それでは、まだ支払われていないのは誰でしょうか?このシステムなら、メールやスプレッドシートを探し回る必要はありません。シンプルなクエリ一つで済みます。
open-invoices.sql
という名前で以下を保存してください。
SELECT
meta('invoice_id') AS id,
payee,
narration,
date,
number(balance) AS outstanding
WHERE
account = "Assets:AccountsReceivable"
AND balance != 0
ORDER BY
date;
コマンドラインから実行します。
bean-query books.beancount open-invoices.sql
数秒で、未回収請求書の最新エイジングレポートが取得できます。請求書 ID、顧客、発行日、未払金額が一覧表示され、追加ソフトは不要です。
面倒な作業を自動化する
プレーンテキストの最大の魅力はスクリプト化です。このワークフローの手間のかかる部分を自動化できます。
- テンプレート + Pandoc = PDF: 請求書テンプレートを Markdown で管理し、Python スクリプトで変数(顧客名、明細、請求書番号)を埋め込み、コマンドラインツール Pandoc で即座にプロフェッショナルな PDF に変換。
- Git プレコミットフック: Ledger を Git 管理している場合、シンプルなプレコミットフックで保存前にチェックを実行。新しい
invoice_id
が一意であるか、取引の貸借がゼロになるか、link:
で参照したファイルが実在するかを検証。 - Cron ジョブ: 定期タスク(cron)で
open-invoices.sql
クエリを毎晩実行し、サマリーをメール送信。毎朝、誰にリマインドが必要かが一目で分かります。
現実的な注意点
Beancount は会計ツールであり、請求書 サービス ではありません。クライアントへの支払リマインダー送信やクレジットカード決済の自動処理は行いません。ワークフローは次の通りです。好きな方法(上記テンプレートなど)で請求書を作成・送付し、帳簿にエントリを記録します。
フリーランサーや小規模事業者にとって、この手作業は、完全に所有・管理できる、監査可能で無料の会計システムを手に入れるための小さな代価です(beancount.io)。
次のステップ
請求書管理を自分の手に取り戻す準備はできましたか?以下の手順で始めましょう。
- テンプレートをダウンロードし、次の実際の請求書を作成。連番の請求書番号を必ず使用。
- 送付した PDF を
docs/invoices/
などの専用フォルダに保存し、Beancount 取引のlink:
メタデータで参照。 open-invoices.sql
クエリを保存し、週次の財務レビュー時に実行する習慣をつける。
プレーンテキスト会計は、洗練さやコントロールを犠牲にするものではありません。データベースが grep
可能になるだけです。シンプルなテンプレートと上記スニペットで、支払いをより早く受け取り、帳簿を完璧に保ちましょう。