メインコンテンツへスキップ

Beancountとは:プレーンテキスト複式簿記

Beancountは、株式、暗号通貨、日常の帳簿のためのプレーンテキスト複式簿記です。それが何であり、なぜエンジニアが使うのかを説明します。

このガイドは、強力なオープンソースのプレーンテキスト会計ツールであるBeancountを使ったプレーンテキスト会計のベストプラクティスをまとめたものです。基礎となる哲学、基礎から応用までの構文、複雑な資産の実践的なケーススタディ、そして長期的な台帳管理の戦略を扱います。

パート1: 「なぜ」- スマートな簿記の基礎​

「どのように」に飛び込む前に、「なぜ」を理解することが重要です。効果的な簿記は個人の財務管理の基盤であり、財務的な明確さと自由への必要なステップです。

支出追跡を超えて: 財務的な明晰さへの道​

単純な支出追跡アプリは、お金がどこへ行ったかを教えてくれます。堅牢な会計システムはそれだけでなく、さらに多くを教えてくれます。純資産、キャッシュフロー、投資のパフォーマンスを含む、財務状況の全体像を提供します。主な目標は可観測性です — 自分の財務生活を明確かつデータ駆動型で理解することで、情報に基づいた意思決定を行い、リスクを評価し、引退などの長期的な目標に向かって取り組むことができます。

なぜ複式簿記なのか? バランスの取れたシステムの力​

単式簿記(単純な支出のリスト)とは異なり、複式簿記はすべての取引を少なくとも2つの勘定間の価値の流れとして記録します。その核心的な原則は、基本的な会計方程式です:

資産=負債+純資産(正味財産)\text{資産} = \text{負債} + \text{純資産(正味財産)}

このシステムは、帳簿が常にバランスが取れていることを保証し、エラーを劇的に減らします。貸借対照表(何を所有し、何を負っているか)や損益計算書(何を稼ぎ、何を使ったか)といった重要なレポートを生成することで、完全な財務像を提供します。

パート2: Beancount を始めよう​

Beancountは、プレーンテキスト会計のための強力なPythonベースのツールです。

Beancount.io で Fava を初めて見る​

Beancount.ioは、Beancountエンジンとモバイルアプリ(iOS、Android)およびウェブアプリを組み合わせた強力な環境を提供します — Favaは、台帳を可視化するための素晴らしいウェブベースのインターフェースです。インストールは不要です。このプラットフォームを使うと、台帳ファイル(例:main.bean)のテキストエディタと直接やり取りし、Favaが生成するレポートがリアルタイムで更新されるのを確認できます。

Favaは、あなたが書いたプレーンテキストをインタラクティブなチャート、財務諸表、フィルタリング可能な取引リストに変換し、財務レポートの明確なビューを提供します。

または、beaでターミナルから始める​

シェルから作業したい場合は、beaがBeancount.ioのコマンドラインです。アカウントは不要です:brew install bex-co/tap/beaまたはuv tool install beancount-ioでインストールすると、同じプレーンテキストファイルを作成、検証、クエリ、レポートします。CLIクイックスタートで数分で最初の台帳を作成でき、beaでの最初の1か月で月末処理を最初から最後まで完了できます。

5つの主要な勘定科目タイプ​

Beancountは5つのトップレベル勘定タイプを使用し、これらが台帳の構造を形成します:

勘定タイプ説明典型的な残高
Assets所有するもの(現金、銀行口座、投資、不動産)。正
Liabilities負っているもの(クレジットカード債務、ローン、住宅ローン)。負
Incomeお金が入ってくる源(給与、ボーナス、利息)。負
Expensesお金が出ていく先(食費、家賃、旅行、税金)。正
Equity純資産。初期残高に使用。負

Beancount の等式​

Beancountは、台帳全体のすべての記帳の合計がゼロに等しいという、独自バージョンの会計方程式を強制します:

資産+費用+負債+収益+純資産=0\text{資産} + \text{費用} + \text{負債} + \text{収益} + \text{純資産} = 0

これが、慣例によりIncome、Liabilities、Equity勘定が負の値を持つ理由です — それらはAssetsとExpensesを増加させる資金の_源泉_です。

パート3: Beancount の言語 - 中核となる構文​

Beancountのすべてのエントリは、日付で始まるディレクティブです。

勘定科目の定義 (open) と商品​

勘定を使用する前に、openディレクティブで宣言する必要があります。また、それが保有する通貨または「商品」をオプションで指定することもできます。

; YYYY-MM-DD open Account:Name [Commodity1, Commodity2, ...]
2020-01-01 open Assets:Bank:US:Chase:Checking      USD
2020-01-01 open Liabilities:CreditCard:US:Discover USD
2020-01-01 open Expenses:Food:Groceries
2020-01-01 open Income:Salary:Google

商品は実世界の通貨(例:USD、JPY)でも、定義する任意のカスタム単位(航空会社のマイル(MILES_UA)や株式ティッカー(HOOL)など)でもかまいません。

最初の取引の記録 (*)​

取引は最も一般的なエントリです。日付、フラグ(*は完全な取引、!は不完全な取引)、オプションの支払先、説明で始まります。それに続く各行(2スペースでインデント)は、勘定への「記帳」です。

; YYYY-MM-DD * "Payee" "Description"
;   Account1      Amount Commodity
;   Account2     -Amount Commodity
 
2024-07-28 * "Trader Joe's" "Weekly groceries"
  Expenses:Food:Groceries     125.50 USD
  Liabilities:CreditCard:US:Discover  -125.50 USD

便宜上、取引に記帳が2つしかない場合、2行目の金額を省略でき、Beancountが自動的に計算します。

2024-07-28 * "Trader Joe's" "Weekly groceries"
  Expenses:Food:Groceries     125.50 USD
  Liabilities:CreditCard:US:Discover

取引レベルのバランス: 日々の使用においてより重要なのは、個々の取引もそれぞれバランスが取れていなければならないことです — 単一の取引内のすべての記帳の合計はゼロに等しくなければなりません。取引のバランスが取れていない場合、Beancountは次のようなエラーを表示します:

Beancountエラーアラート

複数通貨取引の処理 (@ と @@)​

Beancountは多通貨会計に優れています。

  • @を使って単位あたりの換算価格を指定します。
  • @@を使って換算の総コストを指定します。
; Buying a flight in EUR with a USD card
2024-08-01 * "Lufthansa" "Flight to Berlin"
  Expenses:Travel:Flights      500.00 EUR @@ 545.00 USD  ; 500 EUR cost me 545 USD in total
  Liabilities:CreditCard:US:Discover  -545.00 USD

パート4: 正確性の確保 - 調整の技術​

正確な台帳を維持するための重要な実践は、定期的な照合です。これは、Beancount台帳の残高を金融機関からの公式明細書と比較することを含みます。

残高照合によるチェックの自動化 (balance)​

balanceディレクティブは、自動チェックのための主要なツールです。指定された日付に、ある勘定が特定の残高であったことを主張します。Beancountが計算した残高があなたのアサーションと一致しない場合、エラーを発生させます。これはエラーを素早く特定するのに非常に貴重です。

注: 残高アサーションは、指定された日の_始め_(その日の取引の前)の勘定の状態をチェックします。

; From your monthly credit card statement
2024-08-01 balance Liabilities:CreditCard:US:Discover  -1432.78 USD

関連書類のリンク (document)​

銀行明細書や領収書などの外部ファイルにリンクして、監査可能な記録を作成できます。Favaはこれらのリンクをクリック可能にします。

2024-08-01 document Liabilities:CreditCard:US:Discover "statements/discover-2024-07.pdf"

エラーの修正と残高の初期化​

台帳を開始するとき、または追跡できない不一致を見つけたときは、調整を行う必要があります。標準的な方法は、特別なEquity勘定を使用することです。

; Initializing a cash account when starting your ledger
2020-01-01 * "Initial Balance" "Setting up cash account"
  Assets:Cash:Wallet           200.00 USD
  Equity:Opening-Balances     -200.00 USD

Equity:Opening-Balances勘定は、未知または外部のソースから台帳に入る金額を保持します。

正確な不一致が重要でない簡単な修正には、padディレクティブが後続のbalanceアサーションを満たすように勘定の残高を自動的に調整し、差額を純資産勘定に記帳できます。これは慎重に使用してください — より大きな問題を隠す可能性があります。一般に明示的な調整の方が安全です。

パート5: 高度で現実的な取引パターン​

債務の追跡: 売掛金と買掛金の管理​

複式簿記は、あなたへの債務(Assets:Receivables)やあなたによる債務(Liabilities:Payable)を追跡するのに最適です。

例: グループディナーの$90をあなたが支払い、友人のボブが彼の$45の取り分をあなたに負っています。

  1. 最初の費用と売掛金を記録する:

    2024-08-05 * "Dinner Place" "Dinner with Bob"
      Expenses:Food:Restaurant          45.00 USD  ; Your share
      Assets:Receivables:Bob            45.00 USD  ; Bob owes you
      Assets:Bank:US:Chase:Checking    -90.00 USD
  2. ボブがあなたに返済するとき:

    2024-08-06 * "Bob" "Paid me back for dinner"
      Assets:Bank:US:Chase:Checking     45.00 USD
      Assets:Receivables:Bob           -45.00 USD

Assets:Receivables:Bob勘定はゼロになり、帳簿は完璧にバランスが取れています。

資産と費用: 自動車の購入と減価償却​

車のような大きな購入は単純な費用ではありません。時間とともに価値が失われる(減価償却)資産の取得です。

  1. 購入を資産として記録する:

    2023-01-15 * "Toyota Dealer" "Purchase of a new car"
      Assets:Car:ToyotaCamry         30000.00 USD
      Assets:Bank:US:Chase:Checking -30000.00 USD
  2. 年間の減価償却を記録する: 車が毎年$3,000価値が下がると推定するとします。年末に、これを費用として記録します。

    2023-12-31 * "Depreciation" "Annual car value depreciation"
      Expenses:Depreciation:Car      3000.00 USD
      Assets:Car:ToyotaCamry        -3000.00 USD

このエントリの後、Assets:Car:ToyotaCamry勘定は車の新しい価値($27,000)を正しく反映し、その年の使用コストを費用として適切に会計処理しました。

パート6: 詳細 - 複雑な現実世界の資産のモデリング​

ケーススタディ1: 不動産の会計処理​

家はしばしばあなたの最大の資産および負債です。そのモデリング方法を以下に示します。

  1. 勘定とカスタム商品を作成する:

    2022-01-01 commodity HOUSE_123MAIN
      name: "Property at 123 Main St"
    2022-01-01 open Assets:Property:Home:123Main        HOUSE_123MAIN
    2022-01-01 open Liabilities:Mortgage:HomeLoan       USD
    2022-01-01 open Expenses:Home:Interest
    2022-01-01 open Expenses:Home:PropertyTax
  2. 購入を記録する: $100kの頭金と$400kのローンで$500kの家を購入するとします。

    2022-03-15 * "Settlement Company" "Purchase of 123 Main St"
      Assets:Property:Home:123Main          1 HOUSE_123MAIN {500000.00 USD}
      Assets:Bank:DownPayment          -100000.00 USD
      Liabilities:Mortgage:HomeLoan    -400000.00 USD
  3. 毎月の住宅ローン支払いを記録する: 毎月の支払いは元本(負債を減少させる)と利息(費用)で構成されています。

    2022-04-01 * "Mortgage Bank" "Monthly Mortgage Payment"
      Liabilities:Mortgage:HomeLoan      800.00 USD   ; Principal
      Expenses:Home:Interest            1200.00 USD   ; Interest
      Assets:Bank:US:Chase:Checking    -2000.00 USD
  4. 価値上昇の追跡(未実現利益): 家の市場価値は変化します。公式の純資産に影響を与えずにこれを追跡するには(売却するまで利益は実現しないため)、「仮想」通貨を使ったpriceディレクティブを使用できます。

    サポートされている市場資産と通貨ペアについては、Live Pricesがホスト型台帳で評価額の相場を維持できます。個々の不動産については、以下の例のように、依然として自身の鑑定評価と日付付き価格が必要です。

    ; The purchase price is the real cost basis
    2022-03-15 price HOUSE_123MAIN   500000.00 USD
     
    ; An updated market estimate is an unrealized gain
    2024-01-01 price HOUSE_123MAIN   550000.00 USD.UNREALIZED

これにより、貸借対照表を不当に水増しすることなく、Favaのチャートで推定価値を確認できます。

住宅ローンの追跡、減価償却、不動産売却を含む実際の不動産サンプル台帳を探索してください:

新しいタブで Real Estate Example Ledger を開く

ケーススタディ2: 譲渡制限付き株式ユニット (RSU) の追跡​

RSUは一般的な形の持分報酬です。その会計処理には、初期付与、権利確定イベント、源泉徴収税の追跡が含まれます。

  1. 初期設定: 権利確定済み(HOOL)と未確定(HOOL.UNVEST)の株式の商品を、以降のエントリが触れるすべての勘定とともに作成します。これらをすべて事前に宣言することが、以下の2つの取引を単独でロードできるようにします。

    2021-01-01 commodity HOOL
    2021-01-01 commodity HOOL.UNVEST
    2021-01-01 open Assets:Brokerage:Etrade:HOOL          HOOL
    2021-01-01 open Assets:Grant:Unvested                 HOOL.UNVEST
    2021-01-01 open Income:Grant:Awards                   HOOL.UNVEST
    2021-01-01 open Expenses:Grant:Vested                 HOOL.UNVEST
    2021-01-01 open Income:Salary:Hooli:RSU               USD
    2021-01-01 open Expenses:Taxes:Federal                USD
    2021-01-01 open Expenses:Taxes:State                  USD
  2. 初期付与を記録する: この取引は、付与総額が未確定資産勘定に移動することを示します。まだ課税対象ではないため、エントリ全体が追跡商品HOOL.UNVESTで建てられています。

    2021-02-01 * "Hooli" "Initial RSU Grant"
      Assets:Grant:Unvested        1000 HOOL.UNVEST
      Income:Grant:Awards         -1000 HOOL.UNVEST
  3. 権利確定イベントを記録する: これが鍵となる取引です。株式が権利確定すると収益を認識し、雇用主が税金を支払うために株式を源泉徴収し、あなたが残りを保持します。100株が$150.00で権利確定すると仮定すると:

    • 総報酬:100 × $150.00 = $15,000.00
    • 税金のために源泉徴収される株式:40 × $150.00 = $6,000.00(連邦税 $4,800.00 + 州税 $1,200.00)
    • あなたが保持する株式:60 × $150.00 = $9,000.00の取得原価
    • あなたへの現金:$0.00 — 源泉徴収の全体が株式で支払われます

    これらの金額がエントリであり、それらは一致します:$6,000.00の税金と$9,000.00の保持株式は、正確に$15,000.00の収益です。

    2022-02-01 * "Hooli" "RSU Vesting Event"
      ; Ordinary income: 100 shares * $150.00
      Income:Salary:Hooli:RSU                   -15000.00 USD
      ; Tax withheld, funded by 40 of the 100 shares (40 * $150.00 = $6,000.00)
      Expenses:Taxes:Federal                      4800.00 USD
      Expenses:Taxes:State                        1200.00 USD
      ; The 60 shares you keep, at their $150.00 vesting-day basis
      Assets:Brokerage:Etrade:HOOL                  60 HOOL {150.00 USD}
      ; Retire the 100 unvested units the grant was tracking
      Assets:Grant:Unvested                       -100 HOOL.UNVEST
      Expenses:Grant:Vested                        100 HOOL.UNVEST

この単一のバランスの取れた取引がイベント全体をモデル化します:未確定の付与が減少し、収益が認識され、税金が源泉徴収され、60株の純権利確定株式が将来のキャピタルゲイン計算のための正しい取得原価で証券口座に現れます。

2つの詳細は、あなた自身の台帳にコピーする価値があります。第一に、源泉徴収を勘定ごとに書き出してください — 万能のバランス調整勘定に吸収させないでください。連邦税と州税の記帳が源泉徴収された株式の価値に合計しない場合、取引はバランスが取れず、Beancountがそれを通知します。第二に、記帳間に空行を残さないでください:空行は取引を終了させ、Beancountはそれに続く記帳に構文エラーを報告します。

雇用主が源泉徴収された株式を権利確定価格で取り戻すのではなく公開市場で売却する場合、売却は別の取引です — Assets:Brokerage:Etrade:HOOLの減少と現金の対比 — そして売却価格と$150.00の取得原価の差額は小さなキャピタルゲインまたはロスです。それは権利確定エントリから除外してください。

パート7: 台帳のプロジェクト管理​

台帳が成長するにつれ、整理が鍵になります。

バージョン管理 (Git) を使用したデータの保護​

台帳はテキストファイルなので、Gitでのバージョン管理に最適です。これにより、すべての変更の完全な履歴が得られ、誤った削除やミスから保護されます。警告: 財務データは非常に機密性が高いです。GitHub/GitLabなどのサービスのプライベートリポジトリを使用するか、自分でホストしてください。

タグ (#) とリンク (^) による整理​

Beancountは、勘定以外に取引をグループ化する2つの方法を提供します:

  • タグ(#): イベントやプロジェクトに使用します。たとえば、特定の旅行に関連するすべての取引をフィルタリングできます。 2024-07-20 * "Hotel" "Vienna" #trip-europe-2024
  • リンク(^): 現金引き出しと関連する銀行手数料など、異なる時点で発生する財務的に関連する取引を接続するために使用します。

ファイル構造化のためのスケーラブルな戦略 (include)​

単一の巨大なファイルは管理が困難です。includeディレクティブを使って台帳を複数のファイルに分割してください。 main.bean:

; Main ledger file
 
; Global options
option "title" "My Personal Ledger"
option "operating_currency" "USD"
 
; Include account declarations and other files
include "accounts.bean"
include "years/2023.bean"
include "years/2024.bean"
include "events/trip-europe-2024.bean"

優先順位に従った堅牢な整理戦略:

  1. イベント別: 主要で自己完結したイベント用に別のファイルを作成します(例:trip-europe-2024.bean)。
  2. カテゴリ/支払先別: 公共料金や給与など、非常に定期的で繰り返し発生する取引については、独自のファイルにグループ化します(例:recurring-rent.bean)。
  3. 勘定別: 特定の勘定に密接に結びついた取引(利息、手数料、クレジットカード支払い)については、勘定固有のファイルを検討します。
  4. 日付別: その他すべての一般的な取引については、年別(2024.bean)または月別(2024/07.bean)の単純な分割が効果的です。

パート8: 結論​

Beancountは急峻な学習曲線を提供しますが、あなたの財務データに対する比類のない力、柔軟性、制御でその努力に報います。複式簿記の原則と、Beancountが提供する実用的なツールを受け入れることで、単純な支出追跡から、完全で正確で洞察に満ちた個人財務管理システムへと移行できます。あなたの台帳は、過去を理解し未来を計画するための、永続的でプライベートで非常に貴重な資産になります。

Beancount.io を始めよう​

Beancount.ioは、テキストベースの取引記録を損益計算書、貸借対照表、試算表を含む包括的な財務諸表に変換するモダンなクラウドベースの財務管理プラットフォームです。プレーンテキストファイルの信頼性と強力な可視化ツールを組み合わせることで、Beancount.ioは投資パフォーマンスへの貴重な洞察を得ながら、財務生活を正確に制御するのに役立ちます。

Beancount.ioで財務の旅を始めましょう — 各ティアに含まれる内容については現在のプランと価格をご覧ください。

純資産トレンドチャート、勘定残高、AIアシスタントバーを表示するbeancount.io台帳ダッシュボード

ライブ台帳を探索する →

純利益チャートと収益および費用の内訳を含む、beancount.ioでのAppleの公開Beancount台帳の損益計算書

ライブ台帳を探索する →

純資産チャートと資産および負債の詳細を含む、beancount.ioでのAppleの公開Beancount台帳の貸借対照表

ライブ台帳を探索する →

出典: https://beancount.io/ja/docs/introduction-to-beancount