本ページは、TataruBookの初心者向けの入門書です。この入門書では、首尾一貫した使用例を通じて、TataruBookの一般的な機能を最初から最後まで使用する方法を説明します。

データベースファイルを初期化する

まずTataruBookをダウンロードしてインストールします。その方法がわからない場合は、これを参照してください。。

便宜上、以下ではTataruBookが2つ目のインストール方法 (実行ファイル方式) を使用してインストールされたと仮定します。1つ目のインストール方法 (Pythonスクリプト方式) が使用された場合は、以下のコマンドの冒頭のtatarubookpython tatarubook.pyに置き換える必要があります。たとえば、データベースファイルを作成するコマンドはtatarubook init accounting.dbからpython tatarubook.py init accounting.dbに変更する必要があります。

インストールしたら、コマンドラインプログラムを実行して、TataruBookプログラムがあるディレクトリに切り替えて、以下のコマンドを実行します。

tatarubook init accounting.db

そのディレクトリ内にaccounting.dbというファイルが追加されました。それは、財務データが保存されているデータベースファイルです。

次に、insertコマンドを使用して通貨の種類を追加します。

tatarubook insert accounting.db asset_types NULL ギル 0

レコードがasset_typesテーブルに挿入されました。そのレコードが、asset_indexasset_nameasset_orderという3つのフィールドが含まれています。asset_indexの数値はNULLで、インデックスが自動的に生成されたことを表します。asset_nameの数値はギルで、資産(あるいは通貨)の名前を表します。asset_orderの数値は0で、資産のシリアル番号を表します。TataruBookは、複数の資産を表示するときに、このシリアル番号を使って並べ替えを行います。

insertコマンドは、テーブル名や各フィールドの数値を含むレコードを任意のテーブルに挿入します。

TataruBookのサポートファイルでは、例の多くは、「ファイナルファンタジー14」というゲームの設定から引用しています。ファイナルファンタジー14ではメインの通貨はギルなので、ここでも例としてギルを使用しています。実際の簿記では、日本円や米ドル、人民元など、任意の通貨名を使用できます。

前回のコマンドを実行すると、異常なメッセージが表示されました。

Integrity check after insertion:
start_date should contain exactly 1 row but 0 row(s) are found.
end_date should contain exactly 1 row but 0 row(s) are found.
standard_asset should contain exactly 1 row but 0 row(s) are found.

それはデータ整合性チェックを実行した後に報告された問題です。TataruBookには、財務データを分析するための複数のビューがあり、その多くは計算するための特定のデータが必要です。そのため、TataruBookは必要なデータが不足していると判断すると、データの入力を要求します。多くの場合、メッセージの内容だけで、どの問題が報告されたのかを把握できます。

では、メッセージ内で報告された問題を1つずつ解決していきましょう。

まず、standard_assetテーブルにレコードが必要であるという問題を解決するために、唯一の通貨としてギル自国通貨に設定します。

tatarubook overwrite accounting.db standard_asset ギル

次に、統計期間の開始日と終了日を設定して、 start_datestart_dateテーブルとend_dateテーブルにそれぞれレコードが必要であるという問題を解決します。

tatarubook overwrite accounting.db start_date 2022-12-31
tatarubook overwrite accounting.db end_date 2023-12-31

注意: 統計期間はstart_dateの日の終了時から始まります。したがって、2023年全体のデータを集計する場合、start_date2023-1-1としないようにしてください。そうすると、2023-1-1の一日分のデータが合計に含まれなくなってしまいます。

TataruBookの多くのビューは、start_dateおよびend_dateテーブルで設定された統計期間に基づいて内容が決まります。たとえば、start_statsビューには、start_dateの日の終了時点でのアカウント残高と資産価値が表示されます。end_statsビューには、end_dateの日の終了時点でのアカウント残高と資産価値が表示されます。また、ROIに関連するビューには、統計期間の収益が表示されます。 start_dateend_dateを変更することで、統計期間を調整し、指定した過去期間の財務状況を確認できます。

以上でデータ整合性の問題が解決したため、TataruBookは次のように報告します。

Integrity check after overwrite:
Everything is fine, no integrity breach found.

簿記を始める

まずアカウントを追加しましょう:

tatarubook insert accounting.db accounts NULL シャーレアン銀行普通預金 ギル 0

このコマンドは、アカウントの名前がシャーレアン銀行普通預金であり、対応する資産 (通貨) がギルであり、最後のフィールドの値0はそのアカウントが内部アカウントであることを意味します。

「内部アカウント」とは何なのか疑問に思うかもしれません。後で答えます。

簿記を始める前に、 シャーレアン銀行の残高が\(0\)ではないと仮定します。この残高をTataruBookに入力します。ただし、TataruBookは複式簿記を使用しますので、アカウントに資産を追加する際には、別のアカウントから同額の資産を減らす必要があります。この要件を満たすために、期首残高という名前の外部アカウントを追加します(最後のフィールドの値は1に設定してください)。

tatarubook insert accounting.db accounts NULL 期首残高 ギル 1

期首残高アカウントからシャーレアン銀行普通預金アカウントに資産を移動できるようになりました。次のコマンドを使用して、シャーレアン銀行普通預金に\(5000\)ギルの残高を追加します。

tatarubook insert accounting.db postings NULL 2022-12-31 期首残高 -5000 シャーレアン銀行普通預金 期首残高

このコマンドを実行すると、TataruBookでは、2022-12-31期首残高アカウントが\(5000\)ギル減少し、シャーレアン銀行普通預金アカウントが\(5000\)ギル増加したことになります。

次に、飲食費の支出を記録するため、まず「飲食費用」という外部アカウントを追加します。

tatarubook insert accounting.db accounts NULL 飲食費用 ギル 1

続いて、2件の消費記録を追加します。

tatarubook insert accounting.db postings NULL 2023-1-5 シャーレアン銀行普通預金 -20 飲食費用 ホテルのモーニング
tatarubook insert accounting.db postings NULL 2023-1-7 シャーレアン銀行普通預金 -45 飲食費用 ラストスタンドの夕食

実行後、exportコマンドを使用して、statementsというビューをエクスポートします。

tatarubook export accounting.db --table statements

このコマンドにより、statements.csvファイルがディレクトリに生成されます。Excel で開くと、次の内容が確認できます。

posting_index trade_date account_index amount target comment src_name asset_index is_external target_name balance
1 2022/12/31 1 5000 2 期首残高 シャーレアン銀行普通預金 1 0 期首残高 5000
1 2022/12/31 2 -5000 1 期首残高 期首残高 1 1 シャーレアン銀行普通預金 -5000
2 2023/1/5 1 -20 3 ホテルのモーニング シャーレアン銀行普通預金 1 0 飲食費用 4980
2 2023/1/5 3 20 1 ホテルのモーニング 飲食費用 1 1 シャーレアン銀行普通預金 20
3 2023/1/7 1 -45 3 ラストスタンドの夕食 シャーレアン銀行普通預金 1 0 飲食費用 4935
3 2023/1/7 3 45 1 ラストスタンドの夕食 飲食費用 1 1 シャーレアン銀行普通預金 65

このデータは、よく目にする支払明細書に似ています。Excelのsrc_name列でフィルタをかけることで、さまざまな角度からデータを確認できます。例えば、内部アカウントのシャーレアン銀行普通預金を選ぶと、そのアカウントの取引と残高を時系列で確認できます。外部アカウントの飲食費用を選ぶと、飲食費用の明細を確認できます。つまり、外部アカウントは収支の分類するためのものです。TataruBookでは、収支の統計を自由に分類できます。対応する外部アカウントを追加するだけです。

データを一括インポートする

前のステップを踏まえて、さらなる財務データをインポートしてみましょう。まず、アカウントと外部アカウントを追加します。

tatarubook insert accounting.db accounts NULL シャーレアン銀行クレジットカード ギル 0
tatarubook insert accounting.db accounts NULL ショッピング ギル 1
tatarubook insert accounting.db accounts NULL 家賃 ギル 1
tatarubook insert accounting.db accounts NULL 給料 ギル 1

次に、取引記録を一括入力します。データ入力を効率化するため、銀行や他の組織から提供された取引詳細を一括でインポートします。TataruBookはimportコマンドを提供します。

まずExcelで以下の形式にデータを整え、postings.csvというファイルとして保存します(posting_index列のデータはインポートされる時に自動生成されるため、空のままにしておきます。自動生成されるインデックスフィールドを参照してください)。

posting_index trade_date src_account src_change dst_account comment
  2023/2/10 給料 -8000 シャーレアン銀行普通預金 月給
  2023/2/13 シャーレアン銀行クレジットカード -190 ショッピング 洋服
  2023/2/26 シャーレアン銀行クレジットカード -140 ショッピング 家庭用品
  2023/3/2 シャーレアン銀行クレジットカード -9000 家賃 半年の家賃
  2023/3/10 給料 -8000 シャーレアン銀行普通預金 月給
  2023/3/10 シャーレアン銀行クレジットカード -43 飲食費用 ラストスタンドのランチ
  2023/3/20 シャーレアン銀行普通預金 -9300 シャーレアン銀行クレジットカード クレジットカードの支払い

次に、以下のコマンドを使用して、CSVファイルの全レコードをpostingsテーブルにインポートします。

tatarubook import accounting.db postings.csv

実際の簿記では、簿記のデータは銀行や証券会社などの組織が提供する取引詳細から得られることが多いため、insertコマンドよりもimportコマンドの方が一般的に使用されます。TataruBookでは挿入データに対して多くのチェックが行われるため、一括インポート中に特定のデータを挿入できない場合があります。 この場合、importコマンドは自動的にロールバックを実行し、データベースファイルをimportコマンドを実行する前の状態に復元します。その後、CSVファイルの内容のエラーを修正してから、再実行できます。その自動ロールバック機能により、巨大なCSVファイルをインポートする際に、部分的な成功によってデータベースファイルの状態が不明確になる心配をする必要がありません。

次に、収支の分類統計を確認します。まずexportコマンドを使用してincome_and_expensesビューをエクスポートします。

tatarubook export accounting.db --table income_and_expenses

次に、生成されたincome_and_expenses.csvファイルを開きます。内容は次の通りです。

asset_order account_index account_name total_amount asset_index asset_name total_value
0 3 ショッピング 108.0 1 ギル 108.0
0 5 ショッピング 330.0 1 ギル 330.0
0 6 家賃 9000.0 1 ギル 9000.0
0 7 給料 -16000.0 1 ギル -16000.0

これらのデータには、統計期間内の各収支の分類結果を示しています。注: 外部アカウントの取引額は、内部アカウントの反数であるため、正の数値が支出を、負の数値が収入を示します。

income_and_expensesビューには、特定の収支における内部アカウントの取引額の合計が表示されます。各内部アカウントごとの詳細な統計データを確認するには、flow_statsビューを使用します。

tatarubook export accounting.db --table flow_stats
flow_index flow_name account_index account_name amount
3 飲食費用 1 シャーレアン銀行普通預金 65.0
3 飲食費用 4 シャーレアン銀行クレジットカード 43.0
5 ショッピング 4 シャーレアン銀行クレジットカード 330.0
6 家賃 4 シャーレアン銀行クレジットカード 9000.0
7 給料 1 シャーレアン銀行普通預金 -16000.0

flow_statsビューでは、 シャーレアン銀行普通預金シャーレアン銀行クレジットカードという2つの内部アカウントの飲食費用をそれぞれに確認できます。

これらの取引後の各内部アカウントの最終的な残高を確認するには、end_statsビューを使用します。

tatarubook export accounting.db --table end_stats
asset_order date_val account_index account_name balance asset_index asset_name price market_value proportion
0 2023-12-31 1 シャーレアン銀行普通預金 11635.0 1 Gil 1.0 11635.0 1.006
0 2023-12-31 4 シャーレアン銀行クレジットカード -73.0 1 Gil 1.0 -73.0 -0.006

注:クレジットカードの残高はマイナスであり、これは多くのクレジットカードアカウントで通常見られる状態です。

TataruBookでは、アカウント残高を直接に入力できません (前述の期首残高は実際には取引として入力されています)。すべてのアカウント残高は、取引記録から計算されます。簿記において、TataruBookが表示する残高と実際のアカウント残高が一致するか確認することで、入力されたデータの完全性と正確性を検証できます。

利子収益

通常、銀行口座の資金には利子がつきます。利子収益を記録するには、まず利子用の外部アカウントを追加します。

tatarubook insert accounting.db accounts NULL ギルの利子 ギル 1

複数の異なる通貨を使用している場合は、通貨ごとに異なる外部アカウントを設定する必要があります。利子アカウントをギルの利子と命名しておくと、後から他の通貨を追加する際に、他の通貨の利子に対応する外部アカウントとギルの利子を区別しやすくなります。もちろん、1つの通貨しか使用しない場合は、その必要はありません。

TataruBookでは、利子収益を統計として管理できます。それを利用するには、利子アカウントをinterest_accountsテーブルに追加する必要があります。

tatarubook insert accounting.db interest_accounts ギルの利子

これで、利子収益を追加できるようになります。

tatarubook insert accounting.db postings NULL 2023-3-30 ギルの利子 -30 シャーレアン銀行普通預金 利子
tatarubook insert accounting.db postings NULL 2023-6-30 ギルの利子 -35 シャーレアン銀行普通預金 利子

次に、interest_ratesビューを使用して、現在のデータに基づいて収益率を計算し表示できます。

tatarubook export accounting.db --table interest_rates
account_index account_name asset_index avg_balance interest rate_of_return
1 シャーレアン銀行普通預金 1 11278.38 65.0 0.00576

統計期間内におけるシャーレアン銀行普通預金の一日平均残高は\(11278.38\)ギルで、収益率は約\(0.576\%\)であったことが表示されます。計算の詳細については、修正ディーツ法を参照してください。

各アカウントの収益率を確認することで、簿記の誤りを防ぐことができます。もし計算された収益率が異常であれば、財務データに誤りが含まれている可能性があります。

株式投資

株式投資を記録するには、特定の株式資産を追加する必要があります。TataruBookでは、株式と通貨は本質的に区別されず、どちらも一種の資産として扱われます。そのため、asset_typesテーブルに株式資産を追加する方法は、通貨を追加する方法と同じです。

tatarubook insert accounting.db asset_types NULL ガーロンド・アイアンワークス社の株 1

末尾のフィルドのasset_orderの値を1に設定すると、end_statsなどのビューで株式資産が通貨資産の後に表示されます。各ビューの資産の表示順序にこだわらない場合は、すべての資産のasset_order0に設定できます。

次に、この株を保有する内部アカウントを追加します。TataruBookでは、複数の内部アカウントが同じ株式を保有できますが、ここでは1つの株式アカウントを追加します。

tatarubook insert accounting.db accounts NULL モーグリ証券_ガーロンドの株 ガーロンド・アイアンワークス社の株 0

TataruBookでの株式取引は、内部アカウント間で資産を移動される操作に過ぎません。しかし、1つの問題があります。前述のすべての取引では、元のアカウント(振り出し側のアカウント)の減少と、目的アカウント(移動先のアカウント)の増加は常に同等です。そのため、簿記の際には、1つの数値を入力するだけで、TataruBookが元のアカウントと目的アカウントの残高を同時に更新します。ただし、現金アカウントと株式アカウントは異なる資産を持っており、現金アカウントの残高は金額で表されるのに対して、株式アカウントの残高は株式の数で表されます。そのため、取引における現金アカウントの変化額は、株式アカウントの変化額の反数にはなりません (株価がちょうど\(1\)である場合を除きます)。

この問題を解決するために、TataruBookでは、取引記録において2つのアカウントに異なる資産が含まれる場合、元のアカウントと目的アカウントの両方の変化額を同時に指定する必要があるというルールがあります。具体的には、insertコマンドの末尾に目的アカウントの変化額を表す数字を追加する必要があります。

tatarubook insert accounting.db postings NULL 2023-7-3 シャーレアン銀行普通預金 -2000 モーグリ証券_ガーロンドの株 株を買う 200

この場合、コマンド末尾の\(200\)は、200株が購入されたことを示しています。importコマンドを使用して記録をインポートする場合も、このコマンド (記録) の末尾に、目的アカウントの変動額を示すフィールドを追加する必要があります。

2つのアカウントの変化額が既に取引価格を反映しているため、取引を追加する際にリアルタイムの取引価格を入力する必要はありません。手数料やコミッション、税金を記録する場合には、対応する外部アカウントを追加して、取引を複数の記録に分割して入力してください。

この取引を追加した後、TataruBookは再びデータ整合性に関する問題を報告します。

Integrity check after insertion:
These (date, asset) pairs need price info in calculation:
(2, 'ガーロンド・アイアンワークス社の株', 1, '2023-12-31')

これは、TataruBookが資産を計算する際に、自国通貨で他の資産の価値を算出するため、特定の日付の株価情報を入力する必要があるためです。この要件を満たすためには、pricesテーブルに記録を追加します。

tatarubook insert accounting.db prices 2023-12-31 ガーロンド・アイアンワークス社の株 12

end_statsビューを使用して、end_dateにおけるすべてのアカウント残高と価値を確認できます。

もし入門書に従って最初から実行していた場合、end_stats.csvファイルがエクスポートされており、このファイルが既にカレントフォルダに存在するはずです。この場合、以下のコマンドを実行しても、そのファイルは更新されません。これは、TataruBookが既存のファイルを誤って破壊しないようにしているためです。そのため、まずend_stats.csvファイルを削除してから、以下のコマンドを実行してください。

tatarubook export accounting.db --table end_stats
asset_order date_val account_index account_name balance asset_index asset_name price market_value proportion
0 2023-12-31 1 シャーレアン銀行普通預金 9700.0 1 Gil 1.0 9700.0 0.8065
0 2023-12-31 4 シャーレアン銀行クレジットカード -73.0 1 Gil 1.0 -73.0 -0.0061
1 2023-12-31 9 モーグリ証券_ガーロンドの株 200.0 2 ガーロンド・アイアンワークス社の株 12.0 2400.0 0.1996

投資収益率

株式に加えて、ファンド、債券、商品、先物などの他の資産も同様の方法で記録されます。ファンド資産と対応するアカウントを追加します。

tatarubook insert accounting.db asset_types NULL エオルゼア100インデックスファンド 1
tatarubook insert accounting.db accounts NULL モーグリ証券_エオルゼア100 エオルゼア100インデックスファンド 0

このファンドには、購入と償還の両方に関する複数の取引があります。importコマンドを使用して、すべての取引記録を一括でインポートします。 まず、CSVファイルを作成します。

posting_index trade_date src_account src_change dst_account comment dst_change
  2023/8/2 シャーレアン銀行普通預金 -3000 モーグリ証券_エオルゼア100 ファンド購入 1500
  2023/8/21 シャーレアン銀行普通預金 -1000 モーグリ証券_エオルゼア100 ファンド購入 450
  2023/9/12 モーグリ証券_エオルゼア100 -1000 シャーレアン銀行普通預金 ファンド償還 2500
  2023/9/30 シャーレアン銀行普通預金 -1200 モーグリ証券_エオルゼア100 ファンド購入 630

各行の最後のフィールドを明確にするため、ヘッダ一行にdst_changeが追加されました。しかし、実際にはTataruBookではCSVファイルをインポートする際、ヘッダ一行の内容を考慮しないため、指定された順序で各フィールドの値を入力すれば十分です。

次に、このCSVファイルの内容をインポートします。

tatarubook import accounting.db postings.csv

以前のように、end_dateの日付におけるエオルゼア100インデックスファンドの価格情報を追加します。

tatarubook insert accounting.db prices 2023-12-31 エオルゼア100インデックスファンド 2.35

最後に、end_dateの日付におけるすべてのアカウントの残高と価値を確認します。end_stats.csvファイルが既に存在する場合は、まずそれを削除してください。

tatarubook export accounting.db --table end_stats
asset_order date_val account_index account_name balance asset_index asset_name price market_value proportion
0 2023-12-31 1 シャーレアン銀行普通預金 7000.0 1 Gil 1.0 7000.0 0.5368
0 2023-12-31 4 シャーレアン銀行クレジットカード -73.0 1 Gil 1.0 -73.0 -0.0056
1 2023-12-31 9 モーグリ証券_ガーロンドの株 200.0 2 ガーロンド・アイアンワークス社の株 12.0 2400.0 0.1840
1 2023-12-31 10 モーグリ証券_エオルゼア100 1580.0 3 エオルゼア100インデックスファンド 2.35 3713.0 0.2847

アカウント別に価値を確認できるだけでなく、end_assetsビューを使用して各資産の数量と価値を確認できます。

tatarubook export accounting.db --table end_assets
asset_order date_val asset_index asset_name amount price total_value proportion
0 2023-12-31 1 Gil 6927.0 1.0 6927.0 0.5312
1 2023-12-31 2 ガーロンド・アイアンワークス社の株 200.0 12.0 2400.0 0.1840
1 2023-12-31 3 エオルゼア100インデックスファンド 1580.0 2.35 3713.0 0.2847

終了日の価値は算出されましたが、これらの売買取引を通じてファンド全体の収益がまた気になります。return_on_sharesビューでは、投資対象が含まれている各アカウントの投資収益を確認できます(TataruBookは、自国通貨以外のすべての資産を投資対象として扱います)。

tatarubook export accounting.db --table return_on_shares
asset_order asset_index asset_name account_index account_name start_amount start_value diff end_amount end_value cash_gained min_inflow profit rate_of_return
1 2 ガーロンド・アイアンワークス社の株 9 モーグリ証券_ガーロンドの株 0 0 200.0 200.0 2400.0 -2000.0 2000.0 400.0 0.2
1 3 エオルゼア100インデックスファンド 10 モーグリ証券_エオルゼア100 0 0 1580.0 1580.0 3713.0 -2700.0 4000.0 1013.0 0.25325

これらの投資から、モーグリ証券_ガーロンドの株のアカウントの投資収益は\(400\)ギル、収益率は\(20\%\)、モーグリ証券_エオルゼア100のアカウントの投資収益は\(1013.0\)ギル、収益率は\(25.325\%\)であることがわかります。計算の詳細については、最小初期現金法を参照してください。

TataruBookでは、すべての内部アカウントをポートフォリオとして認定されるため、この資産アロケーション全体の収益率が計算されます。この結果はportfolio_statsビューに表示されます。

tatarubook export accounting.db --table portfolio_stats
start_value end_value net_outflow interest net_gain rate_of_return
5000.0 13040.0 -6562.0 -65.0 1478.0 0.178

これらのデータは、統計期間中のすべての内部アカウントの合計投資収益が合計\(1478\)ギル、収益率が\(17.8\%\)であることを示しています。注:投資収益には利子収益が含まれています。計算の詳細については、修正ディーツ法を参照してください。

TataruBookは通常、個人または家族のすべての資産を簿記に使用されるため、portfolio_statsビューで表示される情報は非常に重要です。このビューには、start_dateend_dateの日付時点の個人または家族の資産状況や、その期間中の収支、収益情報が表示されます。

GUIアプリでデータベースファイルを表示する

TataruBookはコマンドラインプログラムであり、グラフィカルユーザーインターフェイス(GUI)は備わっていません。ただし、テーブルとビューを含むすべてのデータベースファイルはSQLiteファイル形式で保存されているため、SQLite形式を対応しているソフトウェア(SQLiteの最新機能に対応している場合) を使用すれば、これらのテーブルやビューを表示できます。ここでは、オープンソースソフトウェアであるDB Browser for SQLiteを例に説明します。

まず、DB Browser for SQLitenightlyバージョン(SQLiteの新機能に対応しているのはnightlyバージョンのみです)。次にDB Browser for SQLiteを起動し、最後にOpen Databaseボタンをクリックしてaccounting.dbファイルを選択します。これにより、データベースファイル内のテーブルやビューのデータが表示されます。

DB Browser for SQLiteの画面

なお、TataruBook以外のソフトウェアを使用してデータベースファイルのデータを編集することも可能ですが、データ入力時に完全な整合性チェックを行うのはTataruBookのみです。そのため、他のソフトウェアを使用してデータベースファイルを編集した場合は、TataruBookでチェックを行う必要があります。もしSQLプログラミング言語を使用できる場合、SQLコマンドを書いて、TataruBookが提供していないデータ分析機能を自作することも可能です。