メインコンテンツまでスキップ

Beancountで迅速かつ信頼性の高い月次決算を行うための10の実践的ステップ

· 約10分
Mike Thrift
Mike Thrift
Marketing Manager

台帳をプレーンテキストで管理していれば、月次決算は迅速かつ監査可能なものになります。スプレッドシートや電卓を叩いて慌てふためく必要はありません。このガイドでは、残高照合(balance assertions)、スマートなインポート、軽量なチェックを中心に、BeancountとそのウェブインターフェースであるFavaに最適化された、クリーンで再現可能なプロセスをまとめています。

スムーズな決算のためのチェックリスト:

2025-09-02-month-end-close

  1. 明細書を収集し、すべての生データをインポートする。
  2. 支払先、説明、メタデータを正規化する。
  3. すべての現金、銀行、クレジットカード口座を balance 表明で照合する。
  4. 振替や口座間の移動を整合させる。
  5. 投資商品の価格を更新し、評価額を確認する。
  6. 領収書や請求書などの証憑書類を台帳に添付または紐付ける。
  7. P&L(損益計算書)や差異分析のためにクエリやダッシュボードを実行する。
  8. 必要に応じて発生主義の修正仕訳や調整を行う。
  9. 自動チェック機能で台帳を検証する。
  10. コミット、タグ付けを行い、その月をアーカイブする。

1. 基本ルールの設定(そして再利用)

一貫性のある決算は、安定した基盤から始まります。勘定科目一覧(Chart of Accounts)や主要なBeancountオプションは、中央で宣言し、めったに変更しないようにすべきです。operating_currencydocuments の処理などのオプションを設定しておくことで、レポートやインポートが毎回予測通りに動作するようになります。

ヒント: オプションファイルは「インフラ」として扱ってください。ここを変更すると、数値の計算方法が変わる可能性があります。Gitで慎重にバージョン管理しましょう。


2. すべてをインポートする — 二度と手入力しない

データのインポートを自動化することは、決算作業をスピードアップさせる最大の要因です。Beancountの強力なインポートツールやコミュニティ製のインポーターを使用して、銀行のフィード、クレジットカードのCSV/OFXファイル、証券口座のデータ、給与明細などを取り込みましょう。

目標は、コマンド一つでインポートを実行し、レビューしてコミットするだけで済むバランスの取れた記帳を生成することです。これにより、エラーや遅延の主な原因となる手入力を排除できます。


3. 支払先とメタデータを事前に正規化する

クリーンなデータこそが、信頼できるデータです。検索、ルール、レポートの正確性を月ごとに維持できるよう、インポートプロセス中に支払先、摘要、タグを標準化しましょう。

Beancountのプラグインシステムを使用すると、ファイルの読み込み時に軽量な変換やバリデーションを追加できます。これは、独自の整合性チェックを適用したり、組み込みの noduplicates プラグインを使用して重複トランザクションが問題になる前にフラグを立てたりするのに最適です。


4. balance 表明による照合

明細書が存在するすべての口座(普通預金、定期預金、クレジットカード)について、Beancountの balance ディレクティブを使用して期末残高を表明します。このシンプルな一行により、照合作業は手動の目視確認から、正確で自動化されたテストへと変わります。

; 日の開始時点で残高が正確に 1234.56 USD であることを表明する
2025-09-01 balance Assets:Bank:Checking 1234.56 USD

残高は「日の開始時点」でチェックされるため、月末の明細書には「翌月の初日」の日付を使用するのが最も簡単です。Beancountが計算した残高が表明した数値と一致しない場合、正確なエラーメッセージと調査を開始すべき日付が表示されます。常に「真実のソース(取引データ)」を先に修正してください。無理やり残高を合わせるようなことは避けましょう。


5. 口座間振替の整合性を確認する

すべての振替が、取引の両側に現れていることを確認してください。例えば、普通預金口座からクレジットカードへの支払いは、両方の口座に反映されている必要があります。不一致な振替は、照合における典型的な悩みの種です。

pad ディレクティブは、最初にアカウントを設定する際の過去の開始残高を設定するために のみ 使用してください。これはセットアップのためのツールであり、月末の差異を修正するための照合用の杖ではありません。


6. 投資商品のポジションと価格を検証する

純資産を正確に把握するには、投資商品や外貨の最新の市場価格が必要です。Beancountの price ディレクティブを使用して、決算日時点のこれらの値を記録します。

2025-08-31 price VTI  290.14 USD
2025-08-31 price EUR 1.11 USD

多くのツールで、これらの価格を自動的に取得できます。価格を更新した後、貸借対照表や純資産レポートを再実行して、評価額の変化を確認しましょう。


7. 領収書と証憑書類を添付する

取引を証憑書類にリンクさせることで、クリーンな監査証跡を維持します。メインのBeancountファイルで documents オプションを使用して、領収書や請求書のアーカイブを指すように設定します。

option "documents" "/path/to/Finance/Documents"

ファイル名に日付(例:2025-08-13.vendor.receipt.pdf)を含めておけば、BeancountとFavaが自動的にそれらを見つけてリンクしてくれるため、どの取引からでもクリック一つで領収書を確認できるようになります。


8. FavaとBQLで月を振り返る

迅速なフィードバックループが重要です。Fava を使用して、財務状況を視覚的に確認しましょう。そのチャートやレポートは、カテゴリ別の支出の分析、収益トレンドの確認、異常値の発見に最適です。

より精密なチェックには、Beancount Query Language (BQL) を使用します。例えば、以下のクエリは2025年8月のすべての支出をランキング形式で表示します。

SELECT
account,
ROUND(SUM(position), 2) AS total
WHERE
date >= 2025-08-01 AND date < 2025-09-01
AND account ~ 'Expenses'
GROUP BY
account
ORDER BY
total DESC;

## 9\. 発生主義の仕訳と調整の記帳

発生主義会計を採用している場合は、月末の調整仕訳を明示的な日付のトランザクションとして記録します。これには、未払費用(未着の公共料金の請求書など)、前払費用の償却、または収益認識が含まれます。後で見直したときに理解しやすいよう、ナレーションには簡潔かつ十分な説明を記載してください。

---

## 10\. 検証、タグ付け、およびアーカイブ

月次処理を完了する前に、構造的な整合性を最終確認します。

```bash
bean-check your-ledger.beancount

このコマンドは、残高の不一致、未開設の勘定科目の参照、その他の一般的なエラーを検出します。フラグが立てられた箇所はすべて修正してください。

すべてが正しくなったら、Gitなどのバージョン管理システムに明確なメッセージと close-2025-08 のようなタグを付けて変更をコミットします。最後に、銀行明細をアーカイブし、その月を「クローズ(確定)」したとみなします。


カスタマイズ可能な簡易クローズスクリプト

これらのステップのほとんどは、シンプルなシェルスクリプトで自動化できます。これにより、月次クローズを単一の繰り返可能なコマンドに変換できます。

#!/usr/bin/env bash
set -euo pipefail

# 例: ./close.sh 2025-08
MONTH=${1:?Please provide a month in YYYY-MM format}
LEDGER=~/finance/ledger.beancount

# 1. 新規トランザクションのインポート
echo "Importing transactions for $MONTH..."
make import MONTH="$MONTH"

# 2. 月末日の市場価格を更新
PRICE_DATE=$(date -d "$MONTH-01 +1 month -1 day" +%F)
echo "Fetching prices for $PRICE_DATE..."
make prices DATE="$PRICE_DATE"

# 3. 元帳全体の検証
echo "Running bean-check..."
bean-check "$LEDGER"

# 4. 主要なレポート(経費内訳など)を生成
echo "Generating expense report for $MONTH..."
bean-query "$LEDGER" -f txt "
SELECT account, SUM(position)
WHERE date >= '${MONTH}-01' AND date < '${MONTH}-01' + 1 month
AND account ~ 'Expenses'
GROUP BY account ORDER BY SUM(position) DESC;
" > "reports/${MONTH}-expenses.txt"

# 5. Gitでコミットとクローズのタグ付け
echo "Committing and tagging the close..."
git -C ~/finance add .
git -C ~/finance commit -m "Close ${MONTH}"
git -C ~/finance tag "close-${MONTH}"

echo "Month ${MONTH} is closed and tagged."

なぜこの方法が有効なのか

このプロセスが迅速かつ信頼できるのは、いくつかの核となる原則に基づいているからです。

  • 目視ではなくアサーション: balance ディレクティブにより、照合が正確で自動化されたチェックに変わります。
  • 決定論的な入力: 自動インポーターと正規化されたメタデータにより、元帳の再現性と一貫性が保たれます。
  • 探索可能なデータ: FavaやBQL(Beancount Query Language)といった強力なツールにより、結果の検証や異常値の即座なドリルダウンが可能です。
  • 監査可能な変更: 調整はプレーンテキストのジャーナルエントリとして記録されるため、数ヶ月、数年後でもレビューや理解が容易です。

適切な月末処理の大部分は、手順(ロジスティクス)の確立です。Beancountを使えば、インポート、アサーション、価格取得、クエリ、コミットという短くスクリプト化可能な儀式に変えることができます。ワークフローを安定させることで、財務状況が複雑になっても、クローズ作業を迅速に保つことができます。