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

「Accounting」タグの記事が89件件あります

全てのタグを見る

Beancount.ioで個人財務管理を革新する

· 約4分
Mike Thrift
Mike Thrift
Marketing Manager

Beancounter(ビーンカウント利用者)は従来、コマンドラインツールやプライベートネットワーク上のセルフホストサーバーを使用し、コンピュータやモバイル上の汎用テキストエディタで操作していました。Beancount.io は、オープンソースの Android および iOS モバイルアプリと安全なクラウドを提供することで、元帳へのアクセスを指紋認証で数回タップするだけに簡素化します。

Beancount はテキストファイルで複式簿記を実現できるコンピュータ言語です。ファイルに金融取引を定義すれば、さまざまなレポートが自動生成されます。この言語の設計者である Martin Blais は、コマンドライン簿記には「高速、ポータブル、オープン、カスタマイズ可能」という多くの利点があると主張しています。

私たちもその主張に強く同意し、Beancount 言語がもたらすエンパワーメントを共有しています。そして、さらに多くの人にこの技術を届けたいと考えました。つまり、使いやすさを向上させ、より広い層にアクセスしやすくしなければなりません。

2022-01-08-いつでもどこでもBeancountクラウド元帳に即時アクセス

すべての人がコマンドライン好きというわけではありません。だからこそ私たちは Beancount.io を作りました――誰にでも使える個人財務管理ツールです。仕組みは次のとおりです。

重い作業を行う場合、Beancounter は引き続きコンピュータで https://beancount.io にアクセスしたり、Dropbox と同期したりして元帳を編集・閲覧できます。これによりコマンドラインツールの柔軟性を保ちつつ、クラウドベースソリューションのデバイス間アクセスも失われません。

日常的な軽作業、たとえば即座にエントリを追加したいときは、モバイルアプリで安全なクラウドに接続すれば完了です。

Mike Thrift(本製品のバックエンドエンジニア)は次のように語ります。

毎日、ノートパソコンを開いて bean ファイルに記録を入力するリマインダーを設定していました。Beancount.io を使うようになってからは、外出先で店頭で購入したときでも、必要なときにいつでも元帳を簡単に修正できるようになりました。

Facebook のソフトウェアエンジニア、Zhi Li は次のように語ります。

すべての Beancount ファイルを Beancount.io に移行しましたが、日常的な利用で完璧に動作しています。自動データバックアップなどの Pro 機能に課金していますが、サービス向上のためにさらにできることがあると感じています。

今すぐ https://beancount.io/sign-up/ でサインアップするか、iOS または Android アプリ をダウンロードしてください。登録プロセスは必要最小限の情報だけを収集するよう簡素化しており、サービス開始後すぐにエントリを追加できる空の元帳が自動で用意されます。

FAQ

Beancount.io は私の元帳データを第三者に販売しますか?

  • いいえ。データの安全性とプライバシーを最優先しており、元帳データを販売することは決してありません。

私のデータは安全ですか?

  • はい。メールと元帳は AES256 で、パスワードは BCrypt で、ネットワーク通信は SSL で保護しています。

私の元帳データはエンドツーエンドで暗号化されていますか?

  • いいえ。技術的制約により、プロダクションサーバーで元帳ファイルをインデックス化する際にメモリ上に復号する必要があります。そのため、チームメンバーからの直接アクセスは制限しています。Intel SGX や他のセキュリティボールトを利用できないのはコストが高いためです。

今後数年間、信頼できるサービスですか?

  • はい。Beancount.io は 2019 年 7 月 4 日にローンチしてから 2 年以上、安全かつ信頼性の高いサービスを提供し続けています。今後も継続して提供する理由は十分にあります。

新機能のリクエストやプロジェクトへのスポンサーは可能ですか?

QuickBooksからBeancountへの移行ガイド

· 約40分
Mike Thrift
Mike Thrift
Marketing Manager

ステージ1:QuickBooksからのデータエクスポート

5年分のデータを移行するには、まずQuickBooksの全レコードを利用可能な形式で取得することから始まります。QuickBooks DesktopとQuickBooks Onlineでは、エクスポートオプションが異なります。

2021-12-01-from-quickbooks-to-plain-text-a-migration-playbook

1.1 QuickBooks Desktopのエクスポートオプション

IIF (Intuit Interchange Format): QuickBooks Desktopでは、リスト(勘定科目表、顧客、ベンダーなど)を.IIFテキストファイルにエクスポートできます。QuickBooks Desktopで、[ファイル] → [ユーティリティ] → [エクスポート] → [IIFファイルへのリスト] に進み、必要なリスト(例:勘定科目表、顧客、ベンダー)を選択します。これにより、勘定科目名、タイプ、リストデータを含むテキストファイルが生成されます。IIFはプロプライエタリな形式ですが、プレーンテキストであり、比較的簡単に解析できます。これを使用して、Beancountでの参照用に勘定科目表と連絡先リストを取得します。

CSV経由の総勘定元帳/一般仕訳帳: 取引データについては、QuickBooks Desktopにはワンクリックでの完全なエクスポート機能はありませんが、レポートを使用できます。推奨される方法は、希望する期間の一般仕訳帳(すべての取引)をエクスポートすることです。QuickBooks Desktopで、[レポート] → [会計士と税務] → [一般仕訳帳] を開き、日付を最も古い取引から今日までに設定し、[エクスポート] → [Excel] をクリックします。レポートのヘッダー/フッターや空の列を削除した後、結果をCSVとして保存します。数値データがクリーンであることを確認してください:セントを含める(例:3ではなく3.00)、余分な引用符がない、通貨記号や二重の負号がCSVにないようにします。CSVには、日付、取引番号、名前、勘定科目、メモ、借方、貸方、残高(またはレポート形式によっては単一の金額列)などの列が必要です。

ヒント: QuickBooks Desktop 2015以降では、検索ダイアログからも取引をエクスポートできます。[編集] → [検索] → [詳細] を使用し、日付範囲を5年間に設定してから、結果をCSVにエクスポートします。警告: 一部のバージョンではエクスポートが32,768行に制限されています。データ量が非常に多い場合は、切り捨てを避けるために年ごと(またはより小さなチャンクで)エクスポートし、後で結合してください。重複を避けるために、日付範囲が重ならないようにしてください。

その他のフォーマット (QBO/QFX/QIF): QuickBooks Desktopは.QBO (Web Connect) または.QFX/.OFXファイルを介して銀行取引をインポートできますが、QuickBooksからエクスポートする場合には一般的ではありません。銀行取引のみを抽出することが目的であれば、銀行からQBO/OFX形式で既に入手している可能性があります。ただし、完全な元帳のエクスポートのためには、IIFとCSVを使用してください。QuickBooks Desktopは、サードパーティ製ツールなしでは直接QIF (Quicken Interchange Format) にエクスポートできません。もしQIFを取得する方法を見つけた場合、一部の会計ツール(古いLedger 2.xなど)はQIFを読み取れましたが、我々のプロセスではCSVを扱う方が良いでしょう。

1.2 QuickBooks Onlineのエクスポートオプション

Excel/CSVへの統合エクスポート: QuickBooks Online (QBO) にはデータのエクスポートツールが用意されています。[設定] ⚙ → [ツール] → [データのエクスポート] に進みます。エクスポートダイアログで、[レポート] タブを使用してデータ(例:総勘定元帳または取引リスト)を選択し、[リスト] タブでリスト(勘定科目表など)を選択し、[すべての日付] を選んでExcelにエクスポートします。QuickBooks Onlineは、選択されたレポートとリスト(例:損益計算書、貸借対照表、総勘定元帳、顧客、ベンダー、勘定科目表など)の複数のExcelファイルを含むZIPをダウンロードします。その後、これらのExcelファイルをCSVに変換して処理できます。

取引詳細レポート: QBOのデフォルトのエクスポートに単一の総勘定元帳ファイルが含まれていない場合、手動で詳細レポートを実行できます:

  1. [レポート] に移動し、[勘定科目別取引詳細](または一部のQBOバージョンでは**[総勘定元帳]**)を検索します。
  2. [レポート期間] を5年間の全範囲に設定します。
  3. レポートオプションで、[グループ化] = [なし] に設定します(小計なしで個々の取引をリストするため)。
  4. 少なくとも次の列を含むように列をカスタマイズします:日付、取引タイプ、番号、名前(受取人/顧客)、メモ/説明、勘定科目、借方貸方(または単一の金額列)、および残高。クラスや場所を使用していた場合はそれらも含めます。
  5. レポートを実行し、[Excelにエクスポート] します。

これにより、すべての取引の詳細な元帳が生成されます。これをCSVとして保存します。各行は取引の1つの明細(仕訳)を表します。後で変換のために、取引ごとに行をグループ化する必要があります。

勘定科目表およびその他のリスト: QuickBooks Onlineでは、[会計] → [勘定科目表] → [一括処理] → [Excelにエクスポート] を介して勘定科目表をエクスポートできます。これを行って勘定科目名とタイプを取得します。同様に、メタデータ用に名前を転送したい場合は、顧客、ベンダーなどもエクスポートします。

QuickBooks Online API (オプション): プログラムによるアプローチとして、IntuitはQBOデータ用のREST APIを提供しています。上級ユーザーは、QuickBooks Onlineアプリケーションを作成し(開発者アカウントが必要)、APIを使用してデータをJSONで取得できます。たとえば、Accountエンドポイントで勘定科目表を、JournalEntryまたはGeneralLedgerレポートエンドポイントで取引を照会できます。python-quickbooksのようなPython SDKがAPIをラップしています。ただし、APIの使用にはOAuth認証が必要であり、自動化を好む場合を除き、一度きりの移行には過剰です。ほとんどの場合、CSV/Excelへの手動エクスポートの方が簡単でエラーが発生しにくいです。


ステージ2:データの変換とクリーンアップ

QuickBooksのデータをCSV(および/またはIIF)で取得したら、次のステップはそれをBeancountのプレーンテキスト元帳形式に変換することです。これには、エクスポートの解析、QuickBooksの勘定科目をBeancountの勘定科目表にマッピングし、取引をBeancountの構文にフォーマットすることが含まれます。

2.1 PythonによるQuickBooksエクスポートの解析

Pythonを使用することで、変換の正確性と再現性が保証されます。ここでは、2つの主要なタスクのためのスクリプトを概説します:勘定科目表のインポート取引の変換です。

勘定科目のインポートとマッピング: 取引を追加する前に、Beancountで勘定科目を設定することが重要です。QuickBooksの勘定科目にはタイプ(銀行、売掛金、費用など)があり、これらをBeancountの階層(資産、負債、収益、費用など)にマッピングします。たとえば、次のようなマッピングを使用できます:

# QuickBooksの勘定タイプからBeancountのルートカテゴリへのマッピング
AccountTypeMap = {
'BANK': 'Assets', # 資産
'CCARD': 'Liabilities', # 負債
'AR': 'Assets', # 売掛金を資産として
'AP': 'Liabilities', # 買掛金を負債として
'FIXASSET': 'Assets',
'OASSET': 'Assets', # その他資産
'OCASSET': 'Assets', # その他流動資産
'LTLIAB': 'Liabilities',# 長期負債
'OCLIAB': 'Liabilities',# その他流動負債
'EQUITY': 'Equity', # 純資産
'INC': 'Income', # 収益
'EXP': 'Expenses', # 費用
'EXINC': 'Income', # その他収益
'EXEXP': 'Expenses', # その他費用
}

QuickBooks DesktopのIIFエクスポートまたはQBOの勘定科目リストCSVを使用して、各勘定科目の名前とタイプを取得します。次に:

  • Beancount勘定科目名の作成: QuickBooksでは、サブ勘定を示すためにコロン(:)を使用することがあります(例:"流動資産:当座預金")。Beancountも階層に同じコロン表記を使用します。多くの場合、名前を直接再利用できます。QuickBooksの勘定科目名がカテゴリで始まらない場合は、マッピングされたカテゴリを先頭に追加します。たとえば、BANKタイプのQuickBooks勘定科目 "当座預金" は、Beancountでは Assets:当座預金 になります。EXP(費用)勘定の "食事代" は Expenses:食事代 になります。

  • 有効な名前の確保: Beancountを混乱させる可能性のある文字を削除または置換します。QuickBooksでは &/ などの文字が名前に使用できます。特殊文字を削除または置換する(例:&and に置き換える、スラッシュやスペースを削除する)のが賢明です。また、変換後、すべての勘定科目名が一意であることを確認してください。QuickBooksでは、異なる親の下で同じサブ勘定名が許可されている場合がありますが、Beancountでは完全な名前(親を含む)が一意でなければなりません。必要に応じて、名前を変更するか、区別するための修飾子を追加します。

  • 勘定開設の生成: Beancountでは、使用される各勘定は open ディレクティブで開設する必要があります。最初の取引より前の日付を選択できます(例:2019-2023のデータを移行する場合、すべての開設に 2018-12-31 またはそれ以前の日付を使用)。スクリプトは次のような行を書き出します: 2018-12-31 open Assets:Checking USD 2018-12-31 open Expenses:Meals USD 各勘定について(USDが主要通貨であると仮定)。各勘定に適切な通貨を使用してください(下記の多通貨に関する注意参照)。

取引の変換: 主な課題は、QuickBooksの取引エクスポート(CSV)をBeancountの仕訳に変換することです。各QuickBooks取引(請求書、支払手形、小切手、仕訳など)には複数の明細(行)があり、これらを単一のBeancount取引にグループ化する必要があります。

PythonのCSVリーダーを使用して、エクスポートされた行を反復処理し、明細を蓄積します:

import csv
from collections import defaultdict

# QuickBooksの一般仕訳帳CSVからすべての行を読み込む
rows = []
with open('quickbooks_exported_journal.csv', 'r', encoding='utf-8') as f:
reader = csv.DictReader(f)
for line in reader:
rows.append(line)

# 取引ごとに行をグループ化する('取引番号'が取引を識別すると仮定)
transactions = defaultdict(list)
for line in rows:
trans_id = line.get('Trans #') or line.get('Transaction ID') or line.get('Num')
transactions[trans_id].append(line)

これで transactions は、各キーが取引ID/番号で、値がその取引の明細リストである辞書になります。次に、各グループをBeancountに変換します:

def format_date(qb_date):
# QuickBooksの日付は "12/31/2019" のような形式
m, d, y = qb_date.split('/')
return f"{y}-{int(m):02d}-{int(d):02d}"

output_lines = []
for trans_id, splits in transactions.items():
# 必要に応じて明細を行の順序でソート(通常は順序通りに出力される)
splits = sorted(splits, key=lambda x: x.get('Line') or 0)
first = splits[0]
date = format_date(first['Date'])
payee = first.get('Name', "").strip()
memo = first.get('Memo', "").strip()
# 取引ヘッダー
output_lines.append(f"{date} * \"{payee}\" \"{memo}\"")
if first.get('Num'): # 参照番号があれば含める
output_lines.append(f" number: \"{first['Num']}\"")
# 各明細/仕訳をループ処理
for split in splits:
acct_name = split['Account'].strip()
# QuickBooks勘定科目名をBeancount勘定にマッピング(上記のマッピングを使用)
beancount_acct = account_map.get(acct_name, acct_name)
# 符号付きの金額を決定
amount = split.get('Amount') or ""
debit = split.get('Debit') or ""
credit = split.get('Credit') or ""
if amount:
# 一部のエクスポートは単一の金額列を持つ(貸方は負)
amt_str = amount
else:
# 借方/貸方が別の列の場合
amt_str = debit if debit else f"-{credit}"
# 安全のために数値のカンマを削除
amt_str = amt_str.replace(",", "")
# 通貨を追加
currency = split.get('Currency') or "USD"
amt_str = f"{amt_str} {currency}"
# 明細のメモ/説明
line_memo = split.get('Memo', "").strip()
comment = f" ; {line_memo}" if line_memo else ""
output_lines.append(f" {beancount_acct:<40} {amt_str}{comment}")
# 取引の終わり – 空行
output_lines.append("")

このスクリプトのロジックは次のことを行います:

  • 日付をBeancount用のYYYY-MM-DD形式にフォーマットします。
  • 受取人(名前)とメモを取引の説明に使用します。例: 2020-05-01 * "ACME Corp" "請求書の支払い" (受取人がない場合、QuickBooksの取引タイプを使用するか、受取人を空の引用符で囲むことができます)。
  • 参照番号(小切手番号、請求書番号など)がある場合は、numberメタデータを追加します。
  • 各明細行を反復処理します:
    • account_map辞書を使用して、QuickBooksの勘定科目名をBeancountの勘定にマッピングします(勘定科目表のステップで作成)。
    • 金額を決定します。エクスポートによっては、単一の金額列(正/負の値)または別々の借方と貸方列がある場合があります。上記のコードは両方のケースを処理します。貸方がBeancountの負の金額として表されることを確認します(Beancountでは、仕訳ごとに1つの符号付き数値が使用されるため)。
    • 通貨を付加します(別の通貨列がない限りUSDと仮定)。
    • 勘定、金額、および行メモのコメントを含むBeancountの仕訳行を書き込みます。例: Assets:Checking 500.00 USD ; 預金 Income:Sales -500.00 USD ; 預金 これは$500の預金(収益から当座預金へ)を反映しています。
  • すべての明細をリストした後、空行が取引を区切ります。

多通貨の処理: QuickBooksデータに複数の通貨が含まれる場合、各仕訳に通貨コードを含めます(上記参照)。外貨建ての勘定がその通貨で開設されていることを確認してください。たとえば、EURの銀行口座がある場合、open Assets:Bank:Checking EUR を生成し、その勘定での取引はEURを使用します。Beancountは多通貨元帳をサポートし、暗黙的な換算を追跡しますが、レポートで基本通貨への換算が必要な場合は、為替レートの価格エントリを追加する必要があるかもしれません。また、Beancountファイルの先頭で主要な運用通貨を宣言することをお勧めします(例:option "operating_currency" "USD")。

変換の実行: Pythonスクリプトを(例えばqb_to_beancount.pyとして)保存し、エクスポートされたファイルに対して実行します。すべての勘定と取引を含む.beancountファイルが生成されるはずです。

2.2 特殊ケースの処理とデータクリーンアップ

変換中、これらの一般的な問題とその対処法に注意してください:

  • 互換性のない勘定科目名: QuickBooksには、Beancountの階層的な名前と競合する勘定科目名がある場合があります。たとえば、QuickBooksには2つの異なる親勘定があり、それぞれに "保険" という名前のサブ勘定があるかもしれません。Beancountでは、Expenses:Insurance は一意でなければなりません。これを解決するには、エクスポート前に一方の名前を変更する(例:「保険-車両」vs「保険-健康」)か、スクリプトで一意のBeancount勘定にマッピングします。一貫した命名規則(特殊文字なし、階層の使用)は頭痛の種を減らします。必要であれば、再マッピングファイルアプローチを使用します:古い名前→新しいBeancount名のCSVまたは辞書を保持し、変換中に適用します(我々のサンプルコードはaccount_mapを使用し、ファイルから上書きを読み込むことができます)。

  • 日付とフォーマット: すべての日付が一貫してフォーマットされていることを確認してください。上記のスクリプトはM/D/YをISO形式に正規化します。また、5年間の期間が年度末をまたぐ場合、会計年度と暦年の問題に注意してください。Beancountは会計年度の境界を気にしませんが、後で便宜上、ファイルを年ごとに分割したい場合があります。

  • 数値の精度: QuickBooksは通貨をセント単位で処理するため、セント単位での作業は通常問題ありません。理想的には、すべての金額がCSVで小数点以下2桁を持つべきです。もし金額が整数に変換された(小数点なし)場合や、カンマ/括弧(負の場合)がある場合は、スクリプトでクリーンアップします(カンマを削除し、(100.00)-100.00 に変換するなど)。指示に従って正しく行われたCSVエクスポートは、これらのフォーマットの問題を既に回避しているはずです。

  • 負の金額と符号: QuickBooksのレポートでは、負の値を -100.00(100.00)、または特定のExcelエクスポートでは --100.00 として表示することがあります。クリーンアップステップでこれを処理する必要があります。各取引の借方と貸方がゼロになるようにバランスが取れていることを確認してください。Beancountはこれを強制します(バランスが取れていない場合、インポート時にエラーをスローします)。

  • 重複した取引: 取引をバッチで(例:年ごとや勘定ごと)エクスポートする必要があった場合、重複しないようにマージするように注意してください。ある年の最初の取引が前のバッチの最後の取引でもないことを確認するなど。境界で誤っていくつかの取引を重複させてしまうのは簡単です。重複が疑われる場合は、最終的なBeancountの仕訳を日付でソートし、同一のエントリを探すか、Beancountの一意の取引タグを使用して検出できます。戦略の1つは、QuickBooksの取引番号をメタデータとして含め(例:取引番号や請求書番号をtxnタグやquickbooks_idメタデータとして使用)、それらのIDの重複がないことを確認することです。

  • 不均衡な明細 / 未決算勘定: QuickBooksには、QuickBooksが自動的に「期首残高純資産」または「利益剰余金」勘定に調整した不均衡を持つ取引のような奇妙なケースがあるかもしれません。たとえば、期首勘定残高を設定する際、QuickBooksはしばしば差額を純資産勘定に記録します。これらはエクスポートされた取引に現れます。Beancountは明示的なバランスを要求します。QuickBooksを反映させるために、期首残高用の純資産勘定(一般的にEquity:Opening-Balances)を導入する必要があるかもしれません。元帳の初日にすべての勘定の期首残高を設定する期首残高仕訳を持つのが良い習慣です(ステージ5参照)。

  • 多通貨の特殊ケース: 多通貨を使用する場合、QuickBooksのエクスポートはすべての金額を現地通貨またはネイティブ通貨でリストするかもしれません。理想的には、各勘定のネイティブ通貨でデータを取得します(QuickBooks Onlineのレポートは通常これを行います)。Beancountでは、各仕訳は通貨を持ちます。QuickBooksが為替レートまたは現地通貨への換算を提供した場合、それらを無視してBeancountの価格エントリに依存することができます。QuickBooksが為替レートをエクスポートしなかった場合、評価を一致させるために主要な日付に手動で価格レコードを追加したい場合があります(例:Beancountのpriceディレクティブを使用)。ただし、元帳の基本的な整合性のためには、取引が元の通貨でバランスが取れていれば十分です。未実現損益は、同じレポートが必要でない限り、明示的に記録する必要はありません。

  • 売掛金 / 買掛金: QuickBooksは、プレーンテキスト元帳には完全には引き継がれない請求書や支払手形の詳細(支払期日、支払状況など)を追跡します。ARおよびAP取引(ARを増加させる請求書、ARを減少させる支払いなど)は取得できますが、請求書ドキュメントや請求書ごとの顧客残高は取得できません。その結果、移行後、BeancountのARおよびAP勘定の残高が、QuickBooksの未処理の顧客/ベンダー残高と一致することを確認する必要があります。請求書を追跡する必要がある場合は、Beancountのメタデータを使用できます(例:invoiceタグやリンクを含める)。QuickBooksの請求書番号はNumまたはMemoフィールドに入っているはずです。我々のスクリプトはNumを取引メタデータのnumber: "..."として保持します。

  • 非アクティブまたは閉鎖された勘定: IIFエクスポートには非アクティブな勘定が含まれる場合があります(含めるように選択した場合)。これらをインポートしても問題ありません(取引がなく、本当に非アクティブであれば残高はゼロになります)。最後の取引日の後にcloseディレクティブを使用してBeancountで閉鎖済みとしてマークできます。これにより、元帳が整理されます。例: 2023-12-31 close Expenses:OldAccount ; 移行後に閉鎖 これはオプションであり、主に整理のためです。

上記のようにデータを慎重にクリーンアップし、マッピングすることで、QuickBooksのデータを構造的に反映したBeancount元帳ファイルができます。次のステップは、それがQuickBooksを数値的にも反映していることを確認することです。


ステージ3:データの検証と照合

検証は、会計データ移行における重要な段階です。Beancount元帳がQuickBooksの帳簿とセント単位で一致することを確認する必要があります。いくつかの戦略とツールを使用できます:

3.1 試算表の照合

試算表レポートは、すべての勘定の期末残高(借方と貸方、または正/負で示される)をリストし、合計はゼロになるはずです。両方のシステムで同じ日付の試算表を実行することは、全体的な精度を最も迅速に確認する方法です。

  • QuickBooksで: 最終年の最終日(例:2023年12月31日)の試算表レポートを実行します。このレポートは各勘定の残高を示します。それをエクスポートするか、主要な数値をメモします。

  • Beancountで: Beancountのレポートを使用して試算表を生成します。簡単な方法はコマンドライン経由です:

    bean-report migrated.beancount balances

    balancesレポートは、すべての勘定とその残高をリストする試算表です。Fava(BeancountのWebインターフェース)でファイルを開き、残高または貸借対照表セクションを見ることもできます。Beancountの各勘定残高は、QuickBooksの試算表と一致する必要があります。たとえば、QuickBooksが*売掛金 = 5,000を示している場合、BeancountAssets:AccountsReceivable勘定は5,000*を示している場合、Beancountの`Assets:AccountsReceivable`勘定は5,000(借方)になるはずです。*売上収益 = 200,000の場合、BeancountIncome:Sales勘定は200,000*の場合、Beancountの`Income:Sales`勘定は200,000(貸方、クレジットを負として表示する試算表を使用している場合は-200,000と表示される可能性があります)を示すはずです。

食い違いがある場合は、特定します:

  • 勘定全体が欠落しているか、余分にあるかを確認します(勘定を忘れたか、移行期間前に既に閉鎖されていたものを含めてしまったか?)。
  • 残高が間違っている場合は、さらに詳しく調べます:QuickBooksでは、その勘定のクイックレポートまたは元帳詳細を実行でき、それをBeancountのその勘定のレジスタ(bean-report migrated.beancount register -a AccountName)と比較できます。差異は、取引の欠落や重複から生じることがあります。

また、Beancountの試算表ですべての勘定の合計がゼロであることを確認します(合計がゼロまたは非常にゼロに近い値として出力されるはずです)。Beancountは複式簿記を強制するため、ゼロでない不均衡がある場合、資産から負債と純資産を引いたものがゼロにならなかったことを意味し、問題を示しています(QuickBooksも通常はこれを許可しませんが、一部のデータが省略された場合に発生する可能性があります)。

3.2 勘定残高の比較

試算表以外に、特定の財務諸表を比較できます:

  • 貸借対照表: QuickBooksで最終日の貸借対照表を実行し、Beancountの貸借対照表(bean-report migrated.beancount balsheet)を実行します。これは試算表に似ていますが、資産、負債、純資産で整理されています。カテゴリごとの数値が一致する必要があります。より詳細なチェックのために、主要な勘定の合計を比較します:現金、売掛金、固定資産、買掛金、純資産など。

  • 損益計算書: QuickBooksとBeancount(期間全体の損益計算書はbean-report migrated.beancount income)で5年間の期間(または年ごと)の損益計算書を実行します。Beancountの純利益は、各期間でQuickBooksの純利益と等しくなければなりません。5年間すべてを移行した場合、累積純利益が一致する必要があります。また、個々の収益と費用の合計を比較して、カテゴリが省略または重複していないことを確認できます。

  • ランダムな取引のサンプリング: ランダムにいくつかの取引(特に各年から、および各主要勘定から)を選び、それらが正しく移行されたかを確認します。たとえば、QuickBooksで3年前の請求書を見つけ、その金額やメモをBeancountファイルで検索します(すべての取引はテキストなので、.beancountファイルをテキストエディタで開くか、検索ツールを使用できます)。日付、金額、勘定が一致することを確認します。これは、日付形式の問題や誤ってマッピングされた勘定を検出するのに役立ちます。

3.3 自動整合性チェック

Beancount自身の検証ツールを活用します:

  • bean-check: bean-check migrated.beancount を実行します。これによりファイルが解析され、構文エラーやバランスエラーが報告されます。スクリプトが未開設の勘定やバランスの取れていない取引などを見逃した場合、bean-checkがそれを指摘します。クリーンなパス(出力なし)は、ファイルが少なくとも内部的に一貫していることを意味します。

  • 残高アサーション: 追加のチェックとして、元帳に主要な勘定の明示的な残高アサーションを追加できます。たとえば、特定の日付の銀行口座の残高がわかっている場合は、次のような行を追加します: 2023-12-31 balance Assets:Bank:Checking 10000.00 USD bean-checkは、その日付の元帳で残高が実際に$10,000であることを確認します。これはオプションですが、重要度の高い勘定に役立ちます。QuickBooksの期末残高(例:各年末)を取得し、Beancountファイルでアサートすることができます。アサーションが失敗すると、Beancountは差額を報告します。

  • 試算表のロールフォワード: 必要であれば、期間ごとのチェックを行うことができます。各年について、純変動を比較します。たとえば、QuickBooks 2020の純利益とBeancount 2020の純利益を比較し、各年が純資産に正しくクローズされたことを確認します(QuickBooksは毎年、純利益を自動的に利益剰余金に繰り越します。Beancountでは累積純資産のみが表示されます)。差異が見つかった場合は、特定の年のデータに問題があることを示している可能性があります。

  • 取引数と重複: QuickBooksとBeancountの取引数を数えます。QuickBooksは直接のカウントを簡単には表示しませんが、CSVの行を数えることで推定できます(取引ヘッダー vs 明細)。Beancountでは、ファイル内のtxnまたは* "の出現回数を数えるのが手っ取り早い方法です。これらはQuickBooksの数と等しいか、わずかに多くなるはずです(期首残高取引や調整を追加した場合)。大きな食い違いは、何かが省略されたか重複した可能性があることを意味します。メタデータで一意のIDを使用することで、重複が疑われる場合に、Beancountファイル内で同じ小切手番号や請求書番号が2回出現していないか検索できます。

  • 照合ステータス: スクリプトにQuickBooksの「照合済み」ステータスに基づいてrec: "y"または"n"のメタデータを含めました(例のrecなど)。これはBeancountの標準機能ではありませんが(BeancountはLedgerのように「照合済み/保留中」を追跡しません)、便利なメタデータになる可能性があります。QuickBooksで照合されたすべての取引が存在することを確認できます。最終的に、Beancountで銀行口座を再照合する(明細書を使用)ことが、何も欠けていないことの最終的な証明になる可能性があります。

これらの検証を行うことで、移行がデータを保持したという信頼が生まれます。この段階に時間をかけてください。数ヶ月後に帳簿に依存するようになってから異常を修正するよりも、今修正する方が簡単です。検証が失敗した場合の一般的な問題:勘定の期首残高の欠落、範囲外の日付の取引、または仕訳の符号の反転。これらはすべて、特定されれば修正可能です。


ステージ4:Beancount台帳への統合

クリーンアップと検証の後、データをBeancount元帳の構造に正式化する時が来ました。「統合」とは、元帳ファイルを完成させ、監査可能性のためにバージョン管理システムに登録することを意味します。

4.1 台帳ファイルと設定の整理

Beancount元帳ファイルをどのように構成するかを決定します。5年分のデータの場合、すべてを1つのファイルに保持するか、年またはカテゴリごとに分割することができます。一般的で明確な構造は次のとおりです:

  • メイン元帳ファイル: 例:ledger.beancount – これは他のファイルをincludeできるエントリポイントです。グローバルオプションを含み、年次ファイルをインクルードすることができます。
  • 勘定科目ファイル: 勘定科目表と期首残高を定義します。例:accounts.beancountには、すべてのopenディレクティブ(スクリプトによって生成)が含まれます。商品(通貨)もここでリストできます。
  • 取引ファイル: 年ごとに1つ、例:2019.beancount2020.beancountなど、その年の取引を含みます。これにより、各ファイルが管理可能なサイズに保たれ、必要に応じて1年に集中できます。あるいは、エンティティや勘定ごとに分割することもできますが、時間による分割は財務データにとって簡単です。

メインファイルの例:

option "title" "私のビジネス元帳"
option "operating_currency" "USD"

include "accounts.beancount"
include "2019.beancount"
include "2020.beancount"
...
include "2023.beancount"

このようにして、レポートを実行するとすべてのデータが集計されますが、秩序は維持されます。

Beancountは複数のファイルを必要としません(1つの大きなファイルでもかまいません)が、上記の構造は明瞭さとバージョン管理を向上させます。Beancountのベストプラクティスに従い、明確なセクションヘッダーを使用し、関連するエントリを論理的にグループ化することが良いでしょう。

4.2 開始残高と純資産の設定

移行が絶対的なゼロからの開始でない場合、期首残高を処理する必要があります。2つのシナリオがあります:

  • ゼロから始まる帳簿: 5年間の期間が会社の設立時に始まる場合(例:2019年1月にQuickBooksを使い始め、初期の純資産を除いてすべての勘定がゼロだった場合)、別の期首残高取引は必要ないかもしれません。2019年の最初の取引(銀行口座への初期資金調達など)が自然に期首残高を設定します。初期資本以前の利益剰余金が純資産取引を通じて計上されていることを確認してください。

  • 途中からの帳簿(部分的な履歴): QuickBooksを以前から使用しており、2019年が中間点である場合、2019年1月1日時点で各勘定には繰越残高がありました。QuickBooksではそれらが期首残高または利益剰余金として記録されていたでしょう。Beancountでは、開始日の前日に期首残高仕訳を作成するのが一般的です:

    • すべての期首金額の合計を相殺するために、Equity:Opening-Balances(または同様の)という名前の純資産勘定を使用します。
    • 例:2018年12月31日時点で、現金が10,000、売掛金が10,000、売掛金が5,000、買掛金が3,000(貸方)だった場合、次のような取引を記述します:20181231"期首残高"Assets:Cash10000.00USDAssets:AccountsReceivable5000.00USDLiabilities:AccountsPayable3000.00USDEquity:OpeningBalances12000.00USDこれにより、OpeningBalancesには仕訳をバランスさせる負の合計(–3,000(貸方)だった場合、次のような取引を記述します: `2018-12-31 * "期首残高"` ` Assets:Cash 10000.00 USD` ` Assets:AccountsReceivable 5000.00 USD` ` Liabilities:AccountsPayable -3000.00 USD` ` Equity:Opening-Balances -12000.00 USD` これにより、`Opening-Balances`には仕訳をバランスさせる負の合計(–12k)が残ります。これで、すべての資産/負債勘定は2019年を正しい残高で開始します。これは、QuickBooksの「利益剰余金」や繰越残高を反映するはずです。
    • あるいは、Beancountのpadおよびbalanceディレクティブを使用します:各勘定について、Opening-Balancesからpadし、残高をアサートできます。これはより自動化された方法です。例: 2018-12-31 pad Assets:Cash Equity:Opening-Balances 2018-12-31 balance Assets:Cash 10000.00 USD これはBeancountに、その日付で現金が10000 USDになるように必要な仕訳(Opening-Balancesへ)を挿入するように指示します。これを各勘定に対して行います。結果は似ていますが、最初の方法のように明示的な取引を記述するのも簡単です。
  • 利益剰余金: QuickBooksは「利益剰余金」取引を明示的にエクスポートせず、単に計算します。移行後、Equity:RetainedEarningsを作成しなかった場合、それがゼロであることに気づくかもしれません。Beancountでは、利益剰余金は単に前年度の利益です。利益剰余金勘定を作成し、毎新年の初日に前年度の利益をそれに振り替えるか、単に純資産をすべての収益/費用の合計とすることができます(これはレポートの純資産セクションに表示されます)。透明性を高めるために、一部のユーザーは毎年クロージングエントリを記録します。これはオプションであり、主に表示のためです。すべての取引を移行したため、各年の利益は年ごとのレポートを実行すれば自然に累積されます。

  • 比較チェック: 期首残高を設定した後、開始日の貸借対照表を実行して、すべてが正しいことを確認します(それらの期首残高と期首純資産がゼロになるはずです)。

4.3 最終処理とバージョン管理

データがBeancount形式になり、構造化された今、ファイルをバージョン管理リポジトリ(例:git)にコミットするのが賢明です。元帳の各変更を追跡でき、すべての修正の監査証跡が得られます。これはプレーンテキスト会計の重要な利点です。たとえば、QuickBooksでは変更を簡単に比較できないかもしれませんが、Beancountでは行ごとに差分を確認できます。一部のユーザーが指摘するように、Beancountでは透明性が得られ、必要に応じて変更を元に戻すことができます。各仕訳は変更履歴にリンクできます。

この初期移行のコミットにv1.0などのタグを付けることを検討してください。そうすれば、それがQuickBooksからインポートされた時点の帳簿の状態を表していることがわかります。将来的には、新しい取引を直接Beancountに入力する(または銀行明細書からインポートするなど)ことになり、通常のソフトウェア開発プラクティス(毎月または毎日コミットする、実験のためにブランチを使用するなど)を使用できます。

Favaやその他のツールの設定: FavaはBeancountのWebインターフェースで、レポートを簡単に表示できます。コミット後、fava ledger.beancountを実行して財務諸表を閲覧し、QuickBooksのレポートと最後の比較を行います。UIでは小さな違いをより簡単に見つけられるかもしれません(たとえば、ゼロであるべき勘定に小さな残高が表示されている場合は、クロージングエントリの欠落や見逃された取引を示しています)。

命名規則と一貫性: これで完全にコントロールできるようになったので、一貫性を確保してください:

  • すべての勘定は明確な名前を持ち、大文字のカテゴリ名(Assets、Liabilitiesなど)で始まる必要があります。奇妙に見えるもの(例:QuickBooksの大文字/小文字の不一致によるAssets:assets:SomeAccount)があれば、勘定科目ファイルで名前を変更し、取引を更新します(ファイル内での簡単な検索/置換、またはBeancountのbean-formatやエディタのマルチカーソルを使用できます)。
  • 商品シンボル(通貨コード)は一貫している必要があります。USDには、どこでもUSDを使用します($US$ではありません)。その他には、標準コード(EUR、GBPなど)を使用します。この一貫性は、価格検索やBeancountのレポートにとって重要です。
  • 作成された可能性のある一時的またはダミーの勘定を削除します(たとえば、スクリプトで未知の勘定のプレースホルダとしてExpenses:Miscellaneousを使用した場合、すべての勘定を正しくマッピングしてそれらを排除するようにしてください)。

QuickBooksの終了: この時点で、QuickBooksと一致するBeancountの並行した帳簿があるはずです。一部の人は、何も見逃していないことを確認するために、短期間両方のシステムを並行して実行することを選択します。しかし、検証がしっかりしていれば、QuickBooksの帳簿を「閉じる」ことができます:

  • 企業環境の場合、QuickBooksのすべてのソースドキュメント(請求書、支払手形、領収書)を記録用にエクスポートすることを検討してください。これらは手動で添付しない限りBeancountには存在しません。
  • QuickBooksデータのバックアップ(会社ファイルとエクスポートファイルの両方)を保存します。
  • 将来的には、Beancount元帳を主要な記録システムとして維持します。

データをBeancount元帳に統合することで、移行プロセスは完了しました。最終ステップは、監査を行い、財務諸表の一貫性を証明し、自分自身(および利害関係者や監査人)に移行が成功したことを納得させることです。


ステージ5:移行後の監査と例

移行の成功を説明するために、財務諸表の移行前後の比較と、可能であれば取引の差分を準備します。これにより、帳簿が一貫していることの証拠が提供されます。

5.1 財務諸表の確認

QuickBooksとBeancountの両方から同じ日付の主要な財務レポートを作成し、比較します:

  • 2023年12月31日の貸借対照表: 資産、負債、純資産の合計を行ごとに比較します。これらは一致するはずです。たとえば、QuickBooksが総資産 = 150,000および総負債+純資産=150,000**および**総負債 + 純資産 = 150,000を示した場合、Beancountの貸借対照表も同じ合計を示すはずです。勘定の構成を少し変えた場合(いくつかのサブ勘定を統合したなど)、比較で調整するか、合計が等しいことを確認するために次のレベルまでドリルダウンします。

  • 2019年–2023年の損益計算書: 各年(または全期間)の総収益、総費用、および純利益が同一であることを確認します。QuickBooksがレポートで丸め処理を行った場合、わずかな差異が生じる可能性がありますが、取引は通常セント単位まで正確に記録されるため、純利益は正確であるはずです。いずれかの年の結果が異なる場合は、その年のデータを詳しく調べます。それはしばしば、その期間の仕訳の欠落または重複の指標です。

  • 試算表の差分: 可能であれば、各勘定とQuickBooks対Beancountの残高をリストしたスプレッドシートを作成します。一致することを期待しているので、これはすべてゼロの差分列になるかもしれません。これは本質的に、我々が議論した試算表のクロスチェックですが、それを書き留めることは文書化に役立ちます。

5.2 比較例(移行前 vs 移行後)

以下は、データの一貫性を示すサンプルの抜粋です。2023年12月31日のQuickBooksの試算表が次のようであったとします:

勘定科目QuickBooks残高 (2023年12月31日)
資産
Assets:Bank:Checking$12,500.00 (借方)
Assets:AccountsReceivable$3,200.00 (借方)
負債
Liabilities:CreditCard$-1,200.00 (貸方)
Liabilities:LoansPayable$-5,000.00 (貸方)
純資産
Equity:Opening-Balances$-7,500.00 (貸方)
Equity:RetainedEarnings$-2,000.00 (貸方)
Equity:CurrentYearProfit$0.00

Beancountでは、2023年までのすべての取引をインポートして記録した後、bean-report balances(試算表)は次のように出力されます:

勘定科目Beancount残高 (2023年12月31日)
Assets
Assets:Bank:Checking12,500.00 USD (借方)
Assets:AccountsReceivable3,200.00 USD (借方)
Liabilities
Liabilities:CreditCard-1,200.00 USD (貸方)
Liabilities:LoansPayable-5,000.00 USD (貸方)
Equity
Equity:Opening-Balances-7,500.00 USD (貸方)
Equity:RetainedEarnings-2,000.00 USD (貸方)
Equity:Profit (2019-2023)0.00 USD

(注意:純資産セクションは異なる構成にすることができます。重要なのは合計が一致することです。ここで、Beancountの「利益(2019-2023)」は、当期利益/利益剰余金の複合的な役割を果たし、利益が利益剰余金にクローズされたためゼロを示しています。)

示されているように、各勘定はセント単位で一致しています。借方の合計は、両側で貸方の合計と等しくなります。

さらに、2023年の損益計算書を実行すると:

  • QuickBooks: 収益 $50,000、費用 $48,000、純利益 $2,000。
  • Beancount: 収益 $50,000、費用 $48,000、純利益 $2,000(その後、利益剰余金にクローズされたか、年末の貸借対照表の純資産の下に表示されます)。

必要であれば取引の差分を作成できますが、QuickBooksのデータは元帳形式ではないため、レポートに依存する方が効果的です。QuickBooksのCSVとBeancountの取引を両方とも日付でソートし、最終チェックとして主要なフィールドを比較することができます(これはExcelまたはスクリプトで行うことができます)。ただし、以前の検証に自信があるため、財務諸表のチェックで通常は十分です。

5.3 監査のヒント

  • 監査人や利害関係者が保証を必要とする場合は、移行前後の財務諸表を並べて提示します。Beancountの透明性は、実際には監査を簡素化できます。なぜなら、財務諸表の各数値を元の仕訳まで迅速に追跡できるからです(特にFavaのドリルダウン機能を使用)。
  • QuickBooksのバックアップとエクスポートされたCSVを監査証跡の一部として保持します。移行中に行われた調整を文書化します(例:「一貫性のために勘定XをYに改名」または「明確化のために取引Zを2つの仕訳に分割」など、そのような変更を行った場合)。
  • 将来的には、Beancountで定期的なチェックを実施します。たとえば、銀行口座の月次照合とその期末残高のアサーションは、データの問題や入力エラーを検出するのに役立ちます。移行は良い基盤を提供します。新しいシステムで規律を維持することで、継続的な精度が保証されます。

最後に、移行の完了を祝いましょう:あなたはQuickBooksからBeancountへの5年間の会計データの転送に成功しました。データは現在、軽量でバージョン管理された、完全な複式簿記の整合性を持つテキスト形式になっています。データをエクスポートし、Pythonスクリプトで変換し、試算表とレポートを通じて整合性を検証し、整理されたBeancount元帳に統合しました。この包括的なプロセスにより、Beancount元帳が5年間の期間にわたってQuickBooksの帳簿の正確で忠実な複製であることが保証され、将来の簡素化された会計への道が開かれます。

Beancount のマルチファイルサポートの紹介

· 約2分
Mike Thrift
Mike Thrift
Marketing Manager

多くのお客様から、2 月以降、1 つの元帳に複数のファイルを追加する方法について問い合わせがありました。取引をアーカイブしたり分類したりするためのファイル構造が必要とのことです。そこで、数か月にわたる作業の末、ついにこの機能を無料でリリースできることをお知らせします。

使い方は以下の通りです:

ファイル > 新しいファイルを作成

2021-09-24-multi-file-one-ledger

左側のナビゲーションサイドバーにあるファイルエディタタブへ移動します。その後、"File" ドロップダウンを開き、"Create a new file" をクリックしてください。

File > create a new file

新しいファイルに名前を付ける

有効なファイル名を付けて保存してください。すべてのファイル名は必ず「.bean」で終わる必要があります。

Name your new file

ファイルをインクルードする

重要なステップです。新しく作成したファイルを main.bean にインクルードする必要があります。

例として、stock.bean を追加した場合、main.beaninclude "stock.bean" と記述してください。

Include the file

ページをリフレッシュしてファイルへ移動

ページをリフレッシュすると、"File" ドロップダウンにファイルが表示されます。

Refresh and go to file

ファイルの名前変更または削除

ファイルを開いたら、"Edit" ドロップダウンから名前の変更や削除が行えます。

Rename or delete the file

問題がありますか?

https://t.me/beancount で質問してください。

Fava バージョン 1.19 へのアップグレード:主な変更点と改善点

· 約2分
Mike Thrift
Mike Thrift
Marketing Manager

MIT ライセンスのオープンソースソフトウェア Fava をバージョン 1.19 にアップグレードしました。前回の更新以降の変更点は以下の通りです:

  • v1.19 (2021-05-18)
    • conversioninterval オプションから default-page オプションへ移行
    • オプション invert-income-liabilities-equity を追加
    • CodeMirror 6 にアップグレード
    • ブルガリア語翻訳を追加
    • その他の小さな改善とバグ修正
  • v1.18 (2021-01-16)
    • 小規模な改善とさまざまなバグ修正を数件実施。

ワクワクしていますか? 今すぐ以下でお試しください https://beancount.io/ledger/

2021-07-16-upgrade-fava-to-1-19

ご質問がありますか? https://t.me/beancount でサポートします :)

Beancount における償却の理解

· 約2分
Mike Thrift
Mike Thrift
Marketing Manager

償却は支払いを時間にわたって多数の分割払いに分散させます。beancount.io では、プラグイン fava.plugins.amortize_over を使用してこれを実現できます。

2021-01-09-amortize

償却を使用しない場合、例えば 6 ヶ月間の自動車保険に 600 ドルかかるとします。この費用は特定の日付の一回限りの費用として記録しなければなりません。

2017-06-01 open Assets:Bank:Checking
2017-06-01 open Assets:Prepaid-Expenses
2017-06-01 open Expenses:Insurance:Auto


2017-06-01 * "Pay car insurance"
Assets:Bank:Checking -600.00 USD
Assets:Prepaid-Expenses

しかし、償却を使用すれば、ファイルの先頭に plugin "fava.plugins.amortize_over" を記述し、取引に amortize_months: 6 を指定することで、費用を 6 ヶ月にわたって配分できます。

plugin "fava.plugins.amortize_over"

2020-06-01 open Assets:Bank:Checking
2020-06-01 open Assets:Prepaid-Expenses
2020-06-01 open Expenses:Insurance:Auto

2020-06-01 * "Amortize car insurance over six months"
amortize_months: 6
Assets:Prepaid-Expenses -600.00 USD
Expenses:Insurance:Auto

そしてジャーナルでは、取引が 6 件のポスティングに分割されていることが確認できます。

2020-11-01 * Amortize car insurance over six months (6/6) am
2020-10-01 * Amortize car insurance over six months (5/6) am
2020-09-01 * Amortize car insurance over six months (4/6) am
2020-08-01 * Amortize car insurance over six months (3/6) am
2020-07-01 * Amortize car insurance over six months (2/6) am
2020-06-01 * Amortize car insurance over six months (1/6) am

償却取引のスクリーンショット

iOS と Android 用 Beancount モバイルアプリのご紹介

· 約2分
Mike Thrift
Mike Thrift
Marketing Manager

Beancount の進化における大きなマイルストーンを発表できることを嬉しく思います。iOS と Android の両プラットフォーム向けに専用モバイルアプリをリリースしました!このリリースは、コミュニティから最も頻繁に寄せられた要望の一つである「モバイルデバイスで台帳を効率的に管理したい」という声に直接応えるものです。

Beancount iOS アプリ

主な機能

  • クイック取引入力: 外出先でもシームレスに新しい取引を追加
  • モバイル財務レポート: いつでもどこでも財務インサイトにアクセス
  • 直接台帳編集: 最適化された Web ビューを通じて台帳ファイルにフルアクセス
  • クロスプラットフォーム同期: すべてのデバイスで財務データを一貫させる

2020-08-19-beancount-mobile-app

コミュニティ主導の開発

このリリースはモバイルの旅の始まりに過ぎません。皆様のニーズとフィードバックに基づき、アプリを進化させていくことを約束します。Telegram のコミュニティ https://t.me/beancount に参加して、Beancount について議論し、体験を共有し、将来の機能作りに貢献してください。

ビジョン

Beancount のミッションは、すべての人がより良い財務管理と理解を実現できるよう支援することです。このモバイルアプリはその目標に向けた重要な一歩であり、今後も多くのエキサイティングな機能やツールがロードマップにあります。

App Store からダウンロードPlay Store からダウンロード

純利益 101 — Beancountでの追跡方法

· 約6分
Mike Thrift
Mike Thrift
Marketing Manager

ビジネスを表す数値の中で、ひとつだけは他を圧倒します:純利益です。これは収益性の究極の指標であり、いわゆる「最終利益」です。しかしそれは実際に何を意味し、プレーンテキスト会計システムであるBeancountを使ってどのように正確に追跡できるのでしょうか?

では、分解してみましょう。

2020-03-12-net-income-101-how-to-track-it-in-beancount

純利益の本当の意味

本質的に、純利益とはビジネスを運営するために必要なすべての支出(売上原価(COGS)、すべての営業費用、負債の利息、税金)を支払った後に残る金額です。

これは企業の財務健全性を示す最も明確な単一指標です。すべての関係者にとって重要な数値です:

  • 貸し手 は、返済能力を測るために純利益を見る。
  • 投資家 は、配当の源泉や成長に回せる資本として純利益を見る。
  • 創業者 は、財務的なランウェイを把握し、戦略的な再投資計画を立てるために純利益に依存する。

純利益がプラスであれば利益が出ていること、マイナスであれば損失が出ていることを意味します。シンプルです。

基本式(必要な詳細レベルを選択)

純利益は粒度の異なる計算式で求められます。どの程度詳細に分析したいかで選びます。

  • フル式: Revenue – COGS – Operating Expenses – Interest – Taxes = Net Income
  • 標準式: Revenue – COGS – Expenses = Net Income
  • 簡易式: Total Revenues – Total Expenses = Net Income

コストに関するちょっとしたコツ: COGS と営業費用の違いは何か? COGS(売上原価) は製品やサービスの直接的なコスト(例:原材料、直接労務)を指します。 営業費用 はそれ以外の、事業を継続させるために必要な費用—給与、家賃、ソフトウェアサブスクリプション、保険など—を指します。

ミニ例

具体的にイメージしてみましょう。小さなコーヒーロースティング事業が先月以下の結果を出したとします。

項目金額例示元帳勘定
売上収益$60,000Income:Sales
COGS(グリーンコーヒー豆)$20,000Expenses:COGS
営業費用$18,000Expenses:Ops:*
設備ローンの利息$1,000Expenses:Interest
税金$1,000Expenses:Taxes

フル式を使うと計算はシンプルです:

Net;Income = \60,000 - $20,000 - $18,000 - $1,000 - $1,000 = $20,000$

この事業は月間で実質的に $20,000 の利益を上げました。

Beancountでの記録方法

Beancount の構造はこの目的に最適です。アカウントを論理的に整理すれば、純利益は優れた簿記の副産物として自動的に算出されます。

  • すべての収益 を親アカウント Income の下にタグ付けします(例:Income:SalesIncome:Services)。
  • 費用を分割 して直接費と間接費を区別します。直接費は Expenses:COGS、それ以外は Expenses:Ops:SalariesExpenses:Ops:Software などのサブアカウントに振り分けます。
  • 利息と税金はそれぞれ専用アカウントExpenses:InterestExpenses:Taxes)に記録します。これにより、特に税務処理時の分析が格段に楽になります。
  • 定期的に残高を確認 します。基本的な会計等式 Assets = Liabilities + Equity が常に成り立つことを確認してください。

期間末(例:月末)には balance アサーションを使って各アカウントの状態を確認できます。これらのエントリは実際に資金を移動させるものではなく、残高が あるべき 状態であることを宣言し、bean-check が不一致をエラーとして報告します。

; 2025-07-31 Coffee Roaster Enterprises — July close
2025-07-31 balance Assets:Bank:Operating 42000.00 USD
2025-07-31 balance Expenses:COGS 20000.00 USD
2025-07-31 balance Expenses:Ops 18000.00 USD
2025-07-31 balance Expenses:Interest 1000.00 USD
2025-07-31 balance Expenses:Taxes 1000.00 USD
2025-07-31 balance Income:Sales -60000.00 USD

ワンライン純利益クエリ

ここが魔法の部分です。構造化された元帳があれば、単一コマンドで任意の期間の純利益を算出できます。

bean-query books.beancount \
"SELECT period, sum(number) WHERE account = '^(Income|Expenses)' \
AND year = 2025 GROUP BY month"

このクエリは 2025 年の IncomeExpenses アカウントのすべての金額を合計し、月単位でグループ化します。Beancount では収益は負数、費用は正数で表されるため、結果は純利益の 負数 となります。

さらに便利なのは、手動でクエリを実行しなくてもよいことです。Beancount のウェブインターフェースである Fava は、Reports → Income Statement ビューで自動的にグラフ化してくれます。

自動化できる高速インサイト

元帳がテキストファイルだけなので、強力な自動化ワークフローを構築できます。

  • 月次メールダイジェスト: bean-report books.beancount income_statement > net-income.txt を cron ジョブで実行し、毎月 1 日に生成されたテキストファイルを自分宛にメール送信します。
  • 収益性アラート: Git の pre‑commit フックでクエリを走らせ、月初からの純利益がマイナスの場合はコミットを拒否させ、赤字月を認識させます。
  • シナリオモデリング: ビジネスのストレステストをしたいですか? books.beancountscenarios/recession.bean にコピーし、Income エントリを 20% 減らして再度純利益クエリを実行すれば、影響を即座に確認できます。

主なポイント

  • 純利益は真の最終利益です。プラスを保ち、時間経過でのトレンドを把握することが目標です。
  • Beancount は計算式を明示的にし、検索可能でバージョン管理が可能です。隠れた計算式はありません。
  • 整然としたアカウント構造と単一クエリさえあれば、ビジネスが本当に利益を上げているか常に把握できます。

Beancount.io の紹介

· 約6分
Mike Thrift
Mike Thrift
Marketing Manager

現代の簿記が重要な理由

まだスプレッドシートで投資を管理していますか?スプレッドシートは汎用性がありますが、投資ポートフォリオが拡大するにつれて扱いにくくなり、ミスが起きやすくなります。そこで登場するのが Beancount.io です。エンジニアと金融ミニマリストを念頭に置いて設計された、株式や暗号通貨ポートフォリオの管理に特化した洗練されたが使いやすい投資トラッキングプラットフォームです。強力な機能と直感的なインターフェースを組み合わせ、投資トラッキング体験を効率化します。

2019-09-07-introduction-to-beancount

支出

損益計算書

貸借対照表

複式簿記:正確性の基盤

Beancount.io は、世界中の金融機関で採用されている実績のある複式簿記の原則に基づいて構築されています。このシステムは、シンプルでありながら強力な概念――すべての金融取引は完全にバランスしなければならない――を通じて数式的な正確性を保証します。

複式簿記では、各取引は少なくとも二つのエントリ――借方(+)と貸方(-)――を異なる勘定科目に記録します。この組み込みの検証システムにより、バランスが取れない取引を記録することは事実上不可能となり、財務記録の正確性と信頼性が保たれます。

1970-01-01 open Income:BeancountCorp
1970-01-01 open Assets:Cash
1970-01-01 open Expenses:Food
1970-01-01 open Assets:Receivables:Alice
1970-01-01 open Assets:Receivables:Bob
1970-01-01 open Assets:Receivables:Charlie
1970-01-01 open Liabilities:CreditCard

2019-05-31 * "BeancountCorp" "Salary of May 15th to May 31st"
Income:BeancountCorp -888 USD
Assets:Cash 888 USD

2019-07-12 * "Popeyes chicken sandwiches" "dinner with Alice, Bob, and Charlie"
Expenses:Food 20 USD
Assets:Receivables:Alice 20 USD
Assets:Receivables:Bob 20 USD
Assets:Receivables:Charlie 20 USD
Liabilities:CreditCard -80 USD

上記二つの例から分かるように、すべての取引は会計等式を満たす必要があります。

Assets = Liabilities + Equity(aka Net Assets)

Beancount の構文(Martin Blais)と、Jakob Schnitzer が開発した Web プロジェクト Fava を使用してこのサイトを構築しています。取引のいずれかの足がゼロに合計されていない場合は、即座に警告が表示されます。

エラーアラート

これで台帳の正確性をどのように保証しているかが分かりますね。では「勘定科目」とは何でしょうか?

勘定科目の理解:水バケツのたとえ

財務勘定科目を相互に接続された水バケツのシステムと考えてみてください。お金はバケツ間を水のように流れます。このたとえにより、複式簿記が直感的に理解できます:ある勘定科目から別の勘定科目へ資金を移すことは、バケツからバケツへ水を注ぐことと同じで、システム全体の水量(資金)は一定のままです。

Beancount.io では以下の5種類の勘定科目が用意されています。

  1. Income — 金額は常に負(借方)です。収入が発生すると「Income」勘定が借方に記録され、資産勘定にクレジットされます。
  2. Expenses — 金額は常に正(貸方)です。支出が発生すると資産または負債から「Expenses」勘定へ資金が流れます。
  3. Liabilities — 金額は正またはゼロです。クレジットカードの残高など、増減がサイクルする負債が該当します。
  4. Assets — 金額は正またはゼロです。現金や不動産など、所有する資産の価値がここに記録されます。
  5. Equity — 純資産です。システムが自動的に計算します。Equity = Assets - Liabilities で、あなたの富の程度を表します。

上記キーワードでカスタマイズした勘定科目を開設できます。

1970-01-01 open Assets:Cash
1970-01-01 open Assets:Stock:Robinhood
1970-01-01 open Assets:Crypto:Coinbase
1970-01-01 open Expenses:Transportation:Taxi
1970-01-01 open Equity:OpeningBalance

商品を使った高度な投資トラッキング

Beancount.io は株式から暗号通貨まで、さまざまな投資を正確に追跡できます。複雑な投資シナリオの例を見てみましょう。たとえば、2014 年に 1 ビットコイン 100 USD で 10 ビットコインを購入した場合は次のように記録します。

2014-08-08 * "Buy 10 Bitcoin"
Assets:Trade:Cash -1000.00 USD
Assets:Trade:Positions 10 BTC {100.00 USD}

そして 3 年後にそれらを 1 ビットコインあたり 10,000 USD の価格で売却した場合は次のように記録します(@ 10,000.00 USD が単価を示します)。

2017-12-12 * "Sell 2 Bitcoin"
Assets:Trade:Positions -2 BTC {100.00 USD} @ 10,000.00 USD
Assets:Trade:Cash 20,000.00 USD
Income:Trade:PnL -19,800.00 USD

同じ取引を @@ 20,000.00 USD と書くと、合計 20,000 USD の価格で売却したことを意味します。

2017-12-12 * "Sell 2 Bitcoin"
Assets:Trade:Positions -2 BTC {100.00 USD} @@ 20,000.00 USD
Assets:Trade:Cash 20,000.00 USD
Income:Trade:PnL -19,800.00 USD

取引のすべての足(-2 BTC {100.00 USD} を含む)は常にゼロに合計されます。

{100.00 USD} のコストタグは重要です。なぜなら、同じ商品でも取得価格が異なる場合があるからです。

100 BTC {10.00 USD, 2012-08-08}
10 BTC {100.00 USD, 2014-08-08}

プロセスを簡略化したい場合は、勘定科目を FIFO または LIFO で開設できます。FIFO は「先入れ先出し」、LIFO は「後入れ先出し」を意味します。米国では IRS が FIFO を使用して損益と税金を計算します。

1970-01-01 open Assets:Trade:Positions "FIFO"

その後、-2 BTC {} のように省略形で売却指示を出すと、Beancount が自動的に FIFO 戦略を適用し、最も古い商品を売却します。

Beancount.io の始め方

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

Beancount.io で金融の旅を始めましょう ― プロモーション期間中は無料!

Beancountで学ぶ簿記の基本:プレーンテキストで実現するクリーンな帳簿

· 約9分
Mike Thrift
Mike Thrift
Marketing Manager

お金の流れが分からなければ、ビジネスを舵取りできません。 正確な帳簿は、推測を洞察に変えます。 (Investopedia)

すべての事業主、フリーランサー、スタートアップ創業者は、やがて同じ現実に直面します。財務の混乱は成長の殺し屋です。キャッシュフローの全体像が見えなければ、盲目的に飛び回ることになります。では、コードに対して持つのと同じ精度とコントロールで財務を管理できたらどうでしょうか。プレーンテキストファイルで動作する強力なオープンソース会計システム、Beancount が登場します。

2019-03-24-bookkeeping-basics

このガイドでは、簿記の基本を順を追って解説し、Beancount を使って堅牢で軽量、かつ透明性の高い財務ワークフローを構築する方法を示します。

簿記とは?

簿記は、事業が行うすべての財務取引を体系的かつ継続的に記録することです。収益、費用、資産(所有物)、負債(負っているもの)を日々追跡する discipline です。

Beancount の世界では、これらの記録は専用ソフトに閉じ込められません。シンプルで人間が読めるプレーンテキストファイルに保存されます。このアプローチにより、Git などのツールで財務履歴をバージョン管理でき、ソフトウェアプロジェクトと同様に管理できます。すべてのエントリは、二重仕訳のバランス規則に従い、自動的にチェックされ、常に正しい帳簿が保たれます。 (beancount)

なぜ重要なのか

綿密な簿記は、単なる事務的な整理ではなく、戦略的優位性です。

  • 税務の自信: 税シーズンになると、整った記録が最強の味方になります。IRS は所得と控除の明確な書類を求めます。適切に管理された元帳があれば、自信を持って申告でき、監査の可能性を大幅に短縮できます。 (IRS)
  • 意思決定の鋭さ: 価格は十分か?特定のサービス契約は本当に利益を生んでいるか?サブスクリプション費用は暴走していないか?損益計算書や貸借対照表といった財務諸表は、価格漏れやコストの逸脱、キャッシュフローの穴を明らかにし、経営者や投資家に賢明な選択に必要なデータを提供します。 (Investopedia)
  • 資金調達の容易さ: 貸し手や投資家は感覚で決めません。資金を振り込む前に財務諸表の提出を求めます。整った帳簿があれば、数秒で貸借対照表や損益計算書を生成でき、プロフェッショナリズムと財務健全性を示せます。 (Investopedia)
  • 不正・エラーの警告: 銀行明細と帳簿の定期的な照合は、ミスに対する第一線の防御です。このシンプルな習慣により、重複請求や銀行エラー、詐欺行為を早期に発見し、重大な問題になる前に対処できます。 (IRS)

7 ステップのプレーンテキスト設計図

始める準備はできましたか?以下の手順で、Beancount を基盤とした簿記システムをゼロから構築します。

1. 事業用口座と個人用口座を分離する

これは絶対に譲れない最初のステップです。専用の事業用当座預金口座を開設し、必要に応じて事業用クレジットカードも取得します。資金を混同すると会計が悪夢になり、個人と事業の負債ラインが曖昧になります。正確な控除と法的保護のために、クリーンな分離は必須です。 (Small Business Administration)

Beancount では、open ディレクティブで口座の存在を宣言します:

; 口座のオープニングバランス
2025-07-22 open Assets:Bank:Business USD
2025-07-22 open Assets:Bank:Personal USD

2. 簿記システムを選択する

Beancount は 二重仕訳 手法を採用しています。これは何世紀にもわたる会計の金字塔です。原則はシンプルです:すべての取引は少なくとも二つの口座に影響します。ある口座からの借方には、必ず別の口座への貸方が対応します。このシステムの魔法は、すべての口座の合計が常にゼロにバランスすることです。Beancount はこの規則を自動的に強制するため、タイプミスや論理エラーは即座にフラグが立ちます。バランスが取れない帳簿は存在できません。 (beancount)

3. 会計基準を決める

主に次の二つから選択します:

  • 現金主義: 収入は現金が入ったとき、費用は支払ったときに記録します。シンプルでキャッシュフローを直接反映します。
  • 発生主義: 収入は「稼いだ」時点(例:請求書を送ったとき)に、費用は「発生した」時点(例:請求書を受け取ったとき)に記録します。特に成長中の企業にとって、財務の実態とパフォーマンスをより正確に把握できます。 (Investopedia)

以下は発生主義取引の例です。請求書を送った時点で収入を Assets:AccountsReceivable に計上し、クライアントが支払ったら現金を銀行口座に移動します。

; 発生主義例:請求書発行、後で入金
2025-07-22 * "Design invoice #101"
Assets:AccountsReceivable 3000.00 USD
Income:Design

2025-08-15 * "Client pays invoice #101"
Assets:Bank:Business 3000.00 USD
Assets:AccountsReceivable

4. ツールスタックを組む

Beancount の魅力は、ミニマリストでモジュラーな構造です。コアスタックは次の通りです:

  • エディタ + Git: 好きなテキストエディタで取引を記録し、Git でバージョン管理することで、すべての変更履歴を監査可能にします。
  • bean-report / bean-balance / Fava: bean-report などのコマンドラインツールや、見た目が美しいウェブインターフェース Fava が即座に財務諸表やダッシュボード、強力なフィルタリング機能を提供します。
  • インポーター: コミュニティが構築した豊富なインポーターが、CSV、Plaid、Stripe、PayPal などの API から銀行フィードに接続し、データ入力の多くを自動化します。

5. すべての取引にカテゴリを付ける

整理された「勘定科目表」は、洞察に満ちたレポートの土台です。事業に合ったカテゴリを階層的に定義し、取引を記録するたびに細かく分類します。

2025-07-30 * "AWS monthly bill"
Expenses:Hosting:AWS 124.50 USD
Assets:Bank:Business
tag: "ops"

この例では、費用は Expenses:Hosting:AWS に明確に分類されています。tag: "ops" を付与することで、主要カテゴリに関係なく「運用費用」だけを抽出するレポートが作れます。 (IRS)

6. 原本書類を安全に保管する

IRS はデジタルコピーの領収書や請求書を喜んで受け入れます。紙の領収書はスキャンし、メール請求書は Google Drive や Dropbox などのクラウドフォルダに転送します。その後、Beancount エントリにメタデータとして直接リンクを貼ります。これにより、完全に閉じた自己完結型の記録が完成します。

; 領収書画像をメタデータでリンク
2025-07-18 * "Team lunch"
Expenses:Meals 85.10 USD
Assets:Bank:Business
receipt: "receipts/2025-07-18-team-lunch.jpg"

7. 簿記を習慣化する

継続は力なり。先延ばしにすると簿記はストレスフルで時間がかかる作業になります。毎週または毎月の「Bean-day」を設定し、取引のインポート、口座の照合、財務レポートの確認を行いましょう。このシンプルなルーティンが、四半期ごとの慌ただしい作業を、短時間で完了できるビジネスヘルスチェックに変えます。 (IRS)

DIY とプロの支援

  • DIY: 取引量が予測可能なフリーランサーや小規模事業者にとって、Beancount を使った DIY アプローチは非常に効果的です。チャート・オブ・アカウントの妥当性確認や全体の方向性を確かめるために、税理士と一度だけ相談するのが賢明です。
  • プロのレビュー: 事業が拡大し取引が複雑化したり、コンプライアンスリスクが高まったりした場合は、定期的にプロのブックキーパーや会計士にレビューしてもらう価値があります。Beancount は真実の情報源として使い続け、必要なレポートだけをエクスポートして提供すれば OK です。

クイックスタートチェックリスト

  • 事業用と個人用の銀行口座を分離する。
  • Beancount のスターターレポジトリをクローンし、accounts.bean に口座を定義する。
  • 現金主義か発生主義かを選び、徹底する。
  • 銀行(CSV)、Stripe、PayPal などのインポーターを設定してデータ入力を自動化する。
  • すべての取引にタグと明確な説明文を付ける。
  • 週次または月次で元帳を銀行明細と照合する。
  • Fava または bean-report を使って月次の損益計算書、貸借対照表、キャッシュフロー報告書を生成する。
  • .bean ファイルを定期的にバックアップする(Git + オフサイトストレージ)。

さらに読む

始める準備はできましたか? Beancount をインストールし、最初のエントリをコミットして、スプレッドシートの曖昧さからプレーンテキストの明快さへと移行しましょう。ハッピー・ビーンズキーピング!