アーキテクチャ図#

概要#

本システムの全体構造、モノレポ内の各パッケージの責務、およびそれらの依存関係を定義する。 本システムはモノレポ構成を採用し、関心の分離(SoC)を徹底する。

レイヤー構造図#

graph TD
    subgraph Apps ["apps/ (アプリケーション層)"]
        Frontend[frontend: React / React Router]
        Backend[backend: Hono / Bun]
    end

    subgraph Packages ["packages/ (共通基盤・ドメイン層)"]
        UI[ui: shadcn/uiベース共通コンポーネント]
        API[api: Orval 生成 Client]
        Domain[domain: ビジネスロジック・Entity/Policy]
        DB[db: Prisma/Repository]
        Infra[infra: Terraform/AWS設定]
        Shared[shared: Logger/Config/TraceID]
    end

    %% 依存関係
    Frontend --> UI
    Frontend --> API
    Frontend --> Shared
    
    Backend --> Domain
    Backend --> DB
    Backend --> Shared
    
    Domain --> DB
    Domain --> Shared
    
    DB --> Shared
    
    API -. "OpenAPIから生成" .-> Backend

各パッケージの責務#

  • apps/frontend: UI/UXの構築。React Routerによるルーティング、TanStack Queryによる状態管理。
  • apps/backend: HonoによるAPIエンドポイント。ミドルウェア(CORS, Logger, TraceID)の適用。
  • packages/domain: ビジネスロジックの中核。Entity, Value Object, Domain Service, およびポリシーの強制。
  • packages/db: データアクセス層。Prisma Clientを用いたデータベース操作、Repositoryパターン。
  • packages/ui: デザインシステムに基づく共通UIコンポーネント群。
  • packages/api: OpenAPI (specs/api) から生成されたフロントエンド用APIクライアント。
  • packages/infra: TerraformによるAWSリソース(S3, CloudFront, Lambda等)のコード化。
  • packages/shared: trace_id (UUID v4)、Pinoによる構造化ロガー、共通設定等の横断的関心事。