Beancount.io のコマンドラインツール bea を使って、1ヶ月分の帳簿を最初から最後まで締めます。帳簿を開設し、買い物を記録し、銀行のエクスポートをインポートし、明細残高 3206.81 USD に照合し、月次の損益計算書と貸借対照表を確認します。
月は2026年8月で、帳簿は当座預金に1,250 USD がある状態から始まります。ここで Python やクエリを書く必要はありません。
まだの場合は、まず bea をインストールしてください。Beancount CLI クイックスタート で Homebrew と uv について説明しています。ローカルの簿記には Beancount.io のアカウントは不要です。
空のディレクトリで作業してください。開始する前に、2つの入力ファイルをそのディレクトリにダウンロードします。
- first-month.csv — 第3週にインポートする銀行のエクスポートです。
- rules.toml — そのエクスポートが使用する分類ルールです。
すべてのコマンドで --file august/main.bean を使用して帳簿を指定するため、そのディレクトリから帳簿ディレクトリに移動せずにコマンドを実行できます。
第1週 — 帳簿を設定する
帳簿を作成し、テンプレートにない今月に必要な唯一の勘定科目を開設します。
bea --no-input init august --currency USD --date 2026-08-01 \
--opening-balance "Assets:Checking 1250"
bea --file august/main.bean add open --date 2026-08-01 --account Expenses:Transport:Fuel -c USDinit は14の勘定科目を含む august/main.bean を書き出します。これには Expenses:Uncategorized も含まれます。インポートで分類できない行はここに置かれます。
第2週 — 日々の買い物を記録する
買い物は発生した時点で記録します。日付はデフォルトで今日になるため、過去の履歴は --date を明示的に指定します。
bea --file august/main.bean add transaction "Coffee" --date 2026-08-03 \
--posting "Expenses:Dining 4.50" --posting "Assets:Checking"
bea --file august/main.bean add transaction "Weekly groceries" --date 2026-08-05 \
--posting "Expenses:Groceries 62.30" --posting "Assets:Checking"
bea --file august/main.bean add transaction --date 2026-08-07 --payee "Employer" \
--narration "August salary" --posting "Assets:Checking 2100" --posting "Income:Salary"各追加は、ファイルが置き換えられる前に帳簿全体に対してチェックされます。2番目の posting は空白のままにしておくと、Beancount が残高を一致させる金額を自動で埋めます。
第3週 — 銀行のエクスポートをインポートする
8月の残りのエクスポートには3行が含まれています。
Date,Payee,Amount
2026-08-10,Whole Foods,-28.40
2026-08-12,Shell,-35.00
2026-08-20,Mystery Shop,-9.99ルールファイルは、支払先を勘定科目に一致させます。ルールはファイルの順序で実行され、最初に一致したものが優先されます。
[[rule]]
match = "whole foods|trader joe|corner market"
account = "Expenses:Groceries"
[[rule]]
match = "shell|chevron|exxon"
account = "Expenses:Transport:Fuel"
[[rule]]
match = "salary|payroll|employer"
account = "Income:Salary"--csv でエクスポートの列をマッピングし、結果をプレビューしてから、--apply で再度実行して書き込みます。
bea --file august/main.bean import first-month.csv \
--csv date=Date,amount=Amount,payee=Payee --account Assets:Checking --rules rules.toml
bea --file august/main.bean import first-month.csv --applyプレビューでは、各行に対して一致したルールと、書き込まれる正確な差分が1行で表示されます。--apply を実行するまで、何も書き込まれません。
2番目のコマンドにフラグは不要です。列マッピング、勘定科目、ルールはそのファイルに対して記憶されます。書き込まれた各エントリには import-id 行が含まれるため、同じエクスポートを再度インポートしても、すでに帳簿にあるものはスキップされます。
2行はルールに一致します。3行目の Mystery Shop は一致しないため、フラグ ! が付いた Expenses:Uncategorized に転記されます。これは後で確認するためのキューです。
借方・貸方の列形式、その他の通貨、Python インポーターについては、CLI での銀行エクスポートのインポート を参照してください。
第4週 — 明細と照合する
8月の明細では、当座預金の残高が 3206.81 USD で締められています。あなたの帳簿では 3209.81 USD です。その差は、エクスポートで見落とされた 3.00 USD の銀行手数料です。
手数料を記録し、明細残高を検証します。Beancount は日の開始時に検証をチェックするため、9月1日の検証で8月のすべての取引をカバーできます。
bea --file august/main.bean add transaction "Bank fee" --date 2026-08-31 \
--posting "Expenses:Fees 3.00" --posting "Assets:Checking"
bea --file august/main.bean add balance --date 2026-09-01 --account Assets:Checking \
--amount "3206.81 USD"
bea --file august/main.bean list transaction --flag '!' --detailsキューには1件の取引、Mystery Shop の行が含まれています。--details でそのファイルと行番号が表示されます。
エディタでその行を開きます。Expenses:Uncategorized の posting を、それが属する勘定科目 — ここでは Expenses:Dining — に変更し、フラグを ! から * に変更して確認済みにします。import-id 行はそのまま残し、再インポートでもその行がスキップされるようにします。
次に、帳簿が正常に読み込まれ、キューが空であることを確認します。
bea --file august/main.bean check
bea --file august/main.bean list transaction --flag '!' --details正常な帳簿は終了コード 0 で終了します。検証の失敗や不明な勘定科目がある場合は、非ゼロの終了コードでリスト表示されます。キューには No transactions found. と表示されます。
月次レポートを確認する
bea --file august/main.bean report income-statement --time 2026-08
bea --file august/main.bean report balance-sheet
bea --file august/main.bean report income-statement --time month損益計算書は、2,100.00 USD の給与から 143.19 USD の費用を差し引き、純利益 1,956.81 USD となります。勘定科目残高は Beancount の符号で表示されるため、収入の行はマイナスになります。貸借対照表では当座預金が 3,206.81 USD となり、照合した明細と一致します。
--time 2026-08 でこのチュートリアルの月に固定されます。--time month は常に現在の月を意味し、帳簿が最新になったら使うことになるでしょう。
ここから先
- CLI での銀行エクスポートのインポート — 重複レビュー、他の列レイアウト、繰り返しインポートについて。
- bea での簿記の自動化 — JSON エンベロープ、終了コード、無人実行について。
- Beancount CLI リファレンス — すべてのコマンドとオプションについて。