テキストで複式簿記するツール ledger のメモ

## 背景

* VIM で家計簿つけたり, 帳簿や会計したい
* コマンドラインで帳簿や会計したい
* Python などでスクリプト処理したい
* **テキストで複式簿記を極め, キャッシュフロー計算を自動化し, 毎月の銀行引き落としや支出で残高不足 or 赤字に怯えることなく, ささやかにかつやすらかに日々を生き延びることができるようになりたい** :dollar:

## Plain text accounting

テキストで会計のまとめサイト

https://plaintextaccounting.org/

いろいろまとまっています. ありがとうございます.

## Ledger 

この手のツールの始まり? C++ 実装でよい

https://www.ledger-cli.org/

vim plugin あります.

https://github.com/ledger/vim-ledger

### 入門, cheat sheet

https://devhints.io/ledger

https://patrickskiba.com/ledger-cli/2019/12/07/introduction-to-ledger-cli.html

### 入力例

UTF-8 文字使えます. 数字のあとにスペースあけて記述する場合, 通貨は適当なシンボルを使えます.

```
2015/10/12 Exxon
    Expenses:Auto:Gas         10.00 JPY
    Liabilities:MasterCard  -10.00 JPY
```

借方(debt), 貸方(credit) は一致するはずなので, 貸方の値は省略できます.

```
2015/10/12 Exxon
    Expenses:Auto:Gas         10.00 JPY
    Liabilities:MasterCard
```

`Expenses`, `Liabilires` などは, あとで grep したり ledgerable などで可視化したりなどで使うので, 統一したものを使うのがよいでしょう.

### 大項目(?)

会計や複式簿記の入門書あたりを参考ください.

B/S(Balance sheet), P/L(Profit and loss)など財務諸表を作るのに, 仕分けは以下の 5 個に分類されます.

* Expenses(支出)
* Liabilities(負債)
* Assets(資産)
* Equity(資本)
* Income(収入)

https://www.riaison.com/AccountingPrePrimary/bspl.html

https://kaplan.co.uk/docs/default-source/pdfs/study-options-demos/ba3-study-text-chapter-4.pdf

### お賃金を銀行振込でいただいた

お賃金を銀行口座に預け入れたということで, 銀行口座が増え, Income は減ったで記載します.

```
9/29  My Employer
    Assets:Saving                           $500.00
    Income:Salary                            $-500.00
```

日本だと普通預金(Saving)がよく使われるでしょう. 米国だと Checking(当座預金)のようですね.
 
### クレカ引き落とし

銀行口座からクレジットカードの引き落としが合った場合.
借方にクレカの Liabilities, 貸方に銀行口座を指定します.

```
2019/12/11 Paying off card
    Liabilites:CreditCard:Apple               $4900
    Assets:Saving 
```

その他いろいろ記述の機能があるので, 詳細は document 参照ください.
single page で grep しやすいですね.

https://www.ledger-cli.org/3.0/doc/ledger3.html

### サンプル

#### 毎月の支払い(periodic transaction, budget)を指定する

チルダを指定します.

```
~monthly
	Expenses:毎月		10000 JPY
	Assets
```

期間を指定もできます.

https://www.ledger-cli.org/3.0/doc/ledger3.html#Periodic-Transactions

```
~monthly from 2019/10/01 to 2022/03/30
	Expenses:Lens:Otus100	10000 JPY
	銀行口座
```

毎月の支払いだと, そのままでは report に出てこないようです.

期間指定だと,

```
$ ledger -f input.ledger --monthly --budget register ^expenses
```

でいくらか表示されます(が, 完全ではない模様).

### 役立つ機能

#### 資金が尽きるのはいつかを調べる

https://www.ledger-cli.org/3.0/doc/ledger3.html#Budgeting-and-Forecasting

Periodic Transaction(毎月の出費など)と組み合わせることできます

### 変数を使う

あとで数字を変えたりとかしたいときあります.
`define` でいけます.

https://www.ledger-cli.org/3.0/doc/ledger3.html#Command-Directives

```
define var_name=$100

2011/12/01 Test
    Expenses  (var_name*4)
    Assets
```

為替レートなどは, 別途 ledger 用に特化した記述方式があります(要調査)


### hledger

Haskell 実装
https://hledger.org/


### beancount

python 実装
http://furius.ca/beancount/

## データのプロット

gnuplot と組みあわせる例

https://github.com/esovetkin/ledger-plots

Report Scripts for Ledger CLI with Gnuplot
https://www.sundialdreams.com/report-scripts-for-ledger-cli-with-gnuplot/

最近の gnuplot はオシャンティにプロットできていいですね

### ledget2html

HTML table で出力してくれます.

https://github.com/lifepillar/ledger2html

### VIM plugin

https://github.com/ledger/vim-ledger
 
私の場合は Vundle 使っていましたので, `~/.vimrc` に以下のように記述しました.

```vimscript
" ledger
Plugin 'ledger/vim-ledger'
```

## オシャンティそうな UI

* Prudent  https://prudent.me/
* fava(beancount) https://github.com/beancount/fava
* ledgerble https://github.com/sbridges/ledgerble
  * mac prebuilt があってよい 
* ledger-analytics(2018 から更新なし) https://github.com/kendricktan/ledger-analytics


現状 ledgerble(Electron app) or fava が良さげです.

ledgerble のサンプルはこんなかんじ.

<img width="1152" alt="Screen Shot 2020-05-23 at 3.01.08.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/36275/e3c038e1-3746-ace6-7cc6-bad6bdac4c95.png">

 
fava はこちらにオンラインサンプルがあります.

https://fava.pythonanywhere.com/example-beancount-file/income_statement/

### mobile(Android) app

* https://github.com/xuhcc/beancount-mobile 

## 参考文献

Linux/MacでCUIで複式簿記を扱える『Ledger』コマンド
https://orebibou.com/2016/07/linuxmac%E3%81%A7cui%E3%81%A7%E8%A4%87%E5%BC%8F%E7%B0%BF%E8%A8%98%E3%82%92%E6%89%B1%E3%81%88%E3%82%8B%E3%80%8Eledger%E3%80%8F%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89/

## TODO

* [ ] Jupyter lab + beancount + matplotlib あたりで会計データのデータ解析とプロットを極める
* [ ] テキスト複式簿記を極め, テキスト複式簿記 vtuber に転生する