前編↓
今回は外貨取引についてです。
Ledgerにはcommodityという概念が存在する
まずLedger CLIにはcommodityという概念が存在します。コモディティというのは代替可能性があるもの、つまりは値段がついていて、数えた量で交換できるものです。一般には通貨や株式を除いた先物などを呼びますが、ここでは通貨や株式も含む広い言葉になっています。Ledger CLIではそれぞれのコモディティを数のprefix/suffixとして扱います。
2022/12/12 Commodity
Foo 1 JPY ; JPYがコモディティ
Foo $ 1 ; $がコモディティ
Foo 1 USD ; USDがコモディティ
Foo 1 りんご ; りんごがコモディティ
このようにコモディティはただの固有文字列で「何を」どれだけ持ってるか区別できるようにするための記号です。これを外貨に使うようにできています。
早速外貨を売買してみる
ドル買い円売り
ではokane銀行に外貨預金があって、海外店舗でカード決済できる口座だとしましょう。海外通販や旅行に便利ですね。ここでドルを買います。
2022/12/12 * USD購入
; 仲値136.35、レート136.5
Assets:Banks:Okane -10,000 JPY
Assets:Banks:Okane 73.26 USD @ 136.35 JPY
このように記述します。@以外は以前まで書いていた記録に似ています。ただ、@がポイントでこれを見ると1 USDがいくらだったのか分かるわけです。ここで、銀行が提示しているレートは手数料込みなので、手数料を戻した実レートで記述します。そうすると、当然手数料分どこかに消えているのでエラーが出ます。
% ledger -f root.ledger bal ^Assets ^Liabilities ^Equity --current -X CHF
> 2022/12/12 * USD購入
> Assets:Banks:Okane -10,000 JPY
> Assets:Banks:Okane 73.26 USD @ 136.35 JPY
Unbalanced remainder is:
-11 JPY
なので言われれるがままに11円手数料として書き足します。
2022/12/12 * USD購入
; 仲値136.35、レート136.5
Assets:Banks:Okane -10,000 JPY
Assets:Banks:Okane 73.26 USD @ 136.35 JPY
Expenses:Commissions 11 JPY
; Payee: Okane Bank
% ledger -f root.ledger bal ^Assets ^Liabilities ^Equity --current
364,902 JPY
73.26 USD Assets
89,855 JPY
73.26 USD Banks
89,855 JPY
73.26 USD Banks:Okane
-5,000 JPY Cash
280,047 JPY Wire:Salary
-113,878 JPY Equity:Opening Balances
-470 JPY Liabilities:Card:Yellow
--------------------
250,554 JPY
73.26 USD
手数料をトラックするかどうかは個人の自由です。私は神経質なのでトラックしてますが、大したことない量なら忘れてもいい気もします。
外貨建て決済
外貨での買い物は簡単に書けます。
2022/12/13 * AmazonCom
Assets:Banks:Okane -20 USD
Expenses:Grocery
ドル売り円買い
さて、円が必要になったし円安だしドルを売る場合を考えます。逆の時同様に手数料も記録します。
2022/12/15 * Needs JPY
; 仲値 150.15, レート 150.00
Assets:Banks:Okane -53.26 USD @ 150.15 JPY
Assets:Banks:Okane 7989 JPY
Expenses:Commissions 8 JPY
; Payee: Okane Bank
さて、無事記録できました…さて、なにかおかしいような?はい、外貨取引時には本来為替差益、差損が出ているはずです。この記録にはそれが織り込まれていません。なので本来は購入時価格をこの記録に織り込んでやる必要があります。ただ、個人的には面倒なのでしていません(どうせ源泉徴収されるので真面目に記録する意味がない)。
次回は株式でちゃんと売却の損益を記録する方法を見ます。