Ledger — 固定費のトラッキング

Ledger-cliを使ってこれは便利!というような小技を一つずつ紹介する企画の第1弾です。

固定費とは

家計でもビジネスでもNPOなどの団体でも、すべての 経済活動体 には 固定費 (fixed cost/expenses)とよばれる費用があります。固定費は金額がカチッと固定しているから固定費と呼ばれるわけではありません。活動体の活動水準との関連性があまり高くなく 定期的 に生じる支出(expenses)のことです(注1)。

いろいろな家計簿サイトの やりくりヒント集 を見ると、内外問わず重要なのは:

「固定費をちゃんと把握して抑制すること」

と書かれています(ビジネスの領域でも事情は同じです)。

では家計の中の固定費とはどんな費目(account)でしょうか。

家計における固定費の中身

家計における固定費はおよそ表1のようなものです。

表 1: 固定費のおもな費目と具体的な内容例
費目(account) 具体的内容例
住居費 ローン、固定資産税、家賃など
諸会費 年会費、メンバーシップ費など
保険 健康保険、生命保険などの保険料
通信費 電話、スマホ、インターネット回線など
水光熱費 電気、ガス、水道、灯油など
教養教育費 学校、習い事など
車両費 駐車場、税金、定期点検費、車検など

固定費をどのように算出するか

1のように多岐にわたる費目の支出をどうやって算出したら良いのでしょうか?

家計簿アプリや経理システムの中には、固定費を抽出して計算したり図に書いたりする機能を持っているものもあるようです。

もちろんLedgerでも 腕力 をつかって、表1 の支出費目(アカウント)を or でつないでクエリ(検索・抽出)すればできます(・・・は中略)。

$ ledger reg ^expenses and ( 住居費 or 諸会費 or 保険 or 通信費 or ・・・ or 車両費)

しかし日常的にこんなことはやってられません。

またこの固定費の内容は人によって(企業団体によって)異なります。同一人であってもライフスタイルの変化にともなって内容が変わってきます。そうした変化に即応できないと使い物になりません。

Ledgerの方法(1)

Ledgerで固定費を扱うための一つの方法は、Ledgerの 自動転記 (automated transaction)と 仮想アカウント (virtual accounts)を使う方法です。

Ledgerの自動転記に関する説明記事の中に次のような記述がありました(出典)。

account FixedCost
= /Rent$/ or /Electricity$/ or /Insurance$/ or /Telephone$/
    (FixedCost)                              1

この方法を使えば固定費をきちんと把握するすることが文字通りあっという間に可能になります。

具体的には、Ledgerファイルの冒頭またはユーザの accounts.dat の冒頭に次のような自動転記の定義文を追記します。それだけです。

account FixedCost
= /住居費$/ or /諸会費$/ or /保険$/ or /通信費$/ or ・・・ or /車両費$/)

こうしておけば、固定費は次のように簡単にクエリできます。

$ ledger reg FixedCost

しかし制約があります

この自動転記+仮想アカウントの組み合わせによる方法には、一つだけ不都合があります。固定費を仮想アカウントにすると、いわゆる aux-date が無視されます。

例を上げます。固定費の中には 水道料金 などのように2ヶ月に1回の支払いになっているものがあります。aux-dateは下のトランザクションの [=2021/01/01] 部分のことです。Ledgerではこの日付を使って水道料金を月ごとに振り分けて計算してくれます。

2021/03/01 * 水道料金
    Expenses:水道               1,500 JPY ; [=2021/01/01]
    Expenses:水道               1,500 JPY ; [=2021/02/01]
    Assets:Bank

ところがこれを仮想アカウント= FixedCost でクエリすると、3月に支払った3,000円が1月分と2月分に1,500円ずつに按分されません(注2)。これではaux-dateを使用しているユーザは困ります(注3)。

Ledgerの方法(2)

手っ取り早い解決策は固定費をbal/regするだけのシンプルな単機能のスクリプトを作ることです。 kbal の例は次のとおりです。

#!/bin/bash
#          kbal (固定費をbalするスクリプト)
#
acnt_fc="(水光熱費 or Insurance or Internet or Mobile or 通信費 or 地方税 or 所得税 or 自動車税 or 管理費 or 諸会費 or 駐車場賃料)"

parm=$@
ledger bal ^Expenses and ${acnt_fc}  ${parm}

これだけです。簡単すぎてスミマセン😅

細かい制約はありますが(注4)結構使えます。たとえば:

$ kreg  -M -b 2021/01/01 --collapse
2021/01/01 - 2021/01/31         <Total>                 105,443 JPY  105,443 JPY
2021/02/01 - 2021/02/28         <Total>                  89,424 JPY  194,867 JPY
2021/03/01 - 2021/03/31         <Total>                 103,293 JPY  298,160 JPY
2021/04/01 - 2021/04/30         <Total>                  65,830 JPY  363,990 JPY

$ kbal  -p 2021/02 --depth 2
	  89,424 JPY  Expenses
	  10,100 JPY    Cars
	  21,960 JPY    Insurance
	  20,520 JPY    水光熱費
	   7,561 JPY    租税公課
	  10,700 JPY    管理費
	  18,583 JPY    通信費
--------------------
	  89,424 JPY

あまりにも簡単なのでおまけの情報を。

おまけ

固定費をコマンドラインからクエリしなければいけないケースは実際にはそれほど多くないと思います。むしろ月末の 締め日 に「今月の固定費の状況はどうだったか?」が把握できれば良いので、それならばそのためのスクリプトを書いてしまえばよいわけです。

ならばと、従来から使っていた「特別費・経常費の推移チャート」に固定費を重ね書きしたのが図1です(注5)。赤い折れ線が固定費の推移、青い棒グラフが経常費、ピンクの棒グラフは特別費です。

図1:  特別費、経常費、固定費の推移(サンプル図)

図1: 特別費、経常費、固定費の推移(サンプル図)

ここでいう 特別費 (non-recurring expenses; NRE)は冠婚葬祭などのように例外的に発生する支出です。 経常費 (ordinary expenses; OE)は特別費以外のいわゆる一般的な家計費です。

これで家計における「固定費」のトラッキングは問題なくできるようになりました。めでたしめでたし(注6)😄

Acknowledgements:

Footnotes:


  1. 固定費に対して、経済活動体の活動水準に関連して増減する支出のことを「 変動費 (variable cost)」と呼びます。企業では売上金額、生産量、販売量などが活動水準と関連します。家計では食費、ガソリン代、衣服費、外食費、教養娯楽費、衛生費などの支出が主なものです。 ↩︎

  2. 実アカウントである 水道 でクエリすれば、当然3月支払い分は2月と1月に按分されて表示されます。 ↩︎

  3. 仮想アカウントがaux-dateをrespectしてくれるようにする方法法があるような気がします。しかし現在のところ検索しても解決策が見当たりません。どなたか教えていただけるとありがたいです。 ↩︎

  4. たとえば引数にクォーテーションマークは(このままでは)含められません。たとえば -p 'since 2020/01/01' とかはできません。 ↩︎

  5. 意図的に画像の精細度を落としています。またY軸の目盛り数値もマスクしています。 ↩︎

  6. なお特別費か経常費かというカテゴリ分けと固定費か変動費かというカテゴリ分けの関係は個々のケースではちょっと判断が微妙になります。このあたりになると「きまり」というものは無いので、各自で好みに応じて使い分ければよいようです。 ↩︎