コンテンツにスキップ

アーキテクチャ図 (C4 / Structurizr)

Greco のアーキテクチャを C4 モデル で表します。正準の 定義は Structurizr DSL ファイル workspace.dsl にあります。GitHub 上で .md を直接閲覧するときにも概観できるよう、同じ構成を Mermaid で簡略表現した補助図も掲載します。

典拠: apps/web (ADR 0014)、apps/api (ADR 0009)、apps/mobile、 Supabase (ADR 0002 / 0003)、apps/api/src/ocr/extractor.ts (Claude 構造化抽出・ claude-sonnet-5 → 低スコア時 claude-opus-4-8wrangler.toml が正) — manifests.ts (マニフェスト OCR) / vehicle-costs.ts (請求書 OCR) が利用、 scripts/invite-org.mjs (Resend)。


システムコンテキスト (補助図)

全画面で開く

システムコンテキスト(利用者と外部系)。

OCR は Anthropic Claude (structured outputs。claude-sonnet-5 → 低スコア時 claude-opus-4-8wrangler.toml が正) で構造化抽出します。 マニフェスト取込 (manifests.ts) と車両コスト請求書取込 (vehicle-costs.ts) が共有する。


コンテナ図 (補助図)

workspace.dsl の Container ビューと同じ構成です。Web の業務データは ADR 0018 の同一オリジン proxy と API を経由して Supabase へ到達します。特権操作(招待・メンバー管理・OCR)は API の service_role 経路を使い、ブラウザから Supabase へ直接リクエストしません。 Mobile は不使用の歴史的資産で、現行のドライバーチャネルは PWA です。

flowchart LR
    discharger["排出事業者"]
    staff["処理業者スタッフ"]
    driver["ドライバー"]
    operator["運営"]

    subgraph wl["Greco"]
        web["Web SPA<br/>Vite+React / CF Pages"]
        mobile["Mobile<br/>不使用(歴史的資産・ドライバーチャネルは PWA)"]
        api["API<br/>Hono / CF Workers"]
        script["運用スクリプト<br/>invite-org.mjs"]
        auth["Auth<br/>Supabase Auth"]
        db[("Database<br/>Supabase Postgres + RLS")]
    end

    resend["Resend"]
    claude["Anthropic Claude"]

    discharger --> web
    staff --> web
    driver --> web
    driver -.->|歴史的資産(現在は PWA)| mobile
    operator --> script

    web -->|ログイン| auth
    web -->|ADR 0018 同一オリジン proxy| api
    web -->|特権操作| api
    mobile -->|ログイン| auth
    mobile -->|歴史的な直接経路| db
    api -->|JWT/RLS または service_role| db
    api -->|Admin API| auth
    api -->|OCR: 構造化抽出| claude
    script -->|service_role| db
    script -->|招待メール| resend

Structurizr DSL のレンダリング方法

正準の C4 定義は workspace.dsl です。Mermaid 補助図は概観用で、 正確な C4 ビュー (SystemContext / Container) は以下のいずれかでレンダリングします。

# docs/diagrams を /usr/local/structurizr にマウントして起動
docker run -it --rm -p 8080:8080 \
  -v "$(pwd)/docs/diagrams:/usr/local/structurizr" \
  structurizr/lite
# ブラウザで http://localhost:8080 を開く (workspace.dsl を自動読込)
  1. structurizr.com でワークスペースを作成。
  2. workspace.dsl の内容を DSL エディタに貼り付ける。
  3. SystemContext / Container ビューを表示・エクスポート (PNG/SVG/PlantUML 等)。
# 例: PlantUML 形式へエクスポート (別途 PlantUML でレンダリング)
structurizr-cli export -workspace docs/diagrams/workspace.dsl -format plantuml

DSL の検証状況

workspace.dsl の構文は目視で確認しています。本リポジトリの CI には structurizr-cli を組み込んでいないため、自動レンダリング検証は行っていません。 図を更新する場合は上記いずれかの方法でレンダリングし、内容を確認してください。


ビュー一覧

ビュー 種別 内容
SystemContext System Context 4 アクター (排出事業者 / 処理業者スタッフ / ドライバー / 運営) と外部システム (Resend / Anthropic Claude) との関係。Google Cloud Vision は正準 DSL に要素なし。
Containers Container Web SPA / Mobile(不使用・歴史的資産) / API / 運用スクリプト / Database / Auth と、外部システムとの関係。

関連 ADR: 0009 API を Cloudflare Workers (Hono) で構築0002 バックエンドに Supabase を採用0014 フロントエンド技術選定0010 環境分割 (dev / prod)