atlas.yaml
# =============================================================================
# ATLAS Configuration File
# =============================================================================
# このファイルはプロジェクトの技術選定を記録し、
# 開発チームとClaude Codeが参照するための設定ファイルです。
#
# 配置場所: プロジェクトルート または .atlas/atlas.yaml
# =============================================================================

# ATLAS Framework Version
atlas_version: "1.0"

# -----------------------------------------------------------------------------
# Project Identity
# -----------------------------------------------------------------------------
project:
  name: "ECサイトリニューアル"
  description: "既存ECサイトのNext.js移行プロジェクト"
  created_at: "2025-01-29"
  updated_at: "2025-01-29"
  owner: "[email protected]"

# -----------------------------------------------------------------------------
# Project Classification
# -----------------------------------------------------------------------------
classification:
  # アーキタイプ(Part 1参照)
  # A1_STATIC_PRESENCE | A2_CAMPAIGN | A3_CONSUMER_APP |
  # A4_BUSINESS_SAAS | A5_MARKETPLACE | A6_REALTIME | A7_AI_COMPUTE
  primary_archetype: A5_MARKETPLACE

  # 複合アーキタイプがある場合
  secondary_archetypes:
    - A3_CONSUMER_APP # 一般消費者向けUI

  # スケールTier(Part 5参照)
  # T1_MVP | T2_STARTUP | T3_GROWTH | T4_ENTERPRISE
  tier: T3_GROWTH

  # Tier判定の根拠
  tier_rationale:
    monthly_budget_usd: 2000
    team_size: 8
    devops_capability: intermediate # none | basic | intermediate | advanced

# -----------------------------------------------------------------------------
# Requirements(要件定義)
# -----------------------------------------------------------------------------
requirements:
  # トラフィック・スケール
  scale:
    expected_mau: 50000
    peak_concurrent_users: 5000
    monthly_bandwidth_gb: 800

  # 機能要件
  features:
    realtime: false # WebSocket/SSE必要か
    background_processing: heavy # none | light | medium | heavy
    file_upload: true # ファイルアップロード機能
    file_upload_max_size_mb: 50 # 最大ファイルサイズ
    payment: true # 決済機能
    payment_regions: # 決済対象地域
      - JP
      - US
    multi_tenant: false # マルチテナント

  # 非機能要件
  non_functional:
    availability_sla: "99.9%"
    response_time_p95_ms: 500
    data_retention_days: 2555 # 約7年

  # セキュリティ・コンプライアンス
  compliance:
    required:
      - HTTPS
      - RATE_LIMITING
      - WAF
    optional:
      - SOC2
    regulations:
      - 個人情報保護法
      - 特定商取引法

# -----------------------------------------------------------------------------
# Technology Stack(選定結果)
# -----------------------------------------------------------------------------
stack:
  # Compute Layer
  compute:
    category: CONTAINER_PAAS # 技術カテゴリ
    selected: railway # 選定技術
    rationale: "WebSocket不要だがWorker常駐が必要。コスト予測性重視。"
    alternatives_considered:
      - name: vercel
        rejected_reason: "バックグラウンド処理の制約"
      - name: aws_sst
        rejected_reason: "現時点ではオーバースペック"

  # Database Layer
  database:
    primary:
      category: SERVERLESS_POSTGRES
      selected: neon
      rationale: "ブランチング機能で開発効率化。スケール対応。"
      connection_pooler: true # コネクションプーラー使用
    cache:
      category: REDIS
      selected: upstash_redis
      rationale: "セッション、カート情報のキャッシュ"
    search:
      category: SEARCH_ENGINE
      selected: meilisearch # 商品検索用
      rationale: "日本語対応、セルフホスト可能"

  # Authentication Layer
  auth:
    category: DX_FIRST_AUTH
    selected: clerk
    rationale: "実装速度重視。MAU 50Kまでは許容コスト。"
    features_used:
      - email_password
      - social_login
      - session_management
    sso_required: false

  # Background Processing Layer
  worker:
    category: DURABLE_WORKFLOW
    selected: trigger_dev
    rationale: "60秒超の処理あり(画像処理、レポート生成)"
    job_types:
      - name: image_processing
        timeout_seconds: 300
        priority: high
      - name: daily_report
        timeout_seconds: 1800
        priority: low
        schedule: "0 3 * * *" # 毎日3時
      - name: order_notification
        timeout_seconds: 30
        priority: critical

  # Payment Layer
  payment:
    category: PAYMENT_PROCESSOR
    selected: stripe
    rationale: "国内中心、税務体制あり。手数料最適化。"
    features_used:
      - checkout
      - subscriptions
      - invoicing

  # Storage Layer
  storage:
    category: OBJECT_STORAGE
    selected: cloudflare_r2
    rationale: "帯域無料。商品画像・ユーザーアップロード用。"

  # CDN Layer
  cdn:
    category: EDGE_CDN
    selected: cloudflare
    rationale: "R2との統合。WAF機能。"

  # Monitoring Layer
  monitoring:
    apm:
      selected: sentry
      rationale: "エラートラッキング、パフォーマンス監視"
    logs:
      selected: axiom
      rationale: "コスト効率、構造化ログ対応"
    uptime:
      selected: betterstack
      rationale: "アラート、ステータスページ"

# -----------------------------------------------------------------------------
# Anti-Pattern Checks(アンチパターンチェック結果)
# -----------------------------------------------------------------------------
antipattern_checks:
  # 各アンチパターンIDと対応状況
  - id: AP-C1
    name: "Serverless + 常駐Worker"
    status: NOT_APPLICABLE # PASSED | FAILED | MITIGATED | NOT_APPLICABLE
    note: "Container PaaS選択により該当なし"

  - id: AP-C2
    name: "Serverless + 長時間処理"
    status: MITIGATED
    note: "Trigger.devで外部化"

  - id: AP-D1
    name: "Serverless + 標準DB接続"
    status: PASSED
    note: "Neonのコネクションプーラー使用"

  - id: AP-S1
    name: "公開API + レート制限なし"
    status: PASSED
    note: "Cloudflare WAF + API Rate Limiting設定済み"

  - id: AP-S2
    name: "直接ファイルアップロード"
    status: MITIGATED
    note: "R2 Presigned URL使用"

  - id: AP-$1
    name: "従量課金 + 上限なし"
    status: PASSED
    note: "Railway固定プラン、Neon Spend Limit設定"

# -----------------------------------------------------------------------------
# Exit Strategy(移行戦略)
# -----------------------------------------------------------------------------
exit_strategy:
  next_tier: T4_ENTERPRISE

  migration_triggers:
    - condition: "MAU > 100,000"
      action: "Auth0移行検討"
    - condition: "月額コスト > $5,000"
      action: "AWS (SST)移行検討"
    - condition: "SOC2認証必要"
      action: "インフラ全体見直し"

  lock_in_assessment:
    - component: clerk
      risk: medium
      mitigation: "NextAuth.jsへの移行パス確保"
    - component: neon
      risk: low
      mitigation: "標準PostgreSQL互換"
    - component: trigger_dev
      risk: medium
      mitigation: "Temporal移行可能な設計"

  migration_readiness:
    dockerfile_exists: true
    iac_implemented: false # Terraform/SST等
    ci_cd_platform_agnostic: true

# -----------------------------------------------------------------------------
# Review Schedule(再評価スケジュール)
# -----------------------------------------------------------------------------
review:
  next_review_date: "2025-07-01"
  review_triggers:
    - "月額コストが$3,000超過"
    - "レスポンスP95が1秒超過"
    - "チーム規模が15人超過"
    - "SOC2認証要件発生"

  history:
    - date: "2025-01-29"
      changes: "初期選定"
      reviewer: "[email protected]"

# -----------------------------------------------------------------------------
# Claude Code Instructions(AI向け指示)
# -----------------------------------------------------------------------------
claude_instructions:
  # 実装時に参照すべき注意点
  implementation_notes:
    - "Neon接続時は必ずコネクションプーラーURL使用"
    - "ファイルアップロードはPresigned URL経由"
    - "60秒超の処理はTrigger.devにオフロード"
    - "環境変数はVercel/Railway形式で統一"

  # 禁止事項
  prohibited:
    - "BullMQ/Redis Workerの直接実装"
    - "API Routeでの長時間処理"
    - "クライアントへのシークレット露出"

  # 推奨パターン
  recommended_patterns:
    - "Server Actionsでのデータ変更"
    - "Suspenseによる段階的表示"
    - "エラーバウンダリの適切な配置"