nanacoはトップランナー!
nanacoを知らないヒトはいませんよね。
「リテールガイド」によれば、nanacoの発行枚数は 7,520万枚 (2022/02現在)、nanaco利用な店舗数は956,000件(2022/06末現在)。
ボクも1枚持っています 😄
コンビニなどで小銭入れの代わりに使えて本当に便利です。
国のマイナポイント事業のキャッシュレス決済サービスにもなりました。そこでnanacoをマイナポイント受取り口座にしてみました。
nanacoで はまった😓
nanacoは小銭レベルの少額プリペイドカードなので、仕組みは簡単素朴だと思ったのが間違いの始まり。nanacoのポイントとお金の動きをLedger-cliで 複式簿記的 にトラッキングしようとしてハマりました。
- 仕組みが思ったよりも複雑
- ポイントと電子マネーの移動をリアルタイムに追跡できない1
いろいろ試行錯誤した結果、パーフェクトではありませんが、ようやく そこそこのレベルでnanacoのポイントと電子マネーをトラッキングできるようになりました。
ここではそれを紹介します。細かく解説的に書くと長くなりますので、この記事は複式簿記とLedger-cliについてある程度のリテラシーをお持ちの方をイメージターゲットにしています。
勘定科目(アカウント)設定
nanacoポイントと電子マネーの構造
図2はnanacoアプリのスクリーンショットです。
この図からnanacoは次の4つの要素から構成されていることが分かります。
- カード内 マネー残高
- カード内 ポイント残高
- センター預り内 マネー残高
- センター預か内 ポイント残高
上の構成要素を次の図3のように複式簿記の 勘定科目 にします。
要するに nanacoの最上位の勘定科目(アカウント)は Assets (資産)、その下に e-money (電子マネー)2を置き、さらにその下にnanacoがあるという構造です。
ここで
card
は「カード内」、center
は「センター預り内」ですem
はElectoronic Money(電子マネー)、pts
はポイントです- nanaco内の勘定科目(アカウント)のコモディティ(通貨単位)は
card_em
(カード内電子マネー)だけが「日本円」JPY
です。あとのアカウントはすべて「ポイント」pts
にします JPY
とpts
との交換率は1:1です(C 1 JPY = 1 pts
)
日本語でもOKです
こうした勘定科目(アカウント)の階層構造をLedger-cliでは半角コロン :
で連結して
Assets:e-money:nanaco:card_em
のように記述します。もちろん これを日本語表記して
資産:電子マネー:ナナコ:カード内電子マネー
と書くこともできます。
記帳の時に毎回日本語変換キーを叩くのが面倒なので、ボクはアカウント名にはできるだけ日本語を使わないようにしています。単なる好みの問題です3。
さて とりあえずこれだけの勘定科目を用意すれば、nanacoのお金とポイントの流れをそれなりにトラッキングすることができます。下に例をあげます。
nanacoのledger-cliトランザクション例
この例で記述しているのは、次のようなnanacoのポイントと電子マネーの流れ:
- 最初に
Opening Balance
で nanaco各要素の勘定科目の初期値を宣言 - nanacoでマイナポイントを受け取り、それを電子マネーに交換
- nanaco電子マネーを使って買い物(セブンイレブンとマクドナルド)
account Assets:e_money:nanaco
account Expenses:Grocery
;
alias nanaco=Assets:e_money:nanaco
alias food=Expenses:Grocery
alias lunch=Expenses:Meals:Lunch
;;
2022/12/13 * Opening Balance
nanaco:card_em 1788 JPY
Equity:Opening Balance
2022/12/13 * Opening Balance
[nanaco:card_pts] 38 pts
Equity:Opening Balance
2022/12/13 * Opening Balance
nanaco:center_em 0 JPY
Equity:Opening Balance
2022/12/13 * Opening Balance
nanaco:center_pts 0 pts
Equity:Opening Balance
2022/12/13 * nanacoチャージ
; セブンイレブンのレジにてcard points を em へチャージ
nanaco:card_em 38 JPY
[nanaco:card_pts] -38 pts
2022/12/15 * マイナポイント取得
; 付与されたポイント=電子マネーをnancoセンター(預り)に収納
Income:一時所得 -15,000 JPY
nanaco:center_pts 15,000 pts
2022/11/02 * nanacoポイント交換
; nanacoセンター(預り)ポイントを nanacoマネーに交換
nanaco:center_pts -10,000 pts
nanaco:card_em 10,000 JPY
2022/12/21 * セブンイレブン
; 税抜き支払額の 0.5% のポイント付与
food 1862 JPY
nanaco:card_em -1862 JPY
(nanaco:card_pts) 8 pts
2022/12/22 * マクドナルド
; 毎月10日 6:00AM に前月末までのポイントが付与される
; 税込み!! 200円ごとに1ポイント
lunch 850 JPY
nanaco:card_em -850 JPY
(nanaco:card_pts) 4 pts ;[2023/01/10]
補足説明
- トランザクションの冒頭2行の
account
行で勘定科目を宣言しています。次の3行のalias
行は勘定科目のエリアス(短縮別名)を定義しています - トランザクション最下行の右端にある
;[2023/10/10]
はnanacoポイントが反映される日付けを記述しています4 - ポイント更新のタイミングの詳細についてはnanaco 使い方ページを参照してください
クエリの例
上のトランザクション( nanaco.ledger
ファイル) のあるディレクトリ内に、次のような内容のファイル( init.ledger
)を置きます。その中でLedgerのデータファイル名などの基本情報を定義しています。
--file ./nanaco.ledger
--sort date
--effective
--date_format %Y/%m/%d
こうしておけば、そのディレクトリ内で、Ledger起動時に --init-file init.ledger
のオプションだけを指定すれば済むようになります。
nanacoのbalanceレポート
balanceレポートでは pts
, JPY
のコモディティが並立して表記されます
$ led bal nanaco --init-file init.ledger
9,014 JPY
5,012 pts Assets:e_money:nanaco
9,014 JPY card_em
12 pts card_pts
5,000 pts center_pts
--------------------
9,014 JPY
5,012 pts
–exchange JPY オプション
コモディティ pts
は JPY
に換算して表記されます
$ led bal nanaco --init-file init.ledger --exchange JPY
14,026 JPY Assets:e_money:nanaco
9,014 JPY card_em
12 JPY card_pts
5,000 JPY center_pts
--------------------
14,026 JPY
ポイントのトラッキング
nanacoのポイントだけをトラッキングしてレジスター表示
$ ledger reg nanaco and pts --init-file init.ledger
電子マネーのトラッキング
nanacoの電子マネーだけをトラッキングしてレジスター表示
$ ledger reg nanaco and _em --init-file init.ledger
まとめ
nanacoカードに収納可能な金額は最大10万円ほどです。自分では普段は数千円ほどしか入れてません😓 nanacoは小銭入れ代わりに使うのが一番の使い方だと思います。
ポイントが溜まるとかお得とか言われますが、nanaco最大キャパの10万円を使っても、せいぜい500円ほどの「おまけ」がつくだけです5。
ボクのように数千円入っていれば安心というような使い方をしている人間に付与されるポイントはほんとうに微々たるものです。それを厳密にトラッキングする意味は家計・経理の面から言えばほとんど無意味です。
ここでは、敢えて複式簿記でnanaco内外のポイントとお金の動きをトラックしてみましたが、「やろうと思えばここまでは出来る」というほどの意味しか無いと思います😎
むしろ
家計簿的には、nanacoを内部構造まで忠実に勘定科目化するのではなく、nanacoを単一の勘定科目にしておいて
- nanaco内部はブラックボックスにして
- そこから先の細かいリワードポイントなどは追跡・分析せず
- コンビニでチャージした現金とか買い物の結果だけを記帳し(ポイントも記帳しない)
- しばらく使って、溜まったポイントをチャージしたりした結果、nanaco内の電子マネーの誤差が蓄積してきたら
- 年に1回くらいの頻度でつぎのようなトランザクションを書いて 調整 する
という感じ。たとえばある日(2023/10/10)、nanacoの電子マネーが3,510円になっていることを確認したら:
2023/10/10 nanacoポイント調整
Assets:e-money:nanaco =3,510 JPY
Equity Adjustments
これだけでOKです。これがnanacoとの妥当な付き合い方かと思います。
Footnotes:
-
nanacoアプリだけではなく、スマホアプリならもうちょっとできそうですが、ボクのようにスマホを持たずガラケーとタブレットで暮らしている人間にはその恩恵は届きません。 ↩︎
-
e-money アカウント内にはnanacoの他に、ANA, Costco, Kuroneko, Orico, Suica などがぶら下がっています。 ↩︎
-
単なる「好み」だけではなく、Ledger-cliではマルチバイト文字を使ったアカウント名にすると、レポートが 列崩壊 します。列崩壊を全面的に解消するのはとても大変です。どうしても列崩壊を避けたいときには、文字コードを「小手先でいぢくる」uglyな関数を介在させています😓 ↩︎
-
これはLedger-cliの独特の書式で、 Effective/Aux date です。詳しくはマニュアルを見てください。 ↩︎
-
nanacoは支払った金額のウチ、基本的には税抜きの金額だけがポイント付与のベースになってますし、ポイントがつかない商品やサービスもありますので、10万円で300円台のオマケと考えた方が良いかも知れません。 ↩︎