我が家のDX(Digital Transformation)家計簿システム DIY

パソコン関連DIY
我が家のDX 家計簿システム DIY

最近話題のDX(Digital Transformation)ですが、我が家ではすでに7年以上も前からDXに取り組んでおります。その代表的なものの1つが、我が家の家庭内金融処理システムです。(笑) と言えば凄い大袈裟ですが、ようするに家計簿+支出管理+精算+分析のシステムです。7年に亘って休日にコツコツと家族の意見を取り入れながら、アジャイルで開発を進め現在に至っております。今後まだまださらなるDX化に向けて開発を継続しますが、どんな事をしたのか自分への備忘録としてブログにまとめましたので、ご紹介致します。

このシステム開発に至る経緯

この家庭内イントラネットでの構築に至る経緯を書いておきます。実は、このシステムに落ち着くまでは紆余曲折がありました。これを構築する以前は、家計簿ソフトのベストセラーで有償の家計簿ソフト(てきぱき家計簿マム)を購入して長年使用しておりました。家計簿入力をしっかりと行いたい人には良くできたソフトと思います。何度かバージョンアップを経験し、メジャーな更新の際は購入し直したりもした記憶があります。(Windows10になった頃に再導入が出来なくなって、新しいバージョンを購入した。)

ただ、このソフトはPCに導入するとそのPCでしか使用できず、また外出先からデータの入力や確認を行いたくとも外から閲覧や入力する事も出来ず、一人のユーザーが家でソフトのインストールされたPC上での管理となってました。要するに私の妻のパソコンで妻に管理を任せっきりでした。(まぁ、家計簿帖のような紙物での管理ではないので、すでにデジタル化していたと言えない事はないのですが、私としては特定のPC上でしか管理出来ない時点で、NGです)

追記:当時はそうでしたが、今はクラウド版が出来て改善されたようです。クラウド版についてはこちらで紹介されてますが、月額330円が課金されるようです。いろんな便利な機能が追加されているので、月々330円程度なら問題ないって人には、結構良い家計簿ソフトと思います。)

ところで、当時も今も私はお小遣い制なので、お小遣い以外の出費(昼食代やタクシー代などの交通費などの私の立替金)の精算は、領収書を妻に渡して精算額を妻から受け取ると言う方式でした。

勤務中の交通費は会社請求で、会社から我が家の銀行口座に振り込まれますが、いったんは私の財布から出たお金なので妻の家計簿ソフトに記録してから私に返金されます。実は、この処理が遅延気味で時々私も困っておりました。

私

ねぇねぇ、早く昼食代とか交通費の立替分の精算してよ~~。

もう財布にお金無いし~~。

妻

ちょっと待って。今パートとかPTA役員で忙しくて家計簿に入力できてないの。週末に精算してあげるから、それまで待ってて。

妻にとっても日頃の出費の食費や光熱費、通信費、教育費、銀行口座の支出管理の為の入力作業を一手に引き受けて、特定の1台のPCでしか作業できない家計簿ソフトで行っており、週末に溜まったレシートや銀行口座、クレジットカードの利用明細を確認しながらの入力作業が大変なようでした。

しかも、以下のような時はさらに時間がかかって、私にもそのとばっちりが。。。

妻<br>

ちょっと、家計簿の収支が実際の残金と合わないのよ~。どこかで入力間違えたのかしら? まだ出してないレシートとかある? この金額、何に使った? 

ちゃんと使ったレシートを全部出して・・・

もう~っ、家計簿に入力するの大変なんだから・・・ 足りないのは私のお小遣いから調整してんのよ!! 

と、最後はなぜか私にブチ切れられたりする会話のやり取りが週末毎に続いておりました。(涙)

すみません、長くなりましたがこの状況を打開したく、趣味のDIYを活かして家計簿システムを自作する事に至った次第です。

システムの概要

最初にシステムの概要ですが、システムそのものは我が家のイントラネット上に構築されてます。以下がその構成です。どれも10年以上も昔の古いマシンですが、増強保守をしながら今でも問題なく使えてます。

# Machine OS用途Software
1 ThinkPad R50e Linux CentOSメインサーバー システムLampp/Eclipse/SVN
2ThinkPad x201Windows 10データ・バックアップ用Docker
3Dell Vostro 420Windows 10開発/保守運用マシンXampp/Pleiades/SVN
System 構成

このシステムへのアクセスはPCのウェブブラウザーや、スマホからアクセスできるようになってます。家族の誰もが自由にいつでも使用できる環境です。

機能要件

我が家のシステムの機能要件は以下です。

  1. 支出入は家族が個人毎にUserID/Passwordでシステムにログインして、自分の利用額を入力する(利用日、カテゴリー、支払方法、コメント等)
  2. システムへの入力作業は、PCやスマホのブラウザーから行う
  3. 全ての銀行口座の収支をシステムに取込んで残高推移を管理する(給与振込口座、教育費積立口座、等々)
  4. クレジットカードの利用明細は引落額が確定したら、システムに取込み実際の利用額と請求額に間違いは無いかチェックする機能を実装する(以前請求額にクレジットカードの不正利用の請求があった為トラウマとなり、必ずチェックするようにしてます)
  5. 立替金の精算機能を実装する
    1. 立替金の精算リクエスト機能
    2. 立替金の精算金額の承認/不承認/差戻の機能
    3. 支払の機能(立替金額が承認されると、現金または電子マネーで送金する)
    4. 立替精算金の受領処理の実装(いわゆる電子サインです)印鑑不要です(笑)
    5. 立替精算金額の履歴表示機能(支払った、いや、まだ貰ってない論争の回避)
  6. 月間/年間の家計の支出入の推移の表示(家計簿ソフトの基本中の基本)(個人別もあり)
  7. 外部インターネット経由で、システムにログインして利用可能

と、まぁ、こんな感じです。どれもこれも、今迄は手動で妻が週末に苦戦しながら行っていた作業を軽減する為の仕組みです。

第一に、レシートからの入力作業が個々人に割り当てられたので、自分の使った分をきちっと入力するだけOK。妻の入力作業の負担は大幅に軽減されます。しかも、使用した本人が入力するので日時も額も記憶にも鮮明で、誤入力も殆ど生じません。

非機能要件

非機能要件としては、

  • 24×7の可用性(別にダウンしても問題ないと言えばないですが)
  • セキュリティー対策をして、外部から不正侵入されない事

ぐらいです。

使用したソフトウェア

これらを実装する為に使用したソフトは以下です。すべてフリーソフトです。

  1. Lampp ( Apache Web Server, MySQL, PHP )
  2. Eclipse (Linuxでは、Eclipse, DELLのVostro上には、Pleiades)
  3. SVN Server(バージョン管理用で、Vostro上に立ててます)
  4. Webのブラウズ自動処理の為、Python(Selenium)

システムの実装について

サーバー構築の為に使用したマシンは、もう使わなくなって捨てられる寸前だったThinkPad R50eです。このマシンへのLinux導入や、SSD化の顛末はこちらのブログに書いてます。ご興味があればぜひ。こんな古いパソコン使ってる人いないと思いますが・・・(汗)

このLinux化したマシンに、MySQLPHPでウェブサービスを実装してます。R50eが我が家の金融処理システム(笑)のメインサーバーです。Lamppのパッケージがダウンロード出来たので、それを使用してます。したがって、データーベースはMySQLです。ほぼ同じ仕組みをDELLのVostro420上に構築して、こちらはPleiadesを使用したのでXamppが導入されますが、開発用に使用してます。Subversion SystemのサーバーをVostroに実装し、開発コードはすべてSVNで開発コードのバージョン管理をしてます(会社の普段の仕事では今やGitが主流ですが、家ではSVNです)

絵で描くとこんな感じです。

System Architecture

家にいる時は普通に家のWi-Fi経由で当システムのR50eのURLにアクセスします。外部からのアクセスの場合は、DMZのR50eに予め登録されたIP RangeからのInboundの443ポートへのアクセスだけを通します。実はここをしくじると世界中からSSHやVNCコネクションや、ありとあらゆるリクエストがきて、攻撃されます。踏み台にされたら責任問題ですから慎重にセキュリティーを固めてます。ハニートラップみたいなことも仕掛けていて、すべての攻撃元IPもMySQL DBに蓄積して時々チェックしてます。443だけでもphpmyadminやら、その他DefaultのよくあるAdmin関係のURLはことごとくスキャンされてアクセスが試されますね。

システム構築にクラウドも検討して一時期利用、でもやめた訳

実は、当初、自宅内のサーバー計画は考えておらず、AWSやIBMのクラウド利用を予定していました。AWSは初回限定でお試し期間があり、限度を超えない限り1年間無料で利用できますIBMの方はKubernetsのサーバーを1か月間無料で永遠と繰り返して利用できます。ただ、一ヵ月毎に削除されるので、サーバーを構築し直しが面倒で諦めました。(どちらも課金されても良いなら全く問題ないのですが、課金は避けたいのと、やはり、外部サーバーに個人情報のような家計情報を置いておくことに不安があり、利用をやめました。)

AWSは数か月だけこのシステムをホストして使用しましたが、やはり途中から我が家の家計簿をAWS側に置く事に不安になりやめました(たぶん大丈夫なのでしょうけど、自信がもてず、どうせ無料期間も1年で終わるので自宅サーバーにしました)

システムのユーザーインタフェースに関して(Web Design)

システムのユーザーインターフェースはレスポンシブWebページです。BootStrup Frameworkを使用してレスポンシブ・デザインにしてるので、スマホからでも快適に使用できます。仕事ではもっぱらNodejsを使用してるのですが、我が家のシステムはPHPで開発しました。PHPは非同期処理のトラップにハマる事がないので、プログラムしやすいですね。使用者も限定されているので、非同期処理するパフォーマンスがらみの必要性もなく、PHPでの開発の方が効率的でした。

システムへの銀行口座データの取り込み

最近銀行もe口座とかにする事で通帳を無くす代わりに、入出金データーをCSVでダウンロードできるようになりました。しかし、ちょっとそのままでは使用できないCSVフォーマットで項目も分かりずらいカタカナ記述です。そこで私は無料のMoneyTreeを使用してます。MoneyTreeだと複数の銀行口座のデータをひとまとめにWebで管理でき、かつ、同期した銀行の入支出の項目に自在にカテゴリーを付けたり、わかりやすい項目名に変更して保存記録できるので大変便利です。ただ、データをCSVでダウンロードする為には、月額で500円の有料バージョンにしないと出来ません。 ・・と言う事になってます。

ですが、ちょっとだけ不便ですがChromeブラウザーを使えば、ちょっとしたマクロをサクラエディターで作っておけば、Cut&Pasteで簡単にCSVファイルを作成できてしまいます。と言うわけで、私は無料バージョンのままMoneyTreeを有効に活用しております。

システムへのクレジットカードのデータ取り込み

MoneyTreeを使用しているなら、クレジットカードのデータも取りこめるのですが、クレジットカードの明細は以前からクレジットカード会社のホームページで、CSVファイルとしてちゃんと保存できるので、特にMoneyTree経由でC&PしてCSVにする必要性もなく、こちらのデータは請求額確定のメールがきたら、クレジットカード会社のWebをCSVファイルとしてダウンロードして、家計システムの取りこんできます。CSVを我が家の家計簿システムに取りこむ部分はPHPで開発しました。これで、銀行口座のデータのCSVも、クレジットカードの利用明細のCSVデータも、MySQLデータベースにワンクリックで取りこむ事ができます。今後の機能拡張計画では、Selenium使うことで、x201のマシンからタスクスケジューラーでPythonを起動してクレジットカードの確定明細のCSV取込を自動化するようにしたいと考えてます。(ただVisaは、UserID/Passwordだけでなく、追加で画像はめ込み認証とかがあって、プログラム的にログインさせない仕組みなので、要検討です)

家族への立替金精算の支払い処理

こちらに関しては、我が家のシステムの精算リクエストページ経由で申請されたリクエストを精査して、「お小遣いで払ってよ~」と言う買い物は不承認にして、それ以外の立替金については承認して支払います。支払いはJCOIN精算やPayPayや現金で支払いますが、すべてこのシステムにログとして入出金が記録されます。当システムではJCOIN精算やPayPay精算現金精算などを、口座の振替ページで入力する事で、収支が常に合うように実装しています。

データのバックアップ

何が起きるからない為、万が一に備えてMySQLのDBは毎日バックアップを取ってます。

システム構成の内、ThinkPad R50eと、ThinkPad x201は常時起動しております。これらはノートブックパソコンなので、バッテリーが装着してある為、数時間程度の停電があっても大丈夫です。R50eのMySQLのデータのバックアップやSCPするスクリプトをCronjobとして登録してます。システムの開発コードはEclipseのワークスペースやSVNに保存されているので特に気にはしてませんが、SVNのリポジトリーはVostroを立ち上げている時にSVNのバックアップが自動でされるようにしてます。

システムのプログラム開発について

DELLのVostro420のIDE(Eclipse)でPHPコードを開発して、LocalのMySQLでテストして、コードをコミットしたら、R50eのEclipseでSVNからUpdate(更新)する事でR50eの本番サーバーにコードが反映される仕組みです。

家計データの分析処理について

これに関してデータサイエンス的な試みを行っていて、別途別な機会にブログにしたいと思ってます。基本MySQLに全てのデータがあるので、接続してTableauでグラフ化したりPythonで処理したりしています。

おわりに (Lessons Learned)

私の作成したシステムのUIとかを画像で紹介したいのですが、あまりにも我が家庭用にカスタマイズされており、ちょっとスナップショットを紹介するのもはばかられます。自作DIYによる家計簿システム(私は家庭内金融システムと呼んでますが)の良いところは、本当に我が家の資金管理にマッチした開発運用ができる点です。例えば、子供達に自分の使ったお金について管理させ、とは言え、親の給与やパートの給与金額の収支など、子供に不要な情報は親だけにしたり出来る点などもあります。

有償の家計簿だと自分でプログラム開発する苦労はありませんが、自分好みにカスタマイズは限度があり自由には出来ません。また、バージョンアップや、運営会社の事情で予期せぬSunsetや新バージョンの購入を余儀なくされる事もなきにしもありません。

しかし、自分でシステムを構築すると自由に機能を追加する事が可能で、しかも無料です。^^;

今後はx201にDockerを入れているので、MySQLとNginxでこのシステムの複製を作成するのも良いかなと考えてます。R50eもかなり骨董品級になりつつあり、そのうちダメになる時?(そんな気はしないのですが)に備えて、X201でも継続運用できるようにしておきたいと考えています。

ただ、Windows OSのマシンより、Linux OSのマシンの方が、勝手な再起動とかもかからず一旦セキュリティーを固めてしまえば、安定稼働してくれるのでなるべくLinuxマシンでの運用をしたいと考えてます。(CentOSはもうメンテされてませんが)

さて、1点だけ、MoneyTreeに問題点がありました。月末データ(特に31日とか30日)の取引データは、その月の合計金額に反映されていない事がたびたびあります。恐らくMoneyTreeのBUGか、MoneyTreeのサーバーのTZがJSTでないのかも知れませんが、我が家の月の収支と計算が合わず調べた結果、我が家のシステムの集計の方が正しいと判明しました。まぁ、無料で利用しているMoneyTreeなのでそこは文句言いませんが、有償で利用しているとしたら、とんでもないBUGだと腹立たしく感じていたと思いますが、無料で使用させて頂いている(データはある程度個人特定しない方法で利用されているかもですが)ので、文句言いません。無料サービスはそういうものだと考える事にしてます。

もし、ご自身で家計簿システムを構築しようと考えている方の参考になったのであれば幸いです。

最後まで読んで頂きありがとうございました。

投稿者プロフィール

diy-hs
diy-hs
”なんでも自分でやってみる” をテーマに、ブログを書いてます。素人には無理と思う様な事も、実際にやってみるとあっさりと出来たりする事もあります。失敗もありますが、失敗する事で経験となり、次は少し上達したりします。それが楽しいです。そんなDIYの情報を発信して行けたらと思ってます。仕事はAIやクラウド関連を担当してます。そんな訳でプログラミングやシステム構築も趣味と実益を兼ねてDIYを楽しんでます。ギターはもともとクラシックギターを学び、インストルメンタル専門でしたが、高校生の頃にテレビでみた卒業の映画でPaul Simonの曲に憧れて、それ以降いろんなジャンルの弾き語りも楽しんでます。S&Gの曲なら楽譜なしで弾けます。^^; Twitterの方でも発信していますので、ぜひフォロー下さい。

コメント

タイトルとURLをコピーしました