🐘

「ぞうのあしあと」を開発しました

に公開

はじめに

この度、ファントフット株式会社様の「ぞうのあしあと」を(受託)開発しました。

https://zounoashiato.phantfoot.co.jp

ぞうのあしあと」とは、児童福祉施設や訪問施設を探す保護者と福祉施設をマッチングするプラットフォームです。
従来の保護者側からの一方的な問い合わせだけでなく、施設側からお子さんの条件に合った施設が「スカウト」を送る仕組みで、より効率的なマッチングを実現しています。

保護者は会員登録後、お子さんの情報を入力するだけで、条件に合った福祉施設からスカウトが届きます。これにより、何十件も問い合わせをして断られることや、施設が多すぎて選べないといった悩みを解決し、お子さんにピッタリな施設を見つけることができます。
本記事では、このサービスの開発経緯や技術スタックについて少し紹介します。

技術スタック

フロントエンド:Next.js
バックエンド:TypeScript + Go
インフラ:GoogleCloud
決済:Stripe

インフラの詳細

  • データベース:Firestore
  • バックエンド周り:Cloud Run
  • 認証:Authentication
  • ストレージ:Cloud Storage
  • バッチ処理:Cloud Scheduler
  • メール:Resend

開発経緯

このサービスを開発するにあたって、「最速でリリースし、初期投資を限界まで抑える」ことを最優先する必要がありました。

そのため全てフルマネージドサービスで固め、さらにリクエスト数で課金されるサービスのみ採用しました。DBにSQLを採用しようか悩みましたが、インスタンス稼働時間で課金されるため初期段階では不採用にし、Firestoreを採用しました。
規模が大きくなりアクセス数が増えてくるとFirestoreの方が高コストになると思うので、その際はCloud SQLまたはSpannerに移行する予定です。

クラウドアーキテクチャについて

クラウド構成図は以下の通りです。
(主要なものだけ載せています。細かいところは省略)

アーキテクチャ図

Cloud Runについて

Cloud Runサービスを2つ立ち上げていますが、それぞれ以下のような役割を持たせています。

  • Webホスティング 兼 メインのAPI (TypeScript)
  • Pub/Sub サブスクライバー (Go)

Pub/Subについて

PubSub経由で動かしている機能は以下の通りです。

  • メール送信
  • バッチ処理

これは処理失敗時にリトライさせる必要があるため、PubSub経由で動かしています。

バッチ処理はCloud Schedulerで毎日トリガーしてPubSubにパブリッシュしています。主に日々の統計データをスプレッドシートに書き出しています。

Cloud KMSについて

CloudKMSでは、チャットメッセージを暗号化/復号するために使用しています。メッセージは運営が閲覧していいものではないので、KMSで暗号化してからFirestoreに保存しています

https://cloud.google.com/kms/docs/key-management-service?hl=ja

これを導入することで、「メッセージをやり取りしている当人たちのみが閲覧できる」という非常に安全なチャット機能を実現しています。Firestore管理画面を見ても解読はできません。

今後の進化

現在はあくまで「福祉施設とお子さんをマッチングする」というシンプルなサービスですが、将来的には以下のような機能を追加したいと考えています。

  • 福祉施設業務の自動化(お子さんの記録の一元化、保護者への共有)
  • 複数施設とのデータ連携

この記事を読んでいただいた方の中で、もし身近に「福祉施設探しに苦労されている方」や「お子さんを探すのに苦労している福祉施設の方」がいらっしゃいましたら、ぜひ「ぞうのあしあと」をご利用ください!

https://zounoashiato.phantfoot.co.jp

以上です!

Discussion