Ledger CLIで家計簿をつけたい！入門5 BS(貸借対照表)を見る

[←前編](https://qiita.com/kikeg/items/0362a52133abc22ad8ee)

前回は複式簿記の基礎的な話をしました。あまりにもふわっとしてましたが、銀行編とクレカ編の説明を後からするとこうなります。Ledger CLIをまだインストールしていない人はこちらから順に追ってください↓

https://qiita.com/kikeg/items/07c2794e226b9ae18205

この記事では明確な記述のために数式を使っていますが、稚児の遊戯の如き数式なので、横に書いてる日本語と同じ意味です。数式が嫌いな人は雰囲気だけで大丈夫です。

# 貸借対照表って何?

貸借対照表は自分がどれだけ資産と負債を持っていて、トータルで見たら貯金があるのか借金があるのかが分かる指標です。前回の図に書き足したのでこれを見てください。

![貸借対照表.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2278753/5a9338c0-9cf7-af04-6357-3ea37add40b3.png)

貸借対照表というのは前回触れた勘定科目のうち、資産、負債、純資産だけを計算します。上の図で純資産、資産、負債を囲んでる部分です。そして貸借対照表では資産は常に負債と純資産の合計に等しいというお約束があります。ググってください、すぐ出てきます。

以下妙な説明が続きますが、興味がない人はぜひ実践編までスクロールして飛ばして読んでください。

さて、これを数式で表現します。$V_t(x)$を時間$t$時点での勘定科目の残高を表す関数としましょう。一般世界の貸借対照表では負債と純資産を負の数で表さないためにLedger CLIでの残高の負数ということに留意すると

```math
V_t(\mathit{Assets}) = -V_t(\mathit{Liabilities}) + -V_t(\mathit{Equity})
```

となります。これを移項すると

```math
V_t(\mathit{Assets}) + V_t(\mathit{Liabilities}) + V_t(\mathit{Equity}) = 0
```

となります。この式本当なのでしょうか?実はLedger CLIで計算するとこの通りにはなりません。じゃあ実世界の複式簿記を正しくモデリングしてないじゃないか！と苦情が来るかもしれませんが実はそうでなくて、同じ事象を違う形で表現しているだけだと言うことを今から調べていきます。

# 導入

まず残高$V_t$とはなにかということを考える必要があります。残高ってなんでしょうか?銀行口座の残高とか、手持ち現金の残高ははっきり決まってますが、今ある残高は以前引き出したり預け入れした結果残ってる額が残高ということもできます。これを$t$における取引で勘定科目$X$の増加額を$v_t(X)$と記述すれば、

```math
\sum_{u = 0}^{t} v_u(X) = V_t(X)
```

と書けます。単に**これまで預け入れた額の合計から引き出した額の合計を引いたら今の残高**と言ってるだけです。ちなみに、面倒なのでここから先ある整数時間$t$に対して一つの取引1:1で対応すると仮定しましょう。言ってみればtを時間ではなく取引に順番につけたIDとして扱います[^infinitegeneral]。そして$t=0$のときは取引が一つも存在しない状態だとします。

# 直観的な説明

実はあれこれ言わなくてもこの図をぐっと睨むだけで分かることがあります。

![貸借対照表.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2278753/5a9338c0-9cf7-af04-6357-3ea37add40b3.png)

さっき$v_t(X)$を取引$t$における$X$の増加した額（資産でいうと預け入れ額）として定義しました。この時、貸借対照表の区切る範囲である資産、負債、純資産全体での増加額を考えてみます。

* もし取引$t$が資産、負債、純資産で閉じた取引だとします。例えば、銀行編やクレカ編で見たとおり、初期の資産や負債の残高は純資産から移動したとして扱われます。

```ledger
2022/12/01 初期残高
    Assets:Banks:Okane            10,000 JPY
    Equity:Opening Balances      -10,000 JPY

2022/12/01 初期残高
    Liabilities:Card:Yellow      -30,000 JPY
    Equity:Opening Balances       30,000 JPY

; ...
```

このような取引の場合貸借対照表の範囲の$\sum v$はゼロのままです。資産が増えた分純資産が減る、負債が減った分純資産が増えるように書いてるんだから当然のことですが、さっきの図を**有向グラフと考えて**みても、この中でいくら辺の流量があっても流入、流出があるわけではないので$\sum v$に変化はありません。

逆に言えば、収入、支出が関わると貸借対照表の$\sum v$に影響があるわけです。図を見れば（あるいは見なくても）収入はお金が湧いてくる源、蛇口で、支出はお金を吸い込む場所、排水口と考えることができます。間に何もなければ当然蛇口の出てくる量=排水口に流れる量になりますが、途中でペットボトルに水をためてる人がいたりペットボトルの水を追加で流してる人がいたらそうはなりません。

もしペットボトルを構えている人がいたらどうなるかというと、ペットボトルの中身が増えてるなら蛇口の量＞排水口の量だし、減ってるなら逆でしょう。もっと言えば貸借対照表というペットボトルの中身の増加量は蛇口の量-排水口の量になるはずです。

```math
v_t(\mathit{Assets}) + v_t(\mathit{Liablities}) + v_t(\mathit{Equity}) = v_t(\mathit{Income}) - v_t(\mathit{Expenses})
```

ここでさっきの$\sum v(X) = V(X)$を思い出すと任意の$t$に対して

```math
V_t(\mathit{Assets}) + V_t(\mathit{Liablities}) + V_t(\mathit{Equity}) = V_t(\mathit{Income}) - V_t(\mathit{Expenses})
```

が言えます。あれ、現実世界の複式簿記では

```math
V_t(\mathit{Assets}) + V_t(\mathit{Liablities}) + V_t(\mathit{Equity}) = 0
```

なんではなかったでしたっけ?ここにトリックがあります。Ledgerの世界で出てきた$V_t(\mathit{Income}) - V_t(\mathit{Expenses})$ってなんでしょう?収益-費用、これってつまるところ**利益**です。実は一般世界の会計では、年度末にこの利益を**利益余剰金**として純資産に組み込みます。数式でいうと

```math
V_t(\mathit{Equity:利益余剰金}) = -(V_t(\mathit{Income}) - V_t(\mathit{Expenses}))
```

を両辺に足しています。なのでこの操作を手で行うかやらないかだけの差ということになります。そして、会社では商品ごとやセクターごとに利益を計算して事業継続性について考える必要がありますが、家計簿においてはあまり真面目に利益について考える必要は無いので、単に**資産、負債、純資産の合計が利益に等しい**と思っておけば十分な気がします。

# 実践

さて御託はいいからそろそろコマンドを出せよということになると思います。次のコマンドを実行しましょう。

```shell-session
$  ledger -f root.ledger bal ^Assets ^Liabilities ^Equity
          99,855 JPY  Assets
         -25,000 JPY    Bank:Okane
         124,855 JPY    Banks:Okane
        -113,878 JPY  Equity:Opening Balances
            -470 JPY  Liabilities:Card:Yellow
--------------------
         -14,493 JPY
```

字面から想像できるように、Assets, Liabilities, Equityから始まる勘定科目のbal (balance)を計算するコマンドです。つまり、これが（利益余剰金を抜いた）貸借対照表です。どうやらこの期間に限って言えば赤字のようです。

比較のために、資産と負債だけに注目して残高を見てみましょう[^equity]。

```shell-session
$ ledger -f root.ledger bal ^Assets ^Liabilities
          99,855 JPY  Assets:Banks:Okane
            -470 JPY  Liabilities:Card:Yellow
--------------------
          99,385 JPY
```

これから分かることは「今はまだ債務超過ではないね」ということです。ただ、純資産の初期残高が113,878円だったことを考えると若干減っています。この減少分が-14,493円で赤字だねということになります。

この辺はっきりしないように見えますが、例がシンプルすぎるきらいもあります。とはいえ私の家計簿を出したいわけではないのでご容赦ください。また、シンプルな例なので手計算して検算してみるのもいいかもしれません。

さて、明日はPL（損益計算書）をやろうと思ってましたが多分超薄い記事になります。

https://qiita.com/kikeg/items/6bd69611d6e6a8665c19

[^infinitegeneral]: 少なくとも私達の家計簿にせよ会社の会計帳簿にせよ取引の個数は有限個なので、こう仮定したところで一般性を十分失いません。もしある時間tに対して有界でない個数の取引が存在した場合色々怪しくなりますが、我々は無限回取引できないので大丈夫です。
[^equity]: 誰か家計簿の世界で正しいEquityの活用方法を教えて下さい