Skip to content

ADR-001: アーキテクチャ選定

ステータス

採用

背景

ぷよぷよゲームシステムの開発において、アプリケーションのアーキテクチャパターンを決定する必要がある。要件分析の結果、複雑なゲームロジック(連鎖、消去判定、重力適用)を持つシステムであり、将来的な機能拡張(マルチプレイヤー、AI対戦等)も想定される。

検討事項

アーキテクチャ選定基準

CLAUDE.local.mdのアーキテクチャ選定フローに基づく:

  1. 業務領域カテゴリー: 中核の業務領域(複雑なゲームロジック)
  2. 金額・分析・監査記録: 不要(ゲームのため)
  3. 永続化モデル: 単一(ローカルストレージのみ)

候補アーキテクチャ

1. レイヤードアーキテクチャ (3層)

  • メリット: 理解しやすい、実装が簡単
  • デメリット: ビジネスロジックとデータアクセスの結合、テスタビリティの低さ
  • 適用: 単純なCRUDアプリケーション

2. ヘキサゴナルアーキテクチャ(ポートとアダプター)

  • メリット: ドメインロジックの独立性、高いテスタビリティ、依存性逆転
  • デメリット: 初期実装の複雑さ、学習コスト
  • 適用: 複雑なビジネスロジック、外部システム統合

3. クリーンアーキテクチャ

  • メリット: 層の明確な分離、高い保守性
  • デメリット: 過度な抽象化、小規模プロジェクトには重い
  • 適用: 大規模・長期プロジェクト

決定

ヘキサゴナルアーキテクチャ(ポートとアダプター)を採用する

理由

  1. ドメインロジックの複雑さ:
  2. ぷよの連鎖検出・消去ロジック
  3. 重力計算・衝突判定
  4. スコア計算・ボーナス適用

  5. テスタビリティの重要性:

  6. TDD開発サイクルの採用
  7. ドメインロジックの単体テスト
  8. 外部依存からの分離

  9. 将来拡張への対応:

  10. 新しい入力デバイス対応(タッチ、ゲームパッド)
  11. 永続化方式の変更(クラウド保存)
  12. 新機能追加(AI、ネットワーク対戦)

  13. 適切なスケール:

  14. 中規模プロジェクトに適合
  15. 過度な抽象化を避けつつ、柔軟性を確保

アーキテクチャ構造

┌─────────────────┐    ┌─────────────────┐
│  Presentation   │    │ Infrastructure  │
│     Layer       │    │     Layer       │
│                 │    │                 │
│ - GameComponent │    │ - LocalStorage  │
│ - InputHandler  │    │ - AnimationAPI  │
│ - BoardRenderer │    │ - SoundAPI      │
└─────────┬───────┘    └─────────┬───────┘
          │                      │
          ▼                      ▼
┌─────────────────┐    ┌─────────────────┐
│  Application    │    │     Ports       │
│     Layer       │    │  (Interfaces)   │
│                 │    │                 │
│ - GameService   │◄──►│ - GamePort      │
│ - ScoreService  │    │ - StoragePort   │
│ - InputService  │    │ - SoundPort     │
└─────────┬───────┘    └─────────────────┘
          │
          ▼
┌─────────────────┐
│    Domain       │
│     Layer       │
│                 │
│ - Game          │
│ - Field         │
│ - Puyo          │
│ - Chain         │
│ - Score         │
└─────────────────┘

結果

  1. ドメイン層の独立性: 外部技術に依存しない純粋なビジネスロジック
  2. 高いテスタビリティ: モックを使用した効率的な単体テスト
  3. 柔軟な技術選択: アダプターパターンによる技術変更への対応
  4. 明確な責任分離: 各層の役割が明確で保守しやすい

注意点

  1. 初期実装コスト: 単純なレイヤードアーキテクチャより実装が複雑
  2. チーム学習: ヘキサゴナルアーキテクチャの理解が必要
  3. 過度な抽象化回避: 必要以上にポートを作らない

関連ADR

  • ADR-002: フロントエンド技術スタック選定
  • ADR-003: 状態管理戦略
  • ADR-004: テスト戦略

日付: 2025-08-12
作成者: Claude Code
レビュー者: プロジェクトチーム
次回見直し: 2025-11-12(3ヶ月後)