青色申告にhledgerを使い始めた話(テキストベース会計のススメ)

今年は青色申告用の会計簿にhledgerを使っている。

去年はマネーフォワード クラウド会計を試したのだがあまり良い体験ではなかったのは前の記事で書いた通り。

vector.hateblo.jp

そういうわけで、別の会計ソフトを使うことにしたのだがその際の要件が下記のようになっている

  • 青色申告決算書に必要な集計済み情報が出力できる。ただしe-Taxに手で転記してもいいので国税庁のテンプレートにしたがった出力そのものができる必要はない
  • 経営の把握という意味での本来の会計機能は不要(フリーランスで収入に対する経費の割合が低いのであまり把握する意味がない)
  • UIが悪くないこと。ExcelやテキストベースなどでもOK
  • オフラインで使えること。税務と違い会計はそうそう仕組みが変化しないため、一度作業できるようにしたらそのまま何年も使い続けられるものが好ましい。クラウドサービスは頻繁に変更が入ったり、値上げしたり、サービス終了するリスクがある
  • できれば無料であること、ついでにExcelも持っていないのでExcelでないものでも使えること

そういう条件で調べるとPlain Text Accountingというやり方とソフトウェアがあるのがわかった

Plain Text Accounting とは

plaintextaccounting.org

こんな感じで複式簿記が付けられる。

2025-01-01 大家
  expenses:地代家賃         50000
  assets:cash

2025-01-03 JR東
  expenses:旅費交通費      200
  assets:cash            -200 ; ←この-200は付けても付けなくても同じ

ExcelCSVみたいに行志向ではなく、一つの記録が複数行になる。理由としては1行が長すぎると情報量的に手入力しづらい、幅が広くなりすぎる、追加情報を記述しづらいなどがありそう。その場合Yamlでもいいような気もするが、こういう形式が普及しているというならそれでいい

日本はともかく、英語圏では一定のユーザーがいるらしく情報もフォーラムも整っていてソフトも複数あるということで手を出してみた。

Hledger

おおむね3つ人気ソフトがあるらしい。Ledger (検索不能なためLedger Cliと書かれる), hledger, Beancountの3つだ。 Ledgerが一番古く2003年からある、自分はこれから試したがhledgerの方が便利な機能が多そうだったためhledgerを使っている。Beancountは試していない

ちなみにフォーマットは似通っているが、それぞれ拡張(といいつつ取引先の記述などの基本的な部分含む)はまったく互換性がないので、同じファイルで複数ソフトの相互利用は難しい

それぞれC++, Haskell, Pythonで書かれており、自分で手を入れられるように慣れてる / 使いたい言語で選ぶ人もいるらしいが、どれも活発にメンテされているのでそこまで気にしなくてもいい気もする

青色申告のためだけの会計簿の付け方

  • 1年単位でファイルを作る。hledgerは複数年にまたがった使い方もできるが、個人事業主の場合 1年単位で把握できれば良く、事業主借 / 事業主貸も年始に0にリセットするし現金や口座残高も専用口座がない場合は適当に設定するものであるため連続性は不要
  • 数年にわたる減価償却費がある場合だけは注意が必要。また減価償却費の計算もhledgerは実施できないため自分で計算して計上する必要があることに注意
  • hledgerにはcsvなどをインポートする機能もある、ただそのルールは自分で記述する必要がある。それなりに使えるがスクリプト言語などに慣れている人は慣れた言語で変換スクリプトを書いたほうが早いかもしれない
  • フォルダはgitなどで管理すると良い。Dropboxなどなんとなくでリビジョン管理してくれるソフトがあるのであればそれでもいいだろう
  • 消費税については自分はまだやっていないのでやるときに考える予定

2025.ledger

; 大項目にはデフォルト設定的に英語のassets / expensesなどの名前を使ったほうがいい
; とはいえ長いのでaliasで短縮する。このaliasはhledger独自機能
; 資産 / 経費 / 収入 / 負債
alias a = assets
alias e = expenses
alias r = revenue
alias l = liabilities

2025-01-01
  expenses:地代家賃         50000
  l:事業主借

; 取引先はhledgerでpayeeと呼称される
; | を使うと左側がpayee, 特に | を付けないと全体がpayeeになる
; 取引先を指定せずにメモだけしたい場合は "2025-01-03 | 新宿から池袋" のようにする

2025-01-03 JR東 | 新宿から池袋
  expenses:旅費交通費      200
  l:事業主借

2025-01-20 電気代 | 100000を按分
  e:水道光熱費     30000
  l:事業主借

; 収入
2025-01-25 取引先A
  a:bank       100000
  r:sales

; ちなみに日付の順番はバラバラでいい
; 自分は収入と支出や毎月固定の支出などは位置をなんとなくでグループ化しても見やすい
2025-01-01 取引先B
  a:bank       150000
  r:sales

2025-02-25 取引先A
  a:bank       100000
  r:sales

2025-02-01 取引先B
  a:bank       150000
  r:sales

cliでの操作はこんな感じ

$ export LEDGER_FILE=2025.ledger

# ざっくり
# 青色申告 損益計算書 / 貸借対照表

$ hledger bal
              500000  assets:bank
               50000  expenses:地代家賃
                 200  expenses:旅費交通費
               30000  expenses:水道光熱費
              -80200  liabilities:事業主借
             -500000  revenue:sales
--------------------
                   0  

# 月ごとの収入・支出
# 青色申告 月別売上(収入)金額及び仕入金額

$ hledger bal -M
Balance changes in 2025-01-01..2025-02-28:

                      ||     Jan      Feb 
======================++==================
 assets:bank          ||  250000   250000 
 expenses:地代家賃    ||   50000        0 
 expenses:旅費交通費  ||     200        0 
 expenses:水道光熱費  ||   30000        0 
 liabilities:事業主借 ||  -80200        0 
 revenue:sales        || -250000  -250000 
----------------------++------------------
                      ||       0        0 

# payeeごと
# 青色申告 売上(収入)金額の明細 / 仕入金額の明細
# ※Income StatementのExpensesには資産計上して減価償却するものが含まれないため注意

$ hledger is --pivot payee --sort-amount
Income Statement 2025-01-01..2025-02-25

          || 2025-01-01..2025-02-25 
==========++========================
 Revenues ||                        
----------++------------------------
 取引先B  ||                 300000 
 取引先A  ||                 200000 
----------++------------------------
          ||                 500000 
==========++========================
 Expenses ||                        
----------++------------------------
          ||                  50000 
 電気代   ||                  30000 
 JR東     ||                    200 
----------++------------------------
          ||                  80200 
==========++========================
 Net:     ||                 419800 

最後に

そういうわけで自分は最小限の手間で記帳し集計できる環境が整い快適である。学習コストが莫大にかかったためあまり人に勧める方法ではないが、

  • CLIでの作業に抵抗がない
  • 英語がわかる (Plain Text Accountingの資料はほぼすべて英語のため)
  • 一人で記帳している

という方は試してみてもいいかもしれない。