はじめに
最近ですが、LINEでやり取りするトランザクションデータをデータベースではなく、ユーザのスプレッドシートで直接管理することを推してます。
メリットとしてはこんな感じです。
1. サービス内でデータを保持しないということは、データ保持の責任リスクを軽減できる
2. ユーザに馴染みのあるExcel形式であり、スプレッドシートの機能で可視化できるのでデータ分析もしやすい
このメリットを活かすサービスとして、家計簿アプリを作りました。
家計簿アプリについて
コンセプト
- 後で家計簿に書こうとしても、ついつい忘れてしまう。なので、モバイルアプリで買ったその場で登録!!
- それでも人間は忘れてしまう。そんな時は、モバイルアプリでちまちま登録せず、PCでまとめて登録しよう!!
- 使い慣れたExcel形式だから、自分の好きなようにデータ分析もできる!!
一応、以前作ったプレゼンですが、こちらでもコンセプトを語ってます。
今回の改良点
今までは単純に買ったものをスプレッドシートに書き込むだけでした。
巷でこんな声を聞きました。
「買い物してたら、ついつい買いすぎちゃって、月の生活費の予算を超えちゃったわ」
・・・なるほど。
じゃあ、月のトータル金額が見れるようにしましょう。
サーバー環境
サーバサイドはNode.jsで作っており、スプレッドシートの操作は以下のモジュールを使ってます。
google-spreadsheet
※Githubにも全ソースを上げてますが、以下のソースコードはQiitaに載せるにあたって分かりやすくするためにGithubのソースコードとは多少異なります。
まずは月の集計金額を出す必要があるので、query関数をスプレッドシートに書き込んでます。
letdoc=newGoogleSpreadsheet(sheetId);// スプレッドシートIDを指定// 認証関連のコードは省略します(※そのうちQiitaに記事書きます)// スプレッドシート(doc)から、対象のシート(sheet)を取得したところから書きます。// query関数を書き込むセルの指定awaitsheet.loadCells('F1');letcell=sheet.getCellByA1('F1');// 関数を書き込む際は「formula」を使います。cell.formula=`=query(A:C,"select B,sum(C) where B is not null group by B label B 'sum 買ったもの'",1)`;sheet.saveUpdatedCells();
これだけではツマラナイので、グラフも入れて分かりやすくしてみます。
とはいえ、スプレッドシートの関数でグラフ化ができるのは今のところ少ないようです。
※本当は円グラフを使いたかったのですが、関数ではできないようなので棒グラフにしてみました。
// for文でぐるぐる回して、SPARKLINE関数を使って棒グラフを追加してますfor(leti=2;i<=index;i++){awaitsheet.loadCells(`H${i}`);letcell=sheet.getCellByA1(`H${i}`);cell.formula=`=SPARKLINE(G${i}, {"charttype","bar";"max",MAX(G:G)})`;sheet.saveUpdatedCells();}sheet.saveUpdatedCells();
今後の改良点
実は、買ったもの(商品名)で集計しているので、例えば「生活費」みたいなカテゴリで集計する形にはまだなってません。
今度はその辺りを直したいと思ってます。
最後に
今回は改良した部分を中心に記事を書きましたが、そもそもユーザのスプレッドシートに書き込むための設定方法については書いてません。
次回はその辺りを書きたいと思います。