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

Beancount.io のご紹介

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

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

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

経費追跡を超えて:財務の明確さへの道

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

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

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

資産=負債+資本(純資産)\text{資産} = \text{負債} + \text{資本(純資産)}

このシステムにより、帳簿が常にバランスが取れ、エラーが大幅に削減されます。貸借対照表(あなたが所有するものと負っているもの)や損益計算書(あなたが稼いだものと費やしたもの)などの必須レポートを生成することにより、完全な財務状況を提供します。

パート 2: Beancount を始める

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

Beancount.io での Fava による最初の外観

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

Fava は、あなたが書いたプレーンテキストをインタラクティブなチャート、財務諸表、およびフィルタリング可能なトランザクションリストに変え、財務レポートを明確に表示します。

5 つのコアアカウントタイプ

Beancount は、台帳の構造を形成する 5 つのトップレベルのアカウントタイプを使用します。

アカウントタイプ説明一般的な残高
Assetsあなたが所有するもの(現金、銀行口座、投資、不動産)。プラス
Liabilitiesあなたが借りているもの(クレジットカードの借金、ローン、住宅ローン)。マイナス
Incomeお金の出所(給与、ボーナス、利息)。マイナス
Expensesお金の行き先(食料、家賃、旅行、税金)。プラス
Equityあなたの純資産。初期残高に使用されます。マイナス

Beancount の方程式

Beancount は、台帳全体のすべての転記の合計がゼロになる独自の会計方程式を適用します。

資産+費用+負債+収入+資本=0\text{資産} + \text{費用} + \text{負債} + \text{収入} + \text{資本} = 0

これは、慣例により、IncomeLiabilities、および Equity アカウントが負の値を保持する理由です。これらは、AssetsExpenses を増加させる資金の源泉です。

パート 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

商品は、現実世界の通貨(例:USDJPY)または、航空会社のマイレージ(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

トランザクションレベルのバランス: 日常の使用でより重要なのは、個々のトランザクションもバランスが取れている必要があることです。1 つのトランザクション内のすべての転記の合計はゼロでなければなりません。トランザクションがバランスが取れていない場合、Beancount は次のようなエラーを表示します。

Beancount エラーアラート

複数通貨トランザクションの処理(@ および @@

Beancount は、複数通貨会計に優れています。

  • @ を使用して、1 ユニットあたりの換算価格を指定します。
  • @@ を使用して、換算の総コストを指定します。
; 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支払い、友達のボブは彼の90 支払い、友達のボブは彼の 45 の分け前をあなたに支払う義務があります。

  1. 初期費用と売掛金を記録します:

    2024-08-05 * "Dinner Place" "Dinner with Bob"
    Expenses:Food:Restaurant 45.00 USD ; あなたの分け前
    Assets:Receivables:Bob 45.00 USD ; ボブはあなたに借りている
    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 アカウントはゼロになり、帳簿は完全にバランスが取れています。

資産 vs 費用: 車の購入と減価償却

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

  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. 購入を記録します: 500,000の家を500,000 の家を 100,000 の頭金と $400,000 のローンで購入するとします。

    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 ; 元金
    Expenses:Home:Interest 1200.00 USD ; 利息
    Assets:Bank:US:Chase:Checking -2000.00 USD
  4. 評価額の追跡(未実現利益): 家の市場価値は変動します。公式の純資産に影響を与えずにこれを追跡するために(利益は販売されるまで実現されないため)、「仮想」通貨で価格ディレクティブを使用できます。

    ; 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 のチャートで推定値を確認できます。

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

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

  1. 初期設定: 権利確定済み(HOOL)および権利未確定(HOOL.UNVEST)の株式の商品を、必要なアカウントとともに作成します。

    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:Salary:Hooli:RSU
    2021-01-01 open Expenses:Taxes:Federal
  2. 最初の付与を記録します: このトランザクションは、未確定資産アカウントに移動する合計付与を示しています。

    2021-02-01 * "Hooli" "Initial RSU Grant"
    Assets:Grant:Unvested 1000 HOOL.UNVEST
    Income:Grant:Awards -1000 HOOL.UNVEST
  3. 権利確定イベントを記録します: これはキーとなるトランザクションです。株式が権利確定すると、収入を認識し、税金を支払い(多くの場合、一部の株式を売却することによって)、正味株式を受け取ります。100 株が $150/株で権利確定すると仮定します。

    2022-02-01 * "Hooli" "RSU Vesting Event"
    ; Recognize total income of 100 * $150 = $15,000
    Income:Salary:Hooli:RSU -15000.00 USD

    ; Show taxes paid from this income
    Expenses:Taxes:Federal 4000.00 USD
    Expenses:Taxes:State 1000.00 USD

    ; You receive the net shares (assume 60 shares) at their cost basis
    Assets:Brokerage:Etrade:HOOL 60 HOOL {150.00 USD}

    ; The other 40 shares were sold to cover $6000 in taxes.
    ; This transaction balances the income, taxes, and received shares.
    ; We must also show the reduction in unvested shares.
    Assets:Grant:Unvested -100 HOOL.UNVEST
    Expenses:Grant:Vested 100 HOOL.UNVEST

この単一のバランスの取れたトランザクションは、イベント全体を正しくモデル化しています。未確定付与が減少し、収入が認識され、税金が支払われ、正味の権利確定株式が将来のキャピタルゲイン計算のために正しい原価基準で証券口座に表示されます。

パート 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 であなたの財務の旅を始めましょう - プロモーション期間中は無料です!

Expenses

Income Statement

Balance Sheet