こども用のポイントシステムを作った話

この記事は株式会社マネーフォワードの福岡開発拠点が主催している Money Forward Fukuoka Advent Calendar 2022 の 12 日目の記事です。
昨日は n_mta さんによる「新時代」でした。

こんにちは。マネーフォワード福岡開発拠点で SRE をしている T.Yamashita です。

この記事は、私が子育てに何かITスキルを活かせないかを日々考えながら奮闘して作成した個人用システムのうちの一つについて書いています。
同じような境遇の方々に少しでも役立てて頂ければ幸いです。

きっかけ

皆さんのお子さんは、幼稚園・保育園・学校などなど、自身から進んでいってくれるタイプでしょうか。
私の娘はそのタイプではなく、お家大好きっ子であり、

"保育園は行きたくないけど(理詰めされて)渋々行く"
"習い事は気が向いた時しか行きたくない"

といった感じでした。

そういった背景もあり、今年の4月頃から、我が家では娘が何か頑張った時にスタンプカードにスタンプを押すという取り組みを始めました。
台紙自体は画用紙を切り出し、表紙に娘が手書きで絵を描いた手作りのスタンプカードで、とにかく何か頑張ったらスタンプ1個を押し、カードが全部貯まったらサーティワンのアイスを一個買ってもらえる仕様です。

手作りのスタンプカード(名前部分をカット)

娘はスタンプカードが大好きで、(親の思惑は当たり)"保育園や習い事・宿題などを自身から進んでこなしてスタンプカードを押す!" という状況が継続できるようになりました。
ただ、運用を続ける中で以下のような不便な点が(主に娘から)挙がるようになりました。

  • 押したい時にスタンプカードを何処に置いたか分からなくなり毎回探すのが面倒

  • 家にスタンプカードがあるため、押したい時にすぐ押せない

  • 同じスタンプカードに色んな頑張った事を押すので、既に押したがどうか分からなくなる(何について押したかの管理が難しい

  • 家にあるスタンプが数種類しかない(サイズもバラバラ)

  • アイスクリーム以外のものにも使いたい

  • どのくらいスタンプを貯めれば何と交換できるのか分からない

そこで、10月末頃から思いきって家庭用のスタンプカードシステムを作ることにしました。(つくづく思いますが、ITスキルを持っているとこういう時に便利なんですよね。)

なお、ここ一年程インフラ系の仕事がメインで ruby 全然触ってないなぁ〜と思っていた事も、点火剤として十分な役目を果たしてくれました。

作ったシステム

今回作ったポイントシステムはコストを抑えつつ不便を解消する事を目的として以下の仕様にしました。

インフラ

インフラ: KAGOYA VPS
OS: Rocky Linux 8.7
Webサーバ:nginx
Appサーバ:Puma (inside docker container)
DB: MySQL8 (inside docker container)
SSL証明書: Let's Encrypt
バックエンド: Ruby on Rails 7
モバイルアプリ: 今回は作らない

今回利用した KAGOYA VPS や AWS、GCP といったパブリッククラウドの IPアドレス は一般に公開されているため結構攻撃を受けたりします
なので、SGで以下のように設定して運用してます。

SSH接続: 管理のためにアクセスする際は自身のIPアドレスを都度SGで許可  HTTPS接続: 日本以外の IP は(Firewallだときつい為)nginx で全ブロック

※(日本のIPも)fail2ban を使って攻撃と判断したものは自動BANしています

万一(攻撃等で)壊れた時のために、サーバ構築は Ansible、プログラムコードは Github (private) で管理し、DBデータは日次で自宅のNASにバックアップしてます。

アプリ

Webアプリとして実装した機能は以下のようにてんこ盛りになりました。
(趣味の開発だと、これもあったが便利だよなーとかをどんどん詰め込んでしまい、歯止めが効かなくなるのが辛い点ですね。)

  • スタンプ登録機能(好きな画像データをスタンプにできる)

    • 管理者/利用者ともスタンプを追加可能

  • スタンプカード機能(年月日ベースまたは回数ベースのスタンプカード)

    • 管理者はスタンプカードマスタを作成し配布

    • 利用者はスタンプカードにスタンプを押すたびにポイントが加算される

  • アイテム交換機能

    • 利用者は好きなアイテムを登録依頼できる

    • 利用者は登録されたアイテムの中からポイントを利用して交換依頼できる

      • 交換依頼時点でポイントが引かれる

    • 管理者はアイテム登録依頼されたアイテムを登録or却下できる

    • 管理者はアイテム交換依頼されたアイテムを受渡orキャンセルできる

      • キャンセルするとポイントが返却される

  • 履歴機能

    • ポイント増減の履歴

    • アイテム交換の履歴

  • お小遣い機能

    • 管理者はグレードマスタを作成し、ユーザーと紐付け

    • 利用者は自身のグレードにより毎月ポイント(お小遣い)を付与される

    • 利用者は自身のグレードによりボーナス月にボーナスポイントを付与される

  • 通知機能

    • アイテム追加依頼を管理者の LINE に通知

    • アイテム交換依頼を管理者の LINE に通知

    • 月額報酬ポイント付与を管理者の LINE に通知

    • ボーナスポイント付与を管理者の LINE に通知

そしてどうなったか

11月中旬から運用開始し、今の所不便なく使えてます
今回作ったポイントシステムについては現時点で必要な機能を全て備えているので、アレクサスキルを作って声でスタンプ記録とか、そういう少し便利になるかも?くらいな追加機能を入れて行くのはありかなぁと思ってます。
(娘はスタンプを押す行為自体が楽しいみたいなので、そんな機能イラナイと一蹴されそうですが。)

何はともあれ、不便な点が改善できて親も子供もハッピーになりました!
娘は今 Nintendo Switch のソフトが欲しくて、アイスやお菓子を我慢してポイントを一生懸命貯めているようです。(自分で "ポイント≒お金" を計画的に使ったり貯めたりが出来るようになる良い練習の機会になった点は思わぬ収穫でした。)

また、今回のシステムではスタンプや背景、プロフィールなどに好きな画像を登録できるようにしていますが、人の顔が入っている画像を登録してはダメとか(理由も含めて)ネットリテラシーを教え始める良い機会になりました。

色々メリットを書きましたが、何よりも娘が毎日ワクワクしながらポイントシステムを使っているのをみているだけで私は満足です(笑)

これから

今後も趣味ではこういった家庭内の不便をシステム化して解決し、仕事では FinTech の最前線で IT スキルを磨き続けていきたいと思っています!

この記事が気に入ったらサポートをしてみませんか?