How to develop for web application_version1

CookAlong — リモート料理教室プラットフォーム 要件定義 / アーキテクチャ設計
ステータス: Draft v0.1 / 作成日: 2026-06-12 / コードネーム CookAlong(仮称・後で変更可) 位置づけ: Agroxis の「人と機会をつなぐマッチングプラットフォーム」事業の実プロダクト
1. プロダクト概要
リアルタイム動画で「先生と一緒に料理を作る」リモート料理教室プラットフォーム。 録画動画教材(YouTube/Udemy)と違い、その場で会話・質問しながら一緒に作る双方向ライブ体験が中心価値。
- 先生(Teacher): 自宅で実際に料理をしながら、複数の生徒と動画・音声で会話して教える
- 生徒(Student): 先生の空き枠を予約し、事前に材料を準備して、ライブで一緒に作る
- 形態: グループ教室(定員1〜5)と 1対1 個人レッスンの両方に対応
- コミュニケーション: 音声中心 + 補助チャット。料理中は手が塞がるためハンズフリー前提
- 収益: 生徒のサブスク(会員ランク)+ 先生への成約手数料(マーケットプレイス)
- 展開: 日本国内から開始し、将来アジア圏へ(多言語・多通貨・タイムゾーン対応を初期から設計)
2. ターゲット / ペルソナ
ロール
ペルソナ例
主要ニーズ
先生
料理上手な主婦/元料理人/料理研究家。スキマ時間で収入を得たい
簡単に開講・集客・収益化したい。信頼を可視化したい
生徒(学習型)
料理を上達させたい20〜40代
自分のレベル・目的に合う先生を見つけ、その場で質問したい
生徒(目的型)
誕生日/記念日に特別な料理を作りたい人
「誕生日向け・30分・初心者OK」など目的から探したい
3. 体験フロー(コアループ)
[生徒] 検索/絞り込み → クラス詳細を見る(料理写真・所要時間・材料・先生の実績) → 空き枠を予約 → 決済(または会員特典) → 事前に材料を購入・仕込み → 開始時刻にライブルーム入室 → 音声+動画で一緒に料理 → 完成・レビュー投稿 → (会員ランクに応じて)後日 録画を見返す[先生] プロフィール作成(実績・料理歴・得意ジャンル)→ クラス作成(メニュー・定員・材料リスト) → 開講枠を公開 → 予約が入る → ライブ授業を実施 → 報酬を受領(手数料控除後)
4. 機能要件
4.1 共通
- ユーザー登録/ログイン(メール+ソーシャル)、ロール(先生/生徒の兼任可)
- 多言語UI(日→英→アジア言語)、多通貨、タイムゾーン自動変換
- 通知(予約確定・開始リマインド・キャンセル・録画公開):メール+アプリ内
4.2 先生(Teacher)
- プロフィール / 信頼性:
- 過去に作った料理の写真ギャラリー
- 料理経験年数、得意料理、得意ジャンル、料理歴/経歴(※個人を特定する情報は不可)
- 対応人数(家庭料理向け / パーティ向け 等)、対応する用途タグ
- レビュー・評価(★平均、件数)、認証バッジ(運営確認済み)
- クラス(授業テンプレート)作成:
- タイトル / 説明 / 料理ジャンル / 用途(誕生日・記念日・作り置き 等)
- 完成イメージ写真、所要時間、難易度、出来上がり人数(何人前)
- 形態(グループ / 1対1)、定員(1〜5)、料金
- 必要な材料リスト・道具リスト・事前仕込み手順(← 生徒が当日までに準備)
- スケジュール管理: 空き枠(繰り返し可)の登録、開講枠の公開/締切
- 報酬管理: 売上・手数料・入金履歴(Stripe Connect ダッシュボード相当)
4.3 生徒(Student)
- 検索・絞り込み(ジャンル / 用途 / 所要時間 / 人数 / レベル / 言語 / 日時 / 価格)
- クラス詳細閲覧、先生プロフィール閲覧、レビュー閲覧
- 予約(空き枠の「席」を確保)、キャンセル/返金(ポリシーに従う)
- 事前準備チェックリスト(材料・道具)
- ライブ授業への参加、終了後のレビュー投稿
- 会員ランクに応じた録画の見返し
4.4 ライブ授業(リアルタイム動画)
- 1対1〜1対5の双方向ビデオ+音声(SFU構成)
- 音声常時ON中心、ハンズフリー操作(大きなUI・タップ最小・必要なら音声/簡易操作)
- 先生の手元アングル+顔の切替(複数カメラ/画面切替)を想定
- 補助チャット(テキスト)
- 画面共有/写真共有(レシピ表示など)※Phase2
- 録画(egress)→ ストレージ保存 → 会員ランクに応じて視聴可
4.5 予約・キャパシティ
- グループ枠は「定員つきの席(seats)」管理。満席で締切
- 1対1枠は定員1の特別ケースとして同一モデルで扱う
- ダブルブッキング防止、開始前リマインド、ノーショー対策
4.6 信頼・安全
- 先生の本人確認(KYC、Stripe Connect 連動)
- レビュー/通報、運営によるモデレーション
- プロフィールは「料理の実績」で信頼を示し、個人情報は非開示
4.7 管理(運営)
- ユーザー/クラス/予約/取引の管理、手数料率設定、通報対応、売上レポート
5. 会員ランク・収益モデル
5.1 生徒向け会員ランク(サブスク)
ランク
月額
主な特典(案)
Free
0
検索・閲覧・都度課金で予約
Standard
有料
受講料割引、録画見返し(例: 7日間)、予約リマインド強化
Premium
有料(上位)
録画ライブラリ無制限、優先予約、限定クラス、複数アカウント等
録画の見返し可否・保存期間は会員ランクで制御(要件どおり)。
5.2 先生向け収益
- 受講料からプラットフォーム成約手数料(例: 10〜20%)を控除して送金(Stripe Connect)
- 将来: 先生向け上位プラン(手数料優遇・露出強化)も検討余地
5.3 収益源まとめ
- 生徒サブスク(継続課金)
- 成約手数料(都度・成果報酬)
- (将来)先生プラン、企業向け/ギフト需要
6. 非機能要件
項目
方針
遅延
ライブは低遅延必須(目標 < 300〜500ms)。SFUの地域ノードを利用。アジアは東京/シンガポール拠点を想定
スケール
同時開講数 × 最大6接続/ルーム。SFUはマネージドでスケール
可用性
授業時間帯のSLA重視。決済・予約はトランザクション整合性
セキュリティ
認証/認可(RBAC)、ルーム入室は短命トークン、決済はPCI(Stripe委譲)
プライバシー
個人情報最小化、録画の保存/削除ポリシー、同意取得(録画される旨の明示)
国際化
多言語(next-intl)・多通貨(Stripe)・TZ(date-fns-tz)を初期から
コンプラ
特商法/各国の電子商取引・録画同意・税(将来は越境課税)対応
運用
マネージドサービス優先で運用負荷を抑える
7. システムアーキテクチャ
7.1 技術スタック(選定理由つき)
領域
採用
理由
フロント/SSR
リアルタイム動画/音声
LiveKit(Cloud→将来セルフホスト)
リアルタイムチャット/プレゼンス
LiveKit data channel or Supabase Realtime
動画基盤に相乗り or 軽量チャネル
DB
PostgreSQL
リレーショナル整合(予約・決済)。Supabaseなら認証/ストレージ/Realtime同梱
ORM
Prisma or Drizzle
型安全
認証
Auth.js(or Clerk)
ソーシャル+メール、RBAC
決済
Stripe:Billing(サブスク)+ Connect(先生送金)+ Webhook
マーケットプレイス送金とサブスクの両対応、国際対応
予約/空き枠
自前(キャパシティ対応)。Cal.com を参考
「定員つき席」のグループ予約は自前ロジックが要
ストレージ
Cloudflare R2 / S3(録画)、画像はCloudinary等
録画は大容量・egress費に配慮しR2
検索/マッチング
Postgres全文検索→将来 Typesense/Algolia、Phase3でAIレコメンド
段階的に高度化(ここでAgroxisのAI色)
通知
Resend(メール)+ cron(リマインド)
インフラ
運用軽量
7.2 主要データモデル(概略)
- User: id, email, roles[teacher|student], locale, timezone, createdAt
- TeacherProfile: userId, bio, yearsExperience, specialties[], genres[], careerNote(料理歴), photoGallery[], ratingAvg, ratingCount, stripeAccountId, verified
- StudentProfile: userId, level, dietaryPrefs[], allergies[]
- Class(授業テンプレ): id, teacherId, title, desc, genre, occasionTags[], dishPhotos[], cookTimeMin, difficulty, servings, format(group|private), capacityMax(1–5), priceType, price, currency, ingredients[], tools[], prepInstructions, language
- Session(開講枠): id, classId, teacherId, startAt, durationMin, capacity, seatsBooked, status, livekitRoom, recordingId?, recordingAccessTier
- Booking: id, sessionId, studentId, seats, status, paymentId, joinTokenIssuedAt
- AvailabilityRule: teacherId, recurrence, timeRanges
- MembershipPlan / Subscription: userId, tier(free|standard|premium), stripeSubId, status, features
- Payment / Payout / Transaction: amount, currency, platformFee, teacherPayout, stripeRefs, status
- Review: sessionId, studentId, teacherId, rating, comment, createdAt
- Recording: id, sessionId, url, durationSec, retentionUntil, minTier
- Notification: userId, type, payload, sentAt
8. MVP / フェーズ計画
- Phase 1(MVP・コアループ) 先生プロフィール+クラス作成(材料リスト含む)/検索・絞り込み(手動条件)/空き枠予約+定員管理/Stripe都度課金/LiveKitライブルーム(音声+動画+チャット)/レビュー
- Phase 2 サブスク会員ランク/録画(egress)と見返し権限/リマインド・通知強化/手元カメラ切替・写真共有/先生のKYC・送金(Connect)本格化
- Phase 3 AIマッチング/レコメンド(目的×時間×レベルで最適提案)/多言語・多通貨でアジア展開/モバイルアプリ/企業/ギフト需要
