========================================================================
ソースコードディレクトリ構造 (Source Code Directory Structure)
========================================================================
1. 概要 (Overview)
------------------------------------------------------------------------
本ドキュメントは apps/client/src,apps/server/src,packages/shared/src 配下の
ソースコード構造を定義する.
プロジェクト全体の構成(設定ファイル・インフラ)については ENV_01 を参照すること.
記載粒度: 全フォルダを漏れなく記載する.ファイルはエントリーポイント(index.ts・main.tsx 等)のみ明記する.
フォルダを追加・削除・移動した場合は本ドキュメントを合わせて更新すること.
2. クライアント (apps/client/src)
------------------------------------------------------------------------
2-1. 構成一覧
src/
├── main.tsx # 起動エントリ
├── app.tsx # ルートUI
├── components/ # 共通コンポーネント
├── config/ # クライアント設定
├── hooks/ # グローバルフック
│ ├── application/ # アプリケーション層フック
│ └── types/ # フック型定義
├── network/ # サーバー通信層
│ └── handlers/ # WSハンドラ・イベントブリッジ
├── styles/ # 全体スタイル
└── scenes/ # 画面シーン群
├── game/ # ゲーム画面
│ ├── application/ # ゲームアプリケーション層
│ │ ├── assets/ # ゲームアセット管理
│ │ ├── combat/ # 戦闘処理
│ │ ├── culling/ # 描画カリング
│ │ ├── lifecycle/ # ライフサイクル管理
│ │ ├── loopSteps/ # ゲームループステップ
│ │ ├── network/ # ゲームネットワーク処理
│ │ │ ├── adapters/ # ネットワークアダプタ
│ │ │ ├── handlers/ # ネットワークハンドラ
│ │ │ └── receivers/ # 受信処理
│ │ ├── orchestrators/ # オーケストレータ
│ │ ├── runtime/ # ランタイム管理
│ │ ├── time/ # 時刻・タイマー管理
│ │ └── ui/ # UI制御
│ ├── entities/ # 描画・状態管理エンティティ
│ │ ├── bomb/ # 爆弾エンティティ
│ │ ├── hurricane/ # ハリケーンエンティティ
│ │ ├── map/ # マップエンティティ
│ │ └── player/ # プレイヤーエンティティ
│ ├── hooks/ # ゲーム画面フック
│ ├── input/ # 入力UI群
│ │ ├── bomb/ # 爆弾ボタンUI
│ │ │ ├── hooks/ # 爆弾ボタンフック
│ │ │ └── presentation/ # 爆弾ボタン表示
│ │ ├── hooks/ # 入力共通フック
│ │ ├── joystick/ # ジョイスティックUI
│ │ │ ├── common/ # スティック定数・型
│ │ │ ├── hooks/ # スティック制御フック
│ │ │ ├── model/ # スティックモデル
│ │ │ └── presentation/ # スティック描画
│ │ ├── minimap/ # ミニマップUI
│ │ │ ├── hooks/ # ミニマップフック
│ │ │ └── presentation/ # ミニマップ表示
│ │ └── presentation/ # 入力UI共通表示
│ ├── presentation/ # ゲームHUD
│ └── styles/ # ゲーム画面スタイル
├── lobby/ # ロビー画面
│ ├── components/ # ロビーUIコンポーネント
│ ├── presentation/ # ロビー表示ロジック
│ └── styles/ # ロビースタイル
├── result/ # リザルト画面
│ ├── components/ # リザルトUIコンポーネント
│ ├── hooks/ # リザルト画面フック
│ ├── styles/ # リザルト画面スタイル
│ └── types/ # リザルト画面型定義
├── shared/ # シーン間共通リソース
│ └── styles/ # シーン共通スタイル
└── title/ # タイトル画面
2-2. 設計方針
・scenes/ 配下にシーン単位(title,lobby,game,result)で分割する
・各シーンは MVC ベースの構成とし,entities/ に描画対象を集約する
・network/ 層がサーバーとの通信を担当し,scenes/ 内から直接 protocol を参照しない
3. サーバー (apps/server/src)
------------------------------------------------------------------------
3-1. 構成一覧
src/
├── index.ts # サーバー起点
├── application/ # アプリケーション統合層
│ └── coordinators/ # アプリ統合制御
├── common/ # 共通ユーティリティ
├── config/ # サーバー設定
├── logging/ # ログ出力基盤
│ ├── constants/ # ログ定数
│ └── contracts/ # ログ契約型
├── domains/ # ビジネスロジック層
│ ├── game/ # ゲームドメイン
│ │ ├── application/ # ゲームアプリケーション層
│ │ │ ├── ports/ # ユースケース入出力境界
│ │ │ ├── services/ # ゲームサービス群
│ │ │ │ └── bot/ # Bot AIシステム
│ │ │ │ ├── adapters/ # Botアダプタ
│ │ │ │ ├── combat/ # Bot戦闘行動
│ │ │ │ ├── movement/ # Bot移動処理
│ │ │ │ ├── orchestrators/ # Botオーケストレータ
│ │ │ │ ├── policies/ # Bot行動ポリシー
│ │ │ │ ├── roster/ # Bot管理・編成
│ │ │ │ ├── state/ # Bot状態管理
│ │ │ │ └── types/ # Bot型定義
│ │ │ └── useCases/ # ゲームユースケース
│ │ ├── entities/ # ゲームエンティティ
│ │ │ ├── bomb/ # 爆弾エンティティ
│ │ │ ├── map/ # マップ状態
│ │ │ └── player/ # プレイヤーエンティティ
│ │ └── loop/ # ゲームループ
│ │ └── hurricane/ # ハリケーン詳細処理
│ └── room/ # ルームドメイン
│ └── application/ # ルームアプリケーション層
│ ├── ports/ # ユースケース入出力境界
│ ├── services/ # ルームサービス群
│ └── useCases/ # ルームユースケース
└── network/ # Socket.IO通信層
├── adapters/ # 送信アダプタ群
├── bootstrap/ # 起動配線
├── handlers/ # イベントハンドラ群
│ ├── game/ # ゲームイベントハンドラ
│ │ ├── aoi/ # 視認範囲フィルタ処理
│ │ ├── input/ # ゲーム入力ハンドラ
│ │ ├── runtime/ # ゲームランタイム解決
│ │ └── services/ # ゲーム同期サービス群
│ ├── registration/ # 接続登録コンテキスト
│ └── room/ # ルームハンドラ群
├── types/ # ネットワーク型定義
└── validation/ # ペイロード検証
3-2. 設計方針
・domains/ にビジネスロジックを集約し,game/ と room/ に分離する
・network/ 層が Socket.IO の接続管理・イベント配線を担当する
・domains/ は protocol を直接参照せず,ports/ 経由で network 層と連携する
・loop/ 配下にサーバーティック(20Hz)とハリケーンシステムを配置する
4. 共有パッケージ (packages/shared/src)
------------------------------------------------------------------------
4-1. 構成一覧
src/
├── index.ts # 共有エクスポート
├── config/ # 共通設定・定数
├── domains/ # 共有ドメインロジック
│ ├── app/ # アプリ定数・型
│ ├── game/ # ゲームドメイン共有ロジック
│ │ ├── aoi/ # 視認範囲ロジック
│ │ ├── bombHit/ # 爆弾判定ロジック
│ │ ├── gridMap/ # マップ計算・型
│ │ ├── player/ # プレイヤー型・移動同期
│ │ └── tick/ # ティックシステム
│ └── room/ # ルーム定数・型
└── protocol/ # ソケットイベント定義
├── maps/ # イベント方向別型マップ
└── payloads/ # イベントペイロード型
4-2. 設計方針
・client と server の両方から import される「真実の定義場所」として機能する
・config/ にゲーム定数・通信設定を集約する
・domains/ にドメインロジック(移動計算・マップ・判定)を配置する
・protocol/ にソケットイベント定義・ペイロード型・型マッピングを一元管理する
・protocol/events.ts は再公開専用とし,型本体を置かない(GUIDE_05 参照)