モバイル拡張ロードマップ (排出業者 / 処理業者 + タブレット対応)¶
apps/mobile (Expo / React Native / expo-router) を、ドライバー専用から 3 ロール対応へ
段階的に広げるための計画。Web (apps/web, 23 画面) との機能差を埋めていく。
アーキテクチャ方針¶
| 層 | 実装 |
|---|---|
| 認証/ロール | src/contexts/AuthContext が tenantId / tenantType / role を app_metadata から公開 |
| ルーティング | src/lib/routing.ts#homeForRole() でロール別初期ルート。app/_layout.tsx の AuthGate がセッション変化で遷移 |
| ルートグループ | app/(auth) / app/(discharger) / app/(collector) / app/(driver) |
| レスポンシブ | src/lib/responsive.ts#useResponsive()(isTablet≥768 / numColumns / contentMaxWidth / hPadding) |
| データ取得 | 各画面で supabase を直接呼ぶ inline 方式(Web の lib/db 相当の共通化は未。将来 src/lib/db に切り出し候補) |
| RLS | discharger=自社 jobs / collector=自社 assignment + 担当 job (migration 9) |
完了済み (このイテレーション)¶
- 基盤: AuthContext ロール対応 /
useResponsive/homeForRole/ ロール別AuthGate・index app/(discharger)/index.tsx— 案件一覧ホーム(実データ・ステータスバッジ・タブレット2カラム)app/(collector)/index.tsx— 管理者ダッシュボード(受託待ち/今日の配車/進行中 KPI + 配車予定リスト・実データ・レスポンシブ)- ドライバー既存画面 + サインインのタブレット・レスポンシブ対応(中央寄せ最大幅 / タブレット2カラム)
残タスク (Web パリティに向けた段階計画)¶
Phase A — 排出業者コア¶
- [ ] 案件詳細
(discharger)/jobs/[id](assignment 一覧・状態可視化) - [ ] 案件作成フォーム(waste type / 数量 / 回収先 / 希望日)
- [ ] AI マッチング結果表示(
match_collectors_for_jobRPC) - [ ] マニフェスト一覧 / 詳細
- [ ] マニフェスト作成 + カメラ OCR(
expo-camera/expo-image-picker導入済み。POST /manifests/ocr連携 → モバイルが最も価値を出せる機能) - [ ] 処理業者ディレクトリ / 詳細・依頼送信
Phase B — 処理業者コア¶
- [ ] 受託待ち(inbound)の受託/辞退アクション
- [ ] スケジュール(週表示。タブレットはカレンダーグリッドが有効)
- [ ] 自社プロファイル(許可証 / 対応エリア / 車両 / 料金 の 4 CRUD)
- [ ] メンバー招待
Phase C — 共通 / ナビゲーション¶
- [ ] ロール別ボトムタブナビ(現状は Stack のみ。各ロールに
_layout.tsx+ Tabs を追加) - [ ] 設定(アカウント / 通知 / セキュリティ)
- [ ] 共通データ層
src/lib/db(Web の mappers/hooks 相当を RN 向けに整理。@tanstack/react-query導入も検討)
タブレット最適化 (Phase 横断)¶
- [ ] master-detail(一覧 + 詳細の左右分割)を案件一覧・スケジュールで採用
- [ ]
useResponsiveの breakpoint を端末で実測調整(横向きタブレット / 分割表示)
留意点¶
EXPO_PUBLIC_*はビルド/OTA 公開時にバンドルへ埋め込まれる(接続先は preview=staging)。- 認証・遷移は
AuthGate一箇所に集約。新グループ追加時は_layoutの Stack 登録 +homeForRoleを更新。 - 各画面は Web の対応ページ(
apps/web/src/pages/**)とドメインロジック(ステータス値・ラベル)を揃える。ステータスの正準値はapps/web/src/lib/constants/packages/shared。