# 基本設計書(HLD) | 項目 | 内容 | |------|------| | 文書番号 | HLD-ECOM-001 | | バージョン | 1.0 | | 作成日 | 2025年12月1日 | | ステータス | 承認済み | | 作成者 | 鈴木 一郎(技術部長) | --- ## 1. アーキテクチャ概要 ECサイトプラットフォームは3つの独立デプロイ可能なマイクロサービスで構成され、各サービスが独自のデータベースを保有する(Database-per-Serviceパターン)。 ```mermaid graph TB FE[フロントエンド管理画面
:5173] --> OS[注文サービス
:8000] FE --> PS[決済サービス
:8001] FE --> NS[通知サービス
:8002] OS --> OS_DB[(注文DB
SQLite)] PS --> PS_DB[(決済DB
SQLite)] NS --> NS_DB[(通知DB
SQLite)] OS -->|POST /api/v1/payments| PS OS -->|POST /api/v1/notifications/email| NS PS -->|POST /api/v1/orders/{id}/webhook| OS ``` --- ## 2. サービス一覧 | サービス | ポート | 技術スタック | データベース | 責務 | |---------|--------|------------|------------|------| | 注文サービス | 8000 | Python 3.12, FastAPI, SQLAlchemy async | SQLite | 注文CRUD、ステータス管理、オーケストレーション | | 決済サービス | 8001 | Python 3.12, FastAPI, SQLAlchemy async | SQLite | 決済処理、返金、金額バリデーション | | 通知サービス | 8002 | Python 3.12, FastAPI, SQLAlchemy async | SQLite | メール/SMS通知、テンプレート管理 | | フロントエンド管理画面 | 5173 | React 19, TypeScript, Vite, Tailwind CSS | なし(ステートレスSPA) | Web管理UI、ダッシュボード、注文管理 | --- ## 3. 通信パターン サービス間通信は全て**同期REST over HTTP**。メッセージブローカー、イベントバス、非同期通信チャネルは存在しない。 | パターン | 用途 | タイムアウト | |---------|------|------------| | 同期REST | 全サービス間呼出し | 30秒(決済)、10秒(通知/Webhook) | | Webhook(RESTコールバック) | 決済→注文ステータス更新 | 10秒 | --- ## 4. サービス依存関係マトリクス | 呼出元 | 呼出先 | エンドポイント | メソッド | パターン | 目的 | |--------|--------|--------------|---------|---------|------| | 注文サービス | 決済サービス | /api/v1/payments | POST | 同期REST | 注文作成時の決済処理 | | 注文サービス | 決済サービス | /api/v1/payments/refund | POST | 同期REST | キャンセル時の返金 | | 注文サービス | 決済サービス | /api/v1/payments/order/{order_id} | GET | 同期REST | 返金用の決済情報取得 | | 注文サービス | 通知サービス | /api/v1/notifications/email | POST | 同期REST | 確認/発送/キャンセルメール | | 決済サービス | 注文サービス | /api/v1/orders/{order_id}/webhook | POST | Webhook | 決済ステータス通知 | | フロントエンド | 注文サービス | /api/v1/orders | GET/POST/DELETE | 同期REST | 注文管理UI | | フロントエンド | 決済サービス | /api/v1/payments/order/{order_id} | GET | 同期REST | 決済詳細表示 | | フロントエンド | 通知サービス | /api/v1/notifications/order/{order_id} | GET | 同期REST | 通知ログ表示 | --- ## 5. データフロー図 ### 5.1 注文作成フロー ```mermaid sequenceDiagram participant C as クライアント participant OS as 注文サービス participant PS as 決済サービス participant NS as 通知サービス C->>OS: POST /api/v1/orders Note over OS: 注文データ検証(1件のみ) Note over OS: 合計金額計算 Note over OS: 注文保存(ステータス: 保留中) OS->>OS: ステータス→決済処理中 OS->>PS: POST /api/v1/payments Note over PS: 金額検証(100〜100万円) Note over PS: 重複チェック Note over PS: 決済処理実行 PS-->>OS: 201 Created OS->>OS: ステータス→決済済み OS->>NS: POST /api/v1/notifications/email Note over NS: ORDER_CONFIRMATIONテンプレート描画 Note over NS: メール送信 NS-->>OS: 201 Created OS-->>C: 201 Created(注文詳細) ``` > **注意:** このフローは**1件の注文**を処理する。各ステップはシーケンシャル実行 — 決済完了後に通知を送信。並列処理・バッチ処理の機能はない。 ### 5.2 注文キャンセルフロー ```mermaid sequenceDiagram participant C as クライアント participant OS as 注文サービス participant PS as 決済サービス participant NS as 通知サービス C->>OS: DELETE /api/v1/orders/{id} Note over OS: ステータス→キャンセル済み OS->>PS: GET /api/v1/payments/order/{order_id} PS-->>OS: 決済情報 OS->>PS: POST /api/v1/payments/refund PS-->>OS: 201 返金完了 OS->>NS: POST /api/v1/notifications/email Note over NS: ORDER_CANCELLEDテンプレート NS-->>OS: 201 Created OS-->>C: 200 OK ``` --- ## 6. データアーキテクチャ 各サービスが独自のデータベースを排他的に所有。**サービス間の外部キーなし**、**共有データベースなし**。 | サービス | DBファイル | テーブル | |---------|----------|---------| | 注文サービス | order_service.db | orders, order_items | | 決済サービス | payment_service.db | payments, refunds | | 通知サービス | notification_service.db | notification_templates, notifications | --- ## 7. 既知の制限事項と影響範囲 ### 7.1 単一注文処理のみ 全サービス間通信は**1件の注文**を処理する設計。APIコントラクト、DBスキーマ、ビジネスロジックの全てが1件ずつの処理を前提としている。 ### 7.2 一括操作追加時の影響 一括注文インポート(CSV、100〜10,000件)の追加には、**全3サービス**の変更が必要: | サービス | 必要な変更 | 複雑度 | |---------|----------|--------| | 注文サービス | 一括作成エンドポイント新設、CSVパーサー、バッチ処理ロジック、進捗追跡、ordersテーブルにbatch_idカラム追加 | 高 | | 決済サービス | バッチ決済API新設、集約金額計算、取引上限(100万円)の見直し、バッチ決済グループ化 | 高 | | 通知サービス | 一括通知API新設、レート制限再設計(現在: 10件/秒)、キューベース非同期送信、バッチテンプレート描画 | 中 | | データベース(全サービス) | スキーマ移行: batch_idカラム追加、インポート履歴テーブル新設 | 高 | ### 7.3 具体的なボトルネック 1. **決済金額上限:** 1回の取引あたり最大100万円。集約バッチ決済は存在しない。 2. **通知レート制限:** 10件/秒。10,000件のインポートでは通知だけで最低1,000秒(約17分)。 3. **シーケンシャル処理:** 現在の注文作成フローは逐次実行。並列・キューベース処理が必要。 4. **バッチエラーハンドリングなし:** バッチ内の1件が失敗した場合、残りの処理を継続する仕組みがない。