atelier-kyo-manager アーキテクチャ

最終更新: 2026-04-20 関連: 経営者判断 — 既存実装の再利用ルール・利益計算コアの変更禁止事項 状態: Phase 1 完了・Phase 2 計画中


1. システム概要

atelier-kyo-managerは、BUYMAでのファッションレセラー業務を包括的に支援するWebアプリケーション。商品リサーチから利益計算、画像処理、出品テキスト生成、注文管理まで、一連のパイプラインを自動化・効率化する。

技術スタック

レイヤー 技術 状態
バックエンド Python 3.11+ / Flask 実装済み
DB / ORM SQLAlchemy + Alembic (SQLite) 実装済み
認証 Flask-Login 実装済み
フロントエンド Flask Templates (Jinja2) + Tailwind CSS 実装済み
AI / LLM Gemini / DeepSeek / OpenAI (ルーティング) 実装済み
画像処理 rembg (背景除去) + Selenium (画像収集) 実装済み
スクレイピング Bright Data + Selenium 実装済み
テスト pytest (231テスト / 36ファイル) 実装済み

2. アプリケーション起動構造

Flask Factory Pattern

# app/__init__.py
def create_app(config_name='default'):
    app = Flask(__name__)
    app.config.from_object(get_config(config_name))

    # 拡張初期化
    db.init_app(app)
    login_manager.init_app(app)

    # Blueprint登録
    register_blueprints(app)

    return app
  • create_app() によるFactory Patternを採用
  • テスト・開発・本番で設定を切り替え可能
  • 全ての拡張は app/extensions.py で一元管理

拡張モジュール

# app/extensions.py
from flask_sqlalchemy import SQLAlchemy
from flask_login import LoginManager

db = SQLAlchemy()
login_manager = LoginManager()

3. ディレクトリ構造

atelier-kyo-manager/
├── app/
│   ├── __init__.py              # Flask Factory (create_app)
│   ├── auth.py                  # Flask-Login認証ロジック
│   ├── decorators.py            # login_required等デコレータ
│   ├── extensions.py            # db, login_manager拡張
│   ├── forms.py                 # WTFormsフォーム定義
│   │
│   ├── config/                  # 設定モジュール
│   │   ├── config.py            # Config クラス (Dev/Test/Prod)
│   │   ├── config_loader.py     # 設定読み込みユーティリティ
│   │   ├── generate_secrets.py  # 秘密鍵生成スクリプト
│   │   ├── loader.py            # YAML設定ファイル読み込み
│   │   ├── paths.py             # パス管理
│   │   ├── protocols.py         # インターフェース定義
│   │   ├── sites/               # サイト別設定JSON (Moncler, Gucci等)
│   │   └── integrations/        # 外部サービス連携設定
│   │
│   ├── models/                  # データモデル (11テーブル)
│   │   ├── product.py           # 商品マスタ (pipeline_status含む)
│   │   ├── order.py             # 注文管理 (18日ルール、利益計算)
│   │   ├── partner.py           # 仕入れ先パートナー
│   │   ├── user.py              # ユーザー認証 (Flask-Login)
│   │   ├── listing_template.py  # 出品テンプレート
│   │   ├── listing_progress.py  # 出品進捗トラッキング
│   │   ├── stock_check.py       # 価格・在庫チェック
│   │   ├── popularity_tracker.py # 人気度スコア
│   │   ├── region_recommendation.py # 仕入れ地域推奨
│   │   ├── repeat_customer.py   # リピート顧客管理
│   │   ├── prohibited_source.py # 禁止仕入れ先
│   │   └── result_models.py     # 結果・集計モデル
│   │
│   ├── routes/                  # ルート (Blueprint) 6モジュール
│   │   ├── products.py          # 商品CRUD + パイプライン + 出品候補
│   │   ├── orders.py            # 注文管理 (18日ルール、利益計算)
│   │   ├── partners.py          # パートナー管理
│   │   ├── analytics.py         # 売上分析
│   │   ├── warehouse_webhook.py # 転送倉庫Webhook (FR-012基盤)
│   │   └── misc.py              # その他ユーティリティルート
│   │
│   ├── services/                # ビジネスロジック 5サービス
│   │   ├── image_service.py     # 画像DL + 背景除去 (FR-002)
│   │   ├── pipeline_service.py  # パイプライン統合管理 (FR-002/003)
│   │   ├── template_service.py  # 出品テキスト生成 (FR-003)
│   │   ├── price_scraper.py     # 価格スクレイピング (Bright Data)
│   │   └── warehouse_event_service.py # 倉庫イベント処理
│   │
│   ├── core/pricing/            # 価格計算エンジン
│   │   ├── calculator.py        # 実ベース利益計算 (FR-005)
│   │   ├── rules.py             # 計算ルール定義
│   │   └── schemas.py           # データスキーマ
│   │
│   ├── agents/                  # AIエージェント群
│   │   ├── browser/             # ブラウザ操作モジュール
│   │   ├── plugins/             # サイト別プラグイン
│   │   │   ├── moncler_plp_v1.py
│   │   │   ├── gucci_plp_v1.py
│   │   │   ├── prada_plp_v1.py
│   │   │   ├── farfetch_plp_v1.py
│   │   │   └── ssense_plp_v1.py
│   │   ├── ai_vision_agent.py
│   │   ├── self_healing_agent.py
│   │   ├── price_intelligence_agent.py
│   │   └── (他多数)
│   │
│   ├── utils/                   # ユーティリティ
│   │   ├── ai_llm_controller.py # LLMルーティング (Gemini/DeepSeek/OpenAI)
│   │   ├── ai_image_crawler.py  # Selenium画像収集
│   │   ├── ai_background_remover.py # rembg背景除去
│   │   ├── ai_generate_descriptions.py # AI説明文生成
│   │   ├── csv_handler.py       # CSV出力
│   │   ├── fx_utils.py          # 為替レート取得
│   │   └── (他多数)
│   │
│   └── templates/               # 26 HTMLテンプレート
│       ├── auth/login.html
│       ├── pipeline_result.html
│       ├── listing_candidates.html
│       ├── orders.html
│       └── (他計26ファイル)
│
├── tests/                       # 36テストファイル / 231テスト
├── migrations/                  # Alembicマイグレーション
├── docs/                        # プロジェクトドキュメント (5ファイル)
├── seed_data.py                 # テストデータ投入(冪等性保証)
└── instance/                    # SQLite DB

4. データモデル(11テーブル)

ER図(概要)

User ──────────────────────────── 認証・認可

Product ──── Order ──── Partner   商品・注文・仕入れ先の核
  │            │
  ├─ ListingTemplate             出品テンプレート
  ├─ ListingProgress             出品進捗
  ├─ StockCheck                  価格・在庫チェック
  ├─ PopularityTracker           人気度スコア

RegionRecommendation             仕入れ地域推奨
RepeatCustomer                   リピート顧客管理
ProhibitedSource                 禁止仕入れ先
ResultModels                     結果・集計データ

Product(商品マスタ)

フィールド 説明
id Integer (PK) 商品ID
name String 商品名
brand String ブランド名
purchase_price Float 仕入れ原価
selling_price Float 販売価格
pipeline_status String pending/running/success/partial/failed
stock_status Boolean 在庫有無
listing_status String listed/draft/sold/archived
source_type String overseas/domestic
source_region String 仕入れ地域 (FR/IT/US等)
item_category String bag/jacket/shoes/tops等

Order(注文管理)

フィールド 説明
id Integer (PK) 注文ID
product_id Integer (FK) 商品ID
partner_id Integer (FK) パートナーID
order_date DateTime 注文日
status String pending/shipped/completed/cancelled
selling_price Float 販売価格
purchase_cost Float 仕入れ原価
customs_duty Float 関税
profit Float 利益(自動計算)

その他モデル

モデル 役割
Partner 仕入れ先パートナー管理
User Flask-Login認証ユーザー
ListingTemplate Jinja2風出品テンプレート
ListingProgress 日次出品数トラッキング
StockCheck 価格・在庫変動チェック
PopularityTracker 閲覧数・お気に入り・問合せ数
RegionRecommendation 仕入れ地域別利益率・信頼性
RepeatCustomer リピート顧客セグメント管理
ProhibitedSource BUYMA禁止仕入れ先

5. レイヤー構造

[Browser]
    │
    ▼
[Flask Routes (Blueprint)]  ← app/routes/*.py
    │
    ├── 認証チェック (app/auth.py, app/decorators.py)
    ├── フォームバリデーション (app/forms.py)
    │
    ▼
[Services]  ← app/services/*.py
    │
    ├── ImageService     → 画像DL + 背景除去
    ├── PipelineService  → パイプライン統合管理
    ├── TemplateService  → 出品テキスト生成
    ├── PriceScraper     → 価格スクレイピング
    └── WarehouseEventService → 倉庫イベント処理
    │
    ▼
[Core]  ← app/core/pricing/
    │
    └── PricingCalculator → 実ベース利益計算
    │
    ▼
[Agents]  ← app/agents/
    │
    ├── Browser Plugins  → 5サイト別スクレイパー
    ├── Self-Healing     → エラー自動修復
    └── Price Intelligence → 価格分析
    │
    ▼
[Utils]  ← app/utils/
    │
    ├── ai_llm_controller.py → LLM APIルーティング
    ├── ai_image_crawler.py  → Selenium画像収集
    └── ai_background_remover.py → rembg背景除去
    │
    ▼
[Models (SQLAlchemy)]  ← app/models/*.py (11テーブル)
    │
    ▼
[SQLite / Alembic Migrations]

6. 外部サービス連携

サービス 用途 実装場所 状態
LLM API (Gemini/DeepSeek/OpenAI) 説明文生成・画像分析 app/utils/ai_llm_controller.py 実装済み
rembg 背景除去 app/utils/ai_background_remover.py 実装済み
Selenium 画像収集・ブラウザ自動化 app/utils/ai_image_crawler.py 実装済み
Bright Data BUYMA価格スクレイピング app/services/price_scraper.py 実装済み
Buyandship 転送倉庫Webhook app/routes/warehouse_webhook.py 基盤のみ
Slack 発注・発送通知 未実装 Issue #18

ブラウザ自動化プラグイン

サイト プラグイン 状態
Moncler plugins/moncler_plp_v1.py 実装済み
Gucci plugins/gucci_plp_v1.py 実装済み
Prada plugins/prada_plp_v1.py 実装済み
Farfetch plugins/farfetch_plp_v1.py 実装済み
SSENSE plugins/ssense_plp_v1.py 実装済み

7. 認証・認可

Flask-Login + User modelによる認証基盤を実装済み。

  • app/auth.py: ログイン/ログアウトロジック
  • app/models/user.py: UserMixin継承、パスワードハッシュ化
  • app/decorators.py: login_requiredデコレータ

8. 設定管理

app/config/ モジュールで一元管理:

  • config.py: Config/Development/Testing/Productionクラス
  • sites/: サイト別設定JSON (セレクタ、URL等)
  • integrations/: 外部サービス連携設定

9. SaaS化への考慮

項目 現状 Phase 2計画
認証 Flask-Login実装済み マルチテナント対応
DB SQLite (Alembic対応済み) PostgreSQL移行
テナント分離 なし tenant_idによる論理分離
バックグラウンド処理 同期のみ Celery + Redis (Issue #15)
コンテナ化 なし Docker (Issue #21)

This site uses Just the Docs, a documentation theme for Jekyll.