Newer
Older
PixelPaintWar / docs / 02_ENV / ENV_02_ディレクトリ構造.txt
========================================================================
ソースコードディレクトリ構造 (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 参照)