Agroxis
← Tech Blog 一覧へ
2026年6月9日

How to develop for web application_version1

AIApplicationmobile
初期のアーキテクチャ設計書(概要)

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 収益源まとめ

  1. 生徒サブスク(継続課金)
  2. 成約手数料(都度・成果報酬)
  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マッチング/レコメンド(目的×時間×レベルで最適提案)/多言語・多通貨でアジア展開/モバイルアプリ/企業/ギフト需要