システム全体像(5分で読む)¶
この 1 枚で Greco の輪郭が分かることを目的にしています。詳細へは末尾の分岐から進んでください。
- 一次情報は実コードです(
supabase/migrations/**/apps/**/packages/**)。 - 機械向けの不変条件は
AGENTS.md(リポジトリルート)が正典です。本ページは人間向けの地図です。
1. 何をするシステムか¶
産業廃棄物マニフェスト管理の B2B SaaS です。処理業者(collector) の日次業務(配車 → 運搬 → 計量 → マニフェスト → 請求の手前まで)をデジタル化し、排出事業者(discharger) には自社の 回収状況を見せます。想定規模は約 100 社。
現在の本番稼働テナントは 共栄紙業(collector) と 西宮市(discharger) です。
2. 3 つのチャネル¶
| 誰が | どこで | 実体 |
|---|---|---|
| 事務(admin / normal) | PC ブラウザ | apps/web(Vite + React + Tailwind + shadcn/ui) |
| ドライバー | スマホの PWA(ホーム画面に追加) | 同じ apps/web。/driver/** のルート群 |
| 排出事業者 | PC ブラウザ | 同じ apps/web。/discharger/** |
Expo(
apps/mobile)は運用していません。 ドライバー向け機能は必ず PWA 側(apps/web)に 載せます。過去の設計文書に Expo 前提の記述が残っていることがあります。
3. データはどこを通るか¶
業務データの経路(ブラウザ → プロキシ → DB)と API の service_role 経路。
押さえるべき 3 点:
- 業務データは基本ブラウザから直接 Supabase を読み書きします。 権限は API ではなく RLS (行レベルセキュリティ)が守ります。
- ブラウザは
*.supabase.coを直接叩きません。 同一オリジンの/supabase/*プロキシを 通します(企業 DLP に遮断された実障害への対応・ADR 0018)。 - API(Workers)は
service_roleを使う= RLS をバイパスします。 そのため API 側の 全クエリはtenant_idを明示フィルタする決まりです。
4. 認可モデル(ここを間違えると事故になる)¶
- テナント種別:
collector/discharger/external_partner(委託先の閲覧専用テナント) - ロール:
admin/normal/driver。加えてcan_drive(事務職も運転を担当する) - 権威は JWT の
app_metadata(tenant_id/tenant_type/role/can_drive)。 DB のprofiles.roleは表示用のコピーで、ずれることがあります。判定には使いません。 - RLS には列マスクがありません。 ある表を「他テナントから読める」ようにすると、その表の 将来の全列を開示することになります。越境閲覧は列を明示列挙した RPC 経由に限ります (mig166)。
- 越境の書込・特権列(role / soft-delete / 監査列)は DEFINER RPC か API 経由に限定し、 client の直接更新はトリガの列 guard で遮断します。
5. 日次業務の流れ(end-to-end)¶
日次業務の流れ(配車 → 回収 → 計量 → JWNET 報告・集計)。
対応する操作手順書は operations-manual/(章番号がこの流れに沿っています)。
6. リリースと環境¶
| 環境 | web | API | DB |
|---|---|---|---|
| dev | CF Pages Preview(develop) | Workers staging | Supabase dev プロジェクト |
| 本番 | CF Pages Production(main) | Workers production | Supabase prod プロジェクト |
- dev と prod は完全に別プロジェクトで、相互配線は禁止です。
- migration は CI が
supabase db pushします(手動 apply は禁止)。prod は厳格な順序なので、 番号の大きい migration を先にマージしてはいけません。 - main へのマージは常に人間ゲート(
human-reviewedラベル)。手順はrunbooks/release.md。
7. どこを読むか(分岐)¶
| 知りたいこと | 行き先 |
|---|---|
| 機能が今どう動くか | features/(機能別の現行仕様。1 機能 1 本) |
| なぜそう決めたか | adr/(決定記録) |
| 画面の操作手順 | operations-manual/(事務・ドライバー向け) |
| 人が実行する手順(リリース・デプロイ・鍵) | runbooks/ |
| 機械が守る不変条件 | AGENTS.md(リポジトリルート) |
| 実装当時の検討過程 | superpowers/specs superpowers/plans(書き捨ての記録。現行仕様ではない) |
層が矛盾したときの優先順位: 実コード >
AGENTS.md>features/>adr/>superpowers/。superpowers/は当時の記録なので、現行と違っていても「間違い」ではありません。