Edited at
Stylez Day 2

自家製家計簿システム作って家庭内で運用する

Stylez Advent Calendar 2018の2日目です。

今年は色々な方が書いてくださるようなので嬉しいです。


はじめに

家計ってどう管理していますか?

私事ですが、今年結婚いたしました。

共働きなのでいい感じに折半したいなーとなったのですが、いい感じに折半できるアプリケーションを見つけることができませんでした。。。

ないんだったら自分で作ればいいのよ!

と、某黄色いカチューシャの人が言っていたのを思い出したので作ってみました。

ここ1年半ほどまともに作らせてもらえてないですし、息抜きを兼ねて…。


こんな感じ

必要な機能は折半なのでこれだけです。

スクリーンショット 2018-12-02 20.44.53.png

メモ欄の部分にまとめたいkeyを入力して、精算を押すだけです。


分担

お互いSEなので分担して進めました。

- 自分:認証周りとか土台周り

- 嫁:画面、計算周り


アーキテクチャ


  • 言語:Java 8

  • フレームワーク:SpringBoot 2.0

  • 画面:Thymleaf 3、mini.css

  • データストア:zaim

  • 認証:OAuth1.0a

認証周りはこの辺を見てください。

JavaでZaimのAPI(OAuth1.0)を叩く

(以前やってたのはこれがやりたかったのです。


選定理由


  • zaim


    • 折半したいだけだから家計簿部分まで作るのはなんかちがう

    • レシート読み取りでの登録が便利(最近ますます精度が上がっててすごい

    • APIが公開されている



  • Java + SpringBoot


    • お互いJavaはわかる

    • SpringBootだと早そうだけどちゃんと使ったことはなかった



  • mini.css


    • Bootstrapはなんだかんだ面倒だから別の使ってみたかった(らしい

      嫁曰く、結局同じくらいの使用感だったみたいですが。。




どう使っているか


データ登録

スマホアプリから各々レシートを読み取ったりしてデータをzaimに登録します。

このとき、メモ欄にお互いの名前をいれておきます。

これをグループ化のキーとして使います。

スクリーンショット 2018-12-02 21.05.07.png


データ取得

データ取得はOAuth1.0aでzaimと認証してREST APIで引っ張ってきます。

ローカルで使うだけなので、tokenはCookieに入れてしまって、再認証がいらないようにしています。

スクリーンショット 2018-12-02 21.08.16.png


計算

集計期間を指定して、お互い使った金額を取得し計算をします。

グループ化のキーもこのとき指定します。

スクリーンショット 2018-12-02 21.12.52.png

面倒なので前回精算した日をLocalstorageにいれてしまって、現在日付との間で使った金額を算出してます。

グループ化のキーにお互いの名前を入れて、どっちが何円使って、どっちが何円払うかみたいなことを計算します。


運用

今は2〜3ヶ月に1回で精算しています。

今のところローカルPCで実行して、集計後はslackで共有しています。


今後の改善


  • Slack連携


    • スラッシュコマンド打ったら精算してくれるとか

    • 精算後自動で通知してくれるとか



  • サーバでの運用


    • 買って以来何者にもなれていないラズパイに乗っけたい





まとめ

やっぱり作るのはたのしい。

自分たちの生活は自分たちでどんどんよくしていきたい。

これで困ってる人結構いると思うんですよね……。

(ほんとはもっと作り込んでwebサービス化したかったのですが、データストアにzaimを使用しているところでよくないかなと思い諦めました。)


この内容で社内LTをさせていただいたときの資料です。

LTするの初めてだしでちょっと緊張したのは内緒です。

https://speakerdeck.com/kxn4t/homemade-household-account-book-system