Spaces:
Sleeping
Sleeping
| # metadata.json と Enumification 分析レポート | |
| ## 概要 | |
| このレポートでは、`data/metadata.json` がシステム全体にどのように供給されているか、そして「enumification」(列挙型化)がまだ必要な箇所を特定します。 | |
| --- | |
| ## 1. metadata.json の構造 | |
| | セクション | 用途 | エントリ数 | | |
| |-----------|------|-----------| | |
| | `triggers` | 能力の発動タイミング | 11 | | |
| | `targets` | 効果の対象 | 14 | | |
| | `opcodes` | バイトコード命令 | 67 | | |
| | `phases` | ゲームフェーズ | 15 | | |
| | `conditions` | 条件チェック命令 | 54 | | |
| | `costs` | コスト種別 | 95 | | |
| | `choices` | 選択タイプ | 28 | | |
| | `zones` | ゾーン識別 | 11 | | |
| | `extra_constants` | ビットマスク定数 | 76+ | | |
| --- | |
| ## 2. metadata.json のフロー | |
| ```mermaid | |
| flowchart TD | |
| A[data/metadata.json] --> B[tools/sync_metadata.py] | |
| B --> C[engine_rust_src/src/core/generated_constants.rs] | |
| B --> D[engine_rust_src/src/core/enums.rs] | |
| B --> E[frontend/web_ui/js/generated_constants.js] | |
| B --> F[engine/models/generated_metadata.py] | |
| B --> G[engine_rust_src/src/core/shader_constants.wgsl] | |
| ``` | |
| --- | |
| ## 3. 現在のEnumification状態 | |
| ### ✅ 既にEnum化されている箇所 | |
| | ファイル | 内容 | 状態 | | |
| |---------|------|------| | |
| | [`engine/models/opcodes.py`](engine/models/opcodes.py) | `Opcode` enum | ✅ `generated_metadata.py` から自動生成 | | |
| | [`engine/models/generated_metadata.py`](engine/models/generated_metadata.py) | 定数辞書 (OPCODES, TRIGGERS, etc.) | ✅ 自動生成 | | |
| | [`engine/models/enums.py`](engine/models/enums.py) | `CardType`, `HeartColor`, `Area`, `Group`, `Unit` | ✅ 手動管理だが独立 | | |
| | frontend JS | `TriggerType`, `EffectType`, `ActionBases` | ✅ `generated_constants.js` から import | | |
| ### ❌ Enumification がまだ必要な箇所 | |
| | ファイル | クラス | 問題点 | | |
| |---------|-------|--------| | |
| | [`engine/models/ability.py:27`](engine/models/ability.py) | `TriggerType` | `generated_metadata.py` 已有りの重複、手動管理 | | |
| | [`engine/models/ability.py:42`](engine/models/ability.py) | `TargetType` | `generated_metadata.py` 已有りの重複、手動管理 | | |
| | [`engine/models/ability.py:59`](engine/models/ability.py) | `EffectType` | `generated_metadata.py` 已有りの重複、手動管理 | | |
| | [`engine/models/ability.py:347`](engine/models/ability.py) | `AbilityCostType` | **101+ エントリ**、手動管理、`generated_metadata.py` の COSTS と重複 | | |
| | Rust engine | 各種 enum | `enums.rs` に重複定義の可能性 | | |
| --- | |
| ## 4. 具体的な重複例 | |
| ### 4.1 TriggerType の重複 | |
| ```python | |
| # engine/models/ability.py (手動管理) | |
| class TriggerType(IntEnum): | |
| NONE = 0 | |
| ON_PLAY = 1 | |
| # ... | |
| # engine/models/generated_metadata.py (自動生成) | |
| TRIGGERS = { | |
| "NONE": 0, | |
| "ON_PLAY": 1, | |
| # ... | |
| } | |
| ``` | |
| ### 4.2 AbilityCostType の問題 | |
| `metadata.json` の `costs` セクションには **95エントリ** がありますが、`ability.py` の `AbilityCostType` には **101+ エントリ** があり、値が重複或多すぎます。 | |
| ```python | |
| # ability.py からの例 | |
| class AbilityCostType(IntEnum): | |
| NONE = 0 | |
| ENERGY = 1 | |
| TAP_SELF = 2 | |
| # ... 101+ entries | |
| # 多くは自動生成されたプレースホルダー | |
| ``` | |
| --- | |
| ## 5. 推奨されるEnumification計画 | |
| ### 5.1 短期 (高優先度) | |
| 1. **ability.py の enum を generated_metadata.py から import** | |
| - `TriggerType`, `TargetType`, `EffectType` を削除 | |
| - `from .generated_metadata import TRIGGERS, TARGETS, OPCODES` を使用 | |
| - または `generated_metadata.py` に IntEnum クラスを追加生成 | |
| 2. **AbilityCostType の整理** | |
| - `metadata.json` の `costs` と 完全一致させる | |
| - 余分なエントリを削除 | |
| - または `sync_metadata.py` を拡張して `AbilityCostType` enum を自動生成 | |
| ### 5.2 中期 (中優先度) | |
| 3. **Rust engine の enum 統一** | |
| - `engine_rust_src/src/core/enums.rs` を `generated_constants.rs` から自動生成 | |
| - 重複定義の排除 | |
| 4. **Frontend JS の enum 統一** | |
| - `generated_constants.js` に IntEnum 相当のオブジェクトを追加 | |
| --- | |
| ## 6. 関連ファイル一覧 | |
| | ファイル | 役割 | | |
| |---------|------| | |
| | [`data/metadata.json`](data/metadata.json) | マスターデータ | | |
| | [`tools/sync_metadata.py`](tools/sync_metadata.py) | 同期スクリプト | | |
| | [`engine/models/generated_metadata.py`](engine/models/generated_metadata.py) | 自動生成の定数 | | |
| | [`engine/models/ability.py`](engine/models/ability.py) | 能力定義 (enum 重複問題) | | |
| | [`engine/models/opcodes.py`](engine/models/opcodes.py) | Opcode enum (OK) | | |
| | [`engine/models/enums.py`](engine/models/enums.py) | ゲーム基本enum | | |
| | [`engine_rust_src/src/core/generated_constants.rs`](engine_rust_src/src/core/generated_constants.rs) | Rust定数 | | |
| | [`frontend/web_ui/js/generated_constants.js`](frontend/web_ui/js/generated_constants.js) | Frontend定数 | | |
| --- | |
| ## 7. 結論 | |
| **enumification が最も必要な箇所:** | |
| 1. **`engine/models/ability.py`** - `TriggerType`, `TargetType`, `EffectType`, `AbilityCostType` の4つのenum | |
| 2. **Rust engine** - 手動管理されている enum の自動生成化 | |
| 現在のシステムは **部分的に** enumification されていますが、`ability.py` には古い手動管理のenumが残っており、これらは `generated_metadata.py` と重複しています。将来的な一貫性のためには、これらのenumを自動生成システムに統合する必要があります。 | |