Java
OAuth
spring-boot
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