プロジェクト概要
CloudDishesは、複数の飲食店を単一プラットフォーム上で管理可能なマルチテナント型フード注文・予約システムです。
顧客・店舗管理者・プラットフォーム運営者の三者に最適化された管理画面を提供し、注文処理・予約管理・売上分析を一元化することを目的として設計・開発しました。
SaaS型サービスとして拡張性と安全性を両立するアーキテクチャ構成を採用しています。
背景・課題
既存の飲食店向けプラットフォームには、以下の課題がありました。
- 高額なプラットフォーム手数料
- 店舗ブランドの制御不可
- 顧客データ活用の制限
- 分析機能の不足
また、プラットフォーム運営側には、
- 複数店舗の一括管理
- 安全なデータ分離
- 注文・予約の整合性維持
- 横断的な分析データ集約
が求められていました。
本プロジェクトでは、店舗の独立性を保持しながら、運営側が全体統括できる設計が必要でした。
技術的アプローチ
1. マルチテナントアーキテクチャ設計
複数店舗を単一インフラ上で安全に運用するため、以下を実装しました。
- テナント識別ロジック設計
- APIレベルでのアクセス制御
- データベースクエリへのテナントスコープ強制適用
- サーバー側でのデータ分離保証
これにより、店舗間のデータ混在を防止しつつ、インフラコストを最適化したSaaS構造を実現しました。
2. ロールベースアクセス制御(RBAC)
以下の役割を設計・定義しました。
- 顧客
- 店舗管理者
- プラットフォーム管理者
表示画面およびAPIアクセスをサーバー側で厳密に分離し、クライアント側制御のみに依存しない安全設計としました。
3. 注文ライフサイクル管理
以下の注文フローをサーバー側で管理しました。
- 注文受付
- 承認
- 調理中
- 完了/キャンセル
状態遷移はステートマシンとして実装し、不正更新や競合を防止しました。
ピーク時の同時注文処理にも対応可能なトランザクション設計を行っています。
4. 予約管理ロジック設計
予約機能では、
- 時間帯別テーブル管理
- 同時予約重複防止
- 自動確認ロジック
- 予約競合検知
を実装しました。
トランザクション境界を明確化し、過剰予約やダブルブッキングを防止する設計としています。
5. 分析・統合ダッシュボード設計
プラットフォーム運営者向けに、
- 店舗別売上分析
- 注文トレンド可視化
- 時間帯別データ分析
- 総取引状況の統括管理
を可能にするダッシュボードを実装しました。
テナントデータを分離しながら、集計処理は横断的に行える設計としました。
システム構成
バックエンド
- Spring Boot
- PostgreSQL
- REST API設計
- マルチテナント対応データ設計
フロントエンド
- Vue.js
- ロール別UI設計
- レスポンシブ対応
- Progressive Web App(PWA)対応
APIは将来的なモバイルアプリおよび外部サービス連携を前提とした設計としています。
技術的成果
- 複数店舗の安全な同時運用を実現
- データ分離を保証するマルチテナント構造
- 注文・予約整合性維持
- 店舗と運営側の明確な責任分離
- 拡張可能なSaaSアーキテクチャ実装
使用技術一覧
Spring Boot • PostgreSQL • REST API • マルチテナント設計 • Vue.js • RBAC設計 • PWA
プロジェクト体制
- 開発期間:7ヶ月(2024年)
- チーム規模:5名
- 開発体制:アジャイル開発
- 担当範囲:設計〜実装・SaaS構造設計まで一貫対応
- ※機密情報保護のため一部表現を抽象化しています。
本プロジェクトでの強み
- マルチテナントSaaSアーキテクチャ設計
- 権限管理設計(RBAC)
- 高整合性トランザクション処理
- 分析基盤設計
- フルスタック開発統括
リードエンジニア:ブライモ ラルフ
