プレーンテキストファイルで「複式」家計簿(1)

はじめに

簿記・会計のまったくの素人が、よりによって、なんでプレーンテキストで複式「家計簿」をつけようとしたのか、その動機とか目的とかは長くなるので後回しにして、まずは、(1) Ledger1のインストール、(2) Emacsの環境設定の方法、続いていわゆる(3) 仕訳帳2のサンプルと報告書のサンプルをおもに自分の備忘のため、副次的には、初めてプレーンテキスト「複式」家計簿に取り組む人(とても少数派かとw)にいくらかでも参考になるようにまとめておきます。

Ledgerのインストール

インストール先のハードウエアは、ThinkPad X230(HDDはSSDに換装済)です。ソフトウエア環境は、Ubuntu16.04/Emacs25.3.2/Ledger3.1.1です。

さてLedger本体のインストールはapt installで一発です:

$ sudo apt install ledger

init.elの設定

次に、EmacsでLedger-modeを使えるようにinit.elを設定します。 use-package の設定が済んでいる場合には、次の数行をinit.elに追加するだけでとりあえず動きます:

;;	ledger-mode
;;
(use-package ledger-mode
  :ensure t
  :defer t
  :mode ("\\.ledger$"))

上の例では、「複式」家計簿の基本データとなる仕訳帳(journal)ファイルの拡張子を .ledger としています。

百聞は一見にしかず

その前に・・・

Ledgerでは、全てのトランザクション3を次の5つの最上位カテゴリに分類して整理することが推奨されています。もちろん、これを変更しても何の問題もありませんが、とりあえず世界共通?のこのカテゴリ分けで行きましょう。

  1. 経費(Expense):お金がいくところ
  2. 資産(Assets):お金があるところ
  3. 収入(Income):お金がどこからきたか
  4. 債務(Liabilities):誰からか借りているお金
  5. 純資産(Equitiy):資産と負債の差額

この5つのカテゴリの下に、下位カテゴリを任意にいくつでも設定できます。また、使用開始する最初の段階から、カテゴリの全体構造をきちんと決めておく必要はありません。 Ledgerは柔軟性が高く、枠組み変更がとても簡単です。実際に自分の家計データの会計処理をやる中で、どんどん自分の都合の良いように変更して行きましょう。

仕訳帳(Journal)の書き方

プレーンテキストで仕訳帳

一般的には、(1) お好みのテキストエディタ(Linux, Win, MacなんでもOK)で簿記の元データとなる仕訳帳(journal)を書いて、(2) 仕訳帳(journal)ファイルをテキストファイルとして保存し、 (3) コマンドラインからledgerを起動することになります。ここでは基本的にLinux/Emacsを使いますので、それ以外やり方については触れません。

仕訳帳はOpening Balanceから始まる

仕訳帳ファイルは期首残高(Opening balance)の記帳(posting)から始めます。たとえばを次のように書きましょう(仮想データです):

2019/04/01  Opening Balance    ;コメント文はセミコロンの後に
    Assets:三井住友銀行                      700,000 JPY
    Assets:ゆうちょ銀行                        50000 JPY
    Liabilities:VisaCard                           0 JPY
    Equity:Opening Balance

上から順に、1行ごとに説明します。

第1行目 :

日付とトランザクションの名称です。日付はこの形式( yyyy/mm/dd )にしましょう。

第2行目と3行目 :

資産(Assets)です。Assetsを「資産」と日本語で書いても問題ないはず。むしろ注意して欲しいのは、金額の書き方です。 Ledgerは仕訳帳ファイルの中の 最初の金額 の表記法を見て、 1000ごとにコンマを打つかどうかなどを決めているようです。なので、ここでコンマを打っておくと後が楽です。

3行目以降になれば、コンマを打ちたければ打てば良いし、打ってなくても、後で説明する各種の報告書(reports)の中では、ちゃんとコンマを打ってくれます。金額の後ろは通貨指定=「JPY」(日本円)ですが、金額とJPYの間には半角スペースが1個以上必要です。 Ledgerでは、通貨を指定しないとUSD’$’と認識しますので、とりあえず明示的にJPYを書いておきます。(これも後になって便利な使い方ができます。)

第4行目 :

「負債」(Liabilities)です。コロンの後ろはクレジットカード名になっています。

第5行目 :

「純資産」(Equity)です。まあ’Opening Balance’とでも書いておけばよいでしょう。この行への金額入力は不要です。

仕訳帳(Journal)の具体例

上の「期首残高」‘Opening Balance’に引き続き、どのような形で仕訳帳に記帳する(posting)かを、具体例で説明します。

  • ATMを使って、ゆうちょ銀行から現金30,000円を引き出しました:

    2019/04/10  ATMでキャッシング
        Assets:Cash
        Assets:ゆうちょ銀行                       -30000  JPY
    

    上の例では、「Assets:ゆうちょ銀行」がソース勘定4(account)で、その上の「Assets:Cash」がターゲット勘定です。

  • その現金を使って、スタバでコーヒを飲みました:

    2019/04/10  スタバ
        Expenses:交際費:Coffee                       780  JPY
        Assets:Cash
    

    つまり「Assets:Cash」というソースをつかって、「Coffee」という「交際費」に属する「経費」を「スタバ」(ターゲット)に支払いました。Cashアカウント欄には金額が書かれていませんが、Ledgerが複式簿記のルールに従って -780円とマイナスの金額を補完してくれます。

  • クレジットカードを使ってAmazonで本を買いました:

    2019/04/10  Amazon
        Expenses:教養費:Books                       2780  JPY
        Liabilities:VisaCard
    

    仕訳帳の中で、どんな本を購入したかをどうしても記録しておきたい場合には、セミコロンを使ってコメントとして追記してください。

    ところで、上の2例ともExpensesがプラスの数字になっているのは???ですね。目まいがします。たしかに自分中心の視点からすると、ボクにはマイナスの金額が馴染みやすいですが、自分のお金がAmazonを経由して社会に還元されているので、まあ社会の立場からすれば、プラスという風でしょうか?

  • いよいよ給料日! 振込先は三井住友銀行:

    2019/04/25   株式会社ほげほげ
        Assets:三井住友銀行
        Income:給与                 -250000  JPY
    

    自分の三井住友銀行口座(ターゲット口座)に、「Income:給与」(ソース口座)=「株式会社ほげほげ」から25万円のサラリーが振り込まれました。ここで、25万円がマイナスになっているのは、またまた目まいがしますねw。要するに給料は自分にとってはプラスなのですが、雇用主である会社の視点から見れば、資産はマイナスになっているから、と考えましょう。複式簿記は、心理学的に言えば「自己視点」と「他者視点」を切り替えることが求められる感じがします。

  • さて給料が出たので居酒屋でビールを飲みました。支払いはVisaCard:

    2019/04/26  居酒屋
        Expenses:交際費:Beer                        1900  JPY
        Liabilities:VisaCard
    

    VISAを使って、交際費としてビールを飲みました。VISAのアカウントには負債(Liabilites)として記録されて行きます。

  • 三井住友からゆうちょへ資金移動:

    2019/04/26   三井住友からゆうちょへ資金移動
        Assets:ゆうちょ銀行
        Assets:三井住友銀行                      -150000 JPY
    
  • 以上をまとめると次のような内容です:

    ;
    ;    サンプルledger journalファイル (=sample.ledger)
    ;
    2019/04/01  Opening Balance    ;コメント文はセミコロンの後に
        Assets:三井住友銀行                      700,000 JPY
        Assets:ゆうちょ銀行                        50000 JPY
        Liabilities:VisaCard                           0 JPY
        Equity:Opening Balance
    
    2019/04/10  ATMでキャッシング
        Assets:Cash
        Assets:ゆうちょ銀行                       -30000  JPY
    
    2019/04/10  スタバ
        Expenses:交際費:Coffee                       780  JPY
        Assets:Cash
    
    2019/04/10  Amazon
        Expenses:教養費:Books                       2780  JPY
        Liabilities:VisaCard
    
    2019/04/25   株式会社ほげほげ
        Assets:三井住友銀行
        Income:給与                 -250000  JPY
    
    2019/04/26  居酒屋
        Expenses:交際費:Beer                        1900  JPY
        Liabilities:VisaCard
    
    2019/04/26   三井住友からゆうちょへ資金移動
        Assets:ゆうちょ銀行
        Assets:三井住友銀行                      -150000 JPY
    

    仕訳帳を記帳する初期の段階では、インデントの大きさとか、列の不揃いとか全然気しないで結構です。後でいつでもフォーマットを整えることができます。気をつけるとしたら、レコードの中に全角スペースが混入しないようにということ以外、次の点:

  • トランザクションの日付を第1行目に書くこと

  • 第2行目以降のアカウント名の前には1つ以上の半角スペースまたは TAB が必要

  • アカウント名と金額の間には2つ以上の半角スペースまたは TAB が必要

  • 金額とJPY(通貨)との間には1つ以上の半角スペースが必要

Report/Registerの例と見方

コマンドラインで集計レポートを表示する

  • 仕訳帳の全体バランス(Balance; 5経費状態や入金、残高などの状態)を見るには、

次のようにします:

$ ledger -f sample.ledger bal

	 999,220 JPY  Assets
	  29,220 JPY    Cash
	 170,000 JPY    ゆうちょ銀行
	 800,000 JPY    三井住友銀行
	-750,000 JPY  Equity:Opening Balance
	   5,460 JPY  Expenses
	   2,680 JPY    交際費
	   1,900 JPY      Beer
	     780 JPY      Coffee
	   2,780 JPY    教養費:Books
	-250,000 JPY  Income:給与
	  -4,680 JPY  Liabilities:VisaCard
--------------------
		   0
ソースコード 1: 仕訳帳(sample.ledger)の全体バランスレポート

「-f」オプションでファイル名を指定しています。「bal」はbalanceの略です。

  • 資産(Assets)と負債(Liabilites)だけのバランスをチェックしたい時:

    $ ledger -f sample.ledger bal Assets Liabilites
    
         999,220 JPY  Assets
          29,220 JPY    Cash
         170,000 JPY    ゆうちょ銀行
         800,000 JPY    三井住友銀行
          -4,680 JPY  Liabilities:VisaCard
    --------------------
         994,540 JPY
    

    ちなみに、毎回「-f sample.ledger」とファイル名を指定するのは面倒です。次のいずれかの方法で、ファイル名の入力を省略できます。

    1. 環境変数 LEDGER_FILE でファイル名を指定する
    2. ~/.legerrcファイルを作成し、その中に次の例のような行を書いておく:
    --file ~/Dropbox/sample.Ledger
    
  • 特定のアカウントのバランスをチェックしたい場合、たとえば「交際費」のバランスを見たい時には次のようにします:

    $ ledger -f sample.ledger reg 交際費
    
    19-Apr-10 スタバ                Expenses:交際費:Coffee      780 JPY      780 JPY
    19-Apr-26 居酒屋                Expenses:交際費:Beer      1,900 JPY    2,680 JPY
    

    「reg」はregisterの略です。金額の一番右側の列は、累計になります。

  • VISAの請求額を決済銀行(ゆうちょ銀行)から引き落とすトランザクションの書き方は次のとおりです:

    2019/04/15=05/10   請求書への支払い(VISA)
        Liabilities:VisaCard               4680  JPY
        Assets:ゆうちょ銀行
    

    VISAが、毎月15日締めで翌月10日引き落としだとすれば、こんな感じです。日程に 05/10 と書いてあるのは、それが「発効日」であることを示します。

  • VISAからの請求書に対して、自分の資産(ゆうちょ銀行)から資金が移動すると、その結果として、つぎのようなバランスになります:

    $ ledger -f sample.ledger bal
    
         994,540 JPY  Assets
          29,220 JPY    Cash
         165,320 JPY    ゆうちょ銀行
         800,000 JPY    三井住友銀行
    	-750,000 JPY  Equity:Opening Balance
           5,460 JPY  Expenses
           2,680 JPY    交際費
           1,900 JPY      Beer
             780 JPY      Coffee
           2,780 JPY    教養費:Books
    	-250,000 JPY  Income:給与
    --------------------
               0
    

    Listing 1の最下行にあったVISAに対する4,680円の負債が消えています。その分、ゆうちょ銀行の資産が減少しているのを確認してください。

Emacsの中でLedgerを使う

ここではEmacsの中で、Ledger-modeを使って帳簿をつける方法の基礎中の基礎についてまとめます。

トランザクションの編集

  • コピー機能

    転記作業では、同じソースアカウントとターゲットアカウントを繰り返し入力することが起こります。その都度、手入力するのは面倒だし、タイプミスの可能性もあります。そこで、Ledger-modeではトランザクションのコピー機能が用意されています。

    コピー元となるトランザクションにカーソルを置き、 C-c C-k を入力するか、またはメニューから‘Copy Trans at Point’を選びます。

    カレンダーがEmacs画面の下部に表示されますので日付を選択します。元帳の適切な箇所(日付け順に見て)に金額が空欄となったトランザクションの雛形がペーストされます。

  • トランザクションのクリーンアップ・整列

    メニュー項目から’Clean-up Buffer’を選ぶと、バッファ内のすべてのトランザクションのフォーマットが整い、日付順に整列されます。

    仕訳帳全体ではなくて、ある一部分についてのみ日付順にソートしたい時には、その部分をリージョン指定しておいて、 C-c C-s をタイプするか、あるいはメニューから‘Sort Region’を選びます。

    なお、この日付順のソート機能をトラブルなく行うために、仕訳帳ファイル内ではISO 8601の標準日付、 ‘YYYY/MM/DD’を使った方が良いようです。

  • トランザクションの削除

    もちろんEmacsの標準的な編集機能を使って行単位で削除することができますが、Ledger-modeの C-c C-d を使う方が良いようです。リージョン指定して削除するよりも必要な手数が少ないこと、それプラス、すべてのトランザクション操作がアンドゥバッファ内に保存されるという利点があります。

Reportについて

  • C-c C-o C-r を使う

    • ミニバッファに’bal’を入力: すべてのアカウントのバランスが *Ledger Report* に表示されます。

    • ミニバッファに’account’入力: たとえば ‘ゆうちょ銀行’ /RET/すると、 *Ledger Report* に「ゆうちょ銀行」に関係するトランザクションが表示されます。

    • Emacs画面を横に2分割: ディフォールトではミニバッファの上にレポートが表示されるバッファが開きます、予めEmacsを全画面表示にしておいて、C-x 3 でバッファを縦に2つに分割しておけば、レポートを見やすい形で表示できます。

  • C-c C-f を使う

    Emacs本体の持つ検索機能では、パタンにマッチした「行」のみが表示されますが、Ledger-modeでのnarrowingでは、トランザクション単位で表示されるというのが味噌。 C-c C-f を叩くと、ミニバッファに’Regexp:‘が表示されます。ここで入力された文字列とマッチしたトランザクションが表示されます。たとえば、「ゆうちょ」を入力すると:

2019/04/01  Opening Balance    ;コメント文はセミコロンの後に
    Assets:三井住友銀行                      700,000 JPY
    Assets:ゆうちょ銀行                        50000 JPY
    Liabilities:VisaCard                           0 JPY
    Equity:Opening Balance

2019/04/13  ATMから3万円キャッシング
    Assets:Cash
    Assets:ゆうちょ銀行                       -30000  JPY

2019/04/15=05/10   請求書(VISA)
    Liabilities:VisaCard                        4680  JPY
    Assets:ゆうちょ銀行

2019/04/26   三井住友からゆうちょへ資金移動
    Assets:ゆうちょ銀行
    Assets:三井住友銀行                      -150000 JPY

こんな感じ。ここで、このバッファで字句・金額の修正やトランザクションの追加、削除が可能です。編集がおわって、元のLedgerバッファに戻るには、もう一度、 C-c C-f を叩きます。元のバッファに戻ると(当たり前ですがw)ちゃんと元帳データが修正されています。これはとても便利な機能です。

なお、 C-c C-f で、たとえば'019/04’とか入力すれば、(大きな確率で)今年の4月のトランザクションが表示されます。これも使い方しだいでは便利かと思われます.

References

原田経道(2015). Emacs で家計簿をつけよう! プログラマブル複式簿記, Ledger. https://futurismo.biz/archives/3085/

Keen, P. Program your Finances: Command-line Accounting https://www.petekeen.net/keeping-finances-with-ledger

岡部洋一 (2015). 複式簿記 http://www.moge.org/okabe/temp/balance.pdf

Pfeiffer,T. (2016). Ledgerで経理 https://www.slideshare.net/pfi/ledger-59401159   YouTube: https://www.youtube.com/watch?v=v-

渡邉泉(2017). 会計学の誕生—複式簿記が変えた世界 岩波新書

https://www.ledger-cli.org/docs.html マニュアルはこちらです

Footnote


  1. Ledgerという英語は一般名詞では「元帳」と訳されますが、ソフトウエアとしてのLedgerを指すときには英語つづりのまま使います。 ↩︎

  2. journalは「仕訳帳」と訳されますが、ここでは家計簿を想定しているので、ちょっと大げさ。けれども他に適切な言い回しを思いつかないので、暫定的に「仕訳帳」を使います。 ↩︎

  3. Transactionは「取引」の訳語が一般的でしょうが、家計簿ですので「取引」は大げさ?ということでカタカナ表記にしました。 ↩︎

  4. accountは「勘定」と訳すべきでしょうが、家庭内で一般市民が使う日本語では「どんぶり勘定」とか、「損得勘定」とか、物の数を数えるとかがメインの意味です。専門家の定義内容とはかけ離れているかも知れません。なので、「勘定」と言ったり、アカウントと言ったりしていて、支離滅裂です。 ↩︎

  5. Balanceは「残高」と訳されることが多いそうです。これも、専門家だと「残高」という日本語を聞いて、その会計学的意味をちゃんと理解できますが、家計簿の世界では、残高はとても狭い意味(=銀行口座の残高)しかありません。ということで、このドキュメントではあえてカタカナのまま「バランス」としています。 ↩︎