プロジェクト概要
飲食業界向けに、空席募集 × 来店応募 × 成果報酬決済をワンストップで提供するマーケットプレイス「キャッチミー」を開発しました。LINE LIFF + Firebase を基盤に、ドメインロジックを「台帳 (Append-only) + 状態派生」で設計しています。
課題
「店舗が空席募集 → ユーザーが応募 → 来店成立 → 集計・締め → 請求」というワークフローには、お金の流れが含まれます。一般的なステータス管理だと、修正対応や月締めをまたぐ訂正で破綻しがちです。会計的に整合する設計が求められました。
解決方針
Append-only な台帳テーブルに「事実だけを書き足し、ビューはそこから派生する」設計を徹底。修正はマイナス仕訳として記録し、状態カラムをむやみに増やさず台帳の集計で表現します。Vercel Cron + Firebase Function による月次バッチで、請求 CSV と振込 CSV を自動生成。LINE はチャット機能を持たず通知 + CS 導線にだけ使う、と機能スコープを意図的に絞り込みました。
アーキテクチャ
- Frontend: Next.js (App Router) + LIFF + Server Actions
- Backend: Firebase Firestore + Cloud Functions (月次バッチ)
- Cron: Vercel Cron + Cloud Functions
- Messaging: LINE Messaging API (通知 + CS のみ)
- Identity: LINE Login + 年齢確認 (20+) フロー
成果・特徴
- 「状態を増やさない」「台帳で表現する」原則を PRD と README で明文化し、長期保守に強い構造へ
- 月次の請求書 / 振込 CSV を自動生成し、運営の集計工数を削減
- アプリ内チャットを排除することで、CS とプロダクトのスコープを明確に分離
ハイライト
台帳 + 状態派生のドメイン設計
状態をむやみに増やさず、台帳 (Append-only) からビューを派生。修正は「マイナス仕訳」で表現。
請求 / 振込 CSV の月次自動生成
締め日に Firebase Function + Vercel Cron が走り、請求書と銀行向け振込 CSV を自動生成。
通知に振り切ったチャット設計
アプリ内チャットを持たず、LINE は通知 + CS 導線のみに割り切ることで運用コストを最小化。