Skip to content

アーキテクチャ設計

概要

ぷよぷよゲームシステムのアーキテクチャ設計について説明します。CLAUDE.local.mdの指針に基づき、ヘキサゴナルアーキテクチャ(ポートとアダプター)パターンを採用し、中核の業務領域として位置づけ、ドメインモデルを使用します。

アーキテクチャ選定理由

uml diagram

選定理由:

  • ぷよぷよゲームは複雑なゲームロジック(連鎖、消去判定)を持つため中核の業務領域
  • 金額を扱わないためドメインモデルパターンが適切
  • ローカルストレージのみの永続化のためポートとアダプター(ヘキサゴナルアーキテクチャ)を採用

アーキテクチャ全体図

uml diagram

レイヤー詳細

ドメイン層 (Domain Layer)

責務:

  • ゲームの核となるビジネスロジックを実装
  • ドメイン固有のルールと制約を管理
  • 外部の技術的詳細から独立

主要コンポーネント:

uml diagram

アプリケーション層 (Application Layer)

責務:

  • ユースケースの実行を調整
  • ドメインオブジェクト間の連携を管理
  • 外部システムとの統合を仲介

主要サービス:

uml diagram

プレゼンテーション層 (Presentation Layer)

責務:

  • ユーザーインターフェースの描画
  • ユーザー入力の受付と変換
  • ゲーム状態の表示

主要コンポーネント:

uml diagram

インフラストラクチャ層 (Infrastructure Layer)

責務:

  • 技術的な詳細の実装
  • 外部システムとの具体的な通信
  • フレームワーク・ライブラリとの統合

主要アダプター:

uml diagram

依存性の流れ

uml diagram

依存性のルール:

  1. 内側の層は外側の層に依存しない
  2. 外側の層は内側の層に依存する
  3. ポート(インターフェース)により依存性を逆転
  4. ドメイン層は完全に独立

テスト戦略とアーキテクチャ

ピラミッド形のテスト戦略を採用します:

uml diagram

パフォーマンス考慮事項

レンダリング最適化

uml diagram

メモリ管理

  • オブジェクトプール:
  • ぷよオブジェクトの再利用
  • アニメーション効果の再利用

  • イベント処理の最適化:

  • RAF (RequestAnimationFrame) の適切な利用
  • 不要なイベントリスナーのクリーンアップ

拡張可能性

新機能追加時の影響範囲

uml diagram

技術的制約と前提

ブラウザ環境での制約

  • Canvas API: ゲーム描画のメイン手段
  • Web Audio API: 音響効果の実装
  • LocalStorage: データ永続化
  • RequestAnimationFrame: アニメーション制御

パフォーマンス目標

  • 60FPS: スムーズなゲーム体験
  • 初回ロード時間: 5秒以内
  • メモリ使用量: 100MB以下
  • 入力遅延: 16ms以内

セキュリティ考慮事項

データ保護

  • ハイスコア改ざん防止: クライアントサイド検証
  • 不正入力防止: 入力値のサニタイジング
  • XSS対策: HTMLエスケープ処理

プライバシー保護

  • 個人情報なし: ローカルストレージのみ使用
  • トラッキングなし: 外部送信データなし

実装状況

Phase 4完了: AI機能統合とアーキテクチャ拡張

実装済みポート(インターフェース)

  • GamePort: ゲーム状態管理の抽象化
  • StoragePort: データ永続化の抽象化
  • TimerPort: タイマー機能の抽象化
  • InputPort: 入力処理の抽象化
  • AIPort: AI判断機能の抽象化
  • StrategyPort: AI戦略管理の抽象化
  • PerformancePort: パフォーマンス分析の抽象化

実装済みアダプター(具体実装)

  • LocalStorageAdapter: ブラウザのlocalStorage実装
  • BrowserTimerAdapter: ブラウザの setTimeout/setInterval 実装
  • StrategyAdapter: 戦略データ永続化実装
  • PerformanceAdapter: パフォーマンスメトリクス管理実装

実装済みアプリケーションサービス

  • GameApplicationService: ゲームビジネスロジックの調整
  • InputApplicationService: 入力処理とアクション変換
  • MLAIService: TensorFlow.jsベースのAI判断サービス
  • StrategyService: AI戦略管理サービス
  • PerformanceAnalysisService: パフォーマンス分析サービス

拡充されたドメインサービス

  • ChainDetectionService: 連鎖検出・スコア計算
  • CollisionService: 衝突判定・境界チェック
  • PuyoSpawningService: バランスを考慮したぷよ生成
  • ImmutableEliminationService: 関数型パラダイムでの消去処理

ドメインモデルの拡張

  • StrategyValueObject: AI戦略設定値オブジェクト
  • PerformanceMetrics: パフォーマンスメトリクスモデル
  • ChartData: データ可視化用モデル

依存性注入の実装

  • DefaultContainer: 依存関係の管理と注入
  • 各層間の疎結合を実現
  • AI機能の動的切り替え対応

🏗️ アーキテクチャの改善効果

uml diagram

📊 品質指標の改善

観点 Phase 1 Phase 4 改善度
結合度 低(疎結合) 最小(ポート完全分離) ⬆️ さらに改善
凝集度 高(責務分離) 最高(機能別モジュール化) ⬆️ さらに改善
テスタビリティ 容易 最適(モック戦略確立) ⬆️ 大幅改善
拡張性 柔軟 最大(プラグイン対応) ⬆️ 大幅改善
保守性 容易 最適(自動化完備) ⬆️ 大幅改善
テストカバレッジ 63.91% 80.57% ⬆️ 大幅改善
型安全性 100% ⬆️ 完全達成

まとめ

このアーキテクチャリファクタリングにより以下を実現:

  1. 真のヘキサゴナルアーキテクチャ: ポート・アダプターパターンの完全実装
  2. SOLID原則の適用: 依存性逆転・単一責任・開放閉鎖原則の徹底
  3. ドメイン駆動設計の実践: ドメインサービスの分離とビジネスロジックの純化
  4. 依存性注入の導入: 疎結合とテスタビリティの大幅改善
  5. 責務の明確化: 各層の役割と境界を明確に定義