Spec
機能仕様書: PlayMode制御機能
機能ID: SPEC-5c438276
作成日: 2025-10-17
ステータス: 完了
入力: Unity EditorのPlayMode(再生モード)の開始、一時停止、停止、状態取得、状態待機
実行フロー (main)
1. 入力からPlayMode操作要件を解析
→ 操作タイプ(開始/一時停止/停止/状態取得/状態待機)の特定
2. エディタの現在状態確認
→ 既にPlayMode中か、Editモードかを確認
3. PlayMode操作実行
→ 開始: Playモードに移行、ドメインリロード待機、再接続
→ 一時停止: Playモードを一時停止またはレジューム
→ 停止: Editモードに復帰、状態確認
4. 状態ポーリング(オプション)
→ 指定した状態(isPlaying)になるまで待機
→ タイムアウト設定による制限
5. 再接続処理(ドメインリロード対応)
→ Play開始時の接続断対応
→ 自動再接続とリトライ
6. 戻り値: SUCCESS(エディタ状態情報)
⚡ クイックガイドライン
- ✅ 自動テストとAIエージェントによるゲームプレイテストの必要性に焦点
- ❌ 内部的なドメインリロードやUnityエディタの実装詳細は避ける
- 👥 ゲーム開発者・QAエンジニア・AIエージェント向けに記述
ユーザーシナリオ&テスト
主要ユーザーストーリー
開発者として、ゲームロジックをテストするために、PlayModeをプログラムで制御したい。AIエージェントとして、ゲームを実行し、プレイ中の状態を確認したい。
受け入れシナリオ
- 前提 エディタがEditモード、実行 Play開始を要求、結果 PlayModeに移行し、isPlaying=trueが返される
- 前提 PlayMode中、実行 一時停止を要求、結果 ゲームが一時停止し、isPaused=trueが返される
- 前提 一時停止中、実行 一時停止を再度要求、結果 ゲームがレジュームし、isPaused=falseが返される
- 前提 PlayMode中、実行 停止を要求、結果 EditModeに復帰し、isPlaying=falseが返される
- 前提 エディタ状態を確認したい、実行 状態取得、結果 isPlaying、isPaused、プラットフォーム、選択オブジェクトが返される
- 前提 PlayMode移行を待ちたい、実行 isPlaying=trueを待機、結果 PlayModeになるまで待機し、状態が返される
- 前提 Play開始でドメインリロード発生、実行 自動再接続、結果 再接続後にPlayMode確認し、結果が返される
エッジケース
- 既にPlayMode中にPlay開始を要求した場合、何が起こるか? → 既にPlayMode中であることを通知し、現在の状態を返す
- 既にEditMode中にStop要求した場合、どう処理するか? → 既にEditMode中であることを通知し、状態を返す
- PlayMode移行中に接続が切断された場合、どう処理するか? → 自動再接続を試行し、タイムアウト設定に従う
- 状態待機中にタイムアウトした場合、どう処理するか? → 現在の状態を返し、タイムアウトしたことを通知
- ドメインリロードの再接続に失敗した場合、どう処理するか? → エラーメッセージと手動再接続の提案を返す
要件
機能要件
- FR-001: ユーザーはPlayMode開始を要求できる必要がある
- FR-002: システムはPlayMode開始時にドメインリロードを検出し、自動再接続する必要がある
- FR-003: システムは再接続の初期遅延時間を設定できる必要がある(デフォルト3000ms)
- FR-004: システムは再接続の試行間隔を設定できる必要がある(デフォルト500ms)
- FR-005: システムはPlayMode確認のポーリング間隔を設定できる必要がある(デフォルト800ms)
- FR-006: ユーザーは最大待機時間を設定できる必要がある(デフォルト無制限)
- FR-007: ユーザーはPlayModeの一時停止/レジュームを要求できる必要がある
- FR-008: ユーザーはPlayMode停止(Editモード復帰)を要求できる必要がある
- FR-009: ユーザーはエディタ状態(isPlaying、isPaused、プラットフォーム等)を取得できる必要がある
- FR-010: システムは状態取得時にソフトキャッシュを使用し、最小間隔(デフォルト250ms)で再取得を制限する必要がある
- FR-011: ユーザーは特定の状態(isPlaying=true/false)になるまで待機できる必要がある
- FR-012: システムは状態待機時のタイムアウトとポーリング間隔を設定できる必要がある
- FR-013: システムはPlayMode操作の結果として、現在の状態と待機時間を返す必要がある
非機能要件
- NFR-001: PlayMode開始コマンドは200ms以内に送信される必要がある
- NFR-002: PlayMode確認のポーリングは設定した間隔(デフォルト800ms)で実行される必要がある
- NFR-003: 状態取得は100ms以内に完了する必要がある(キャッシュ使用時)
- NFR-004: 再接続処理は設定したタイムアウト内に完了するか、エラーを返す必要がある
- NFR-005: 状態待機は設定したタイムアウト内に完了するか、現在の状態を返す必要がある
主要エンティティ
- PlayModeOperation: 操作タイプ(play/pause/stop)、タイムアウト設定、ポーリング設定を含む操作情報
- EditorState: isPlaying、isPaused、プラットフォーム、選択オブジェクト、Unityバージョンを含む状態情報
- StateWaitRequest: 待機条件(isPlaying=true/false)、タイムアウト、ポーリング間隔を含む待機要求
- ReconnectionConfig: 初期遅延、再接続間隔、最大待機時間を含む再接続設定情報
レビュー&受け入れチェックリスト
コンテンツ品質
要件完全性
実行ステータス
参考実装
実装ファイル
unity-cli/src/handlers/playmode/PlaymodePlayToolHandler.js
unity-cli/src/handlers/playmode/PlaymodePauseToolHandler.js
unity-cli/src/handlers/playmode/PlaymodeStopToolHandler.js
unity-cli/src/handlers/playmode/PlaymodeGetStateToolHandler.js
unity-cli/src/handlers/playmode/PlaymodeWaitForStateToolHandler.js
UnityCliBridge/Packages/unity-cli-bridge/Editor/Handlers/PlayModeHandler.cs
技術詳細
- UnityEditor.EditorApplicationを使用したPlayMode制御
- ドメインリロードによる接続断の自動検出と再接続
- ソフトキャッシュによる状態取得の最適化
- ポーリングベースの状態待機とタイムアウト処理
Plan
実装計画: PlayMode制御機能
機能ID: SPEC-5c438276 | ステータス: 実装完了
概要
本機能は既に実装済みです。このplan.mdは実装完了後に作成されました。
実装状況
- ✅ Phase 0: Research完了
- ✅ Phase 1: Design完了
- ✅ Phase 2: Task planning完了
- ✅ Phase 3: Tasks実装完了
- ✅ Phase 4: 実装完了
- ✅ Phase 5: テスト完了
参考実装
実装詳細については spec.md の「参考実装」セクションを参照してください。
本ドキュメントは実装完了後に作成されました
Tasks
タスク: PlayMode制御機能
機能ID: SPEC-5c438276 | ステータス: 完了
実装状況
本機能は既に実装済みです。すべてのタスクが完了しています。
完了済みタスク
参考
実装詳細については spec.md および plan.md を参照してください。
本ドキュメントは実装完了後に作成されました
TDD
TODO
Research
TODO
Data Model
TODO
Quickstart
TODO
Contracts
Artifact files under contracts/ are managed in issue comments with contract:<name> entries.
Checklists
Artifact files under checklists/ are managed in issue comments with checklist:<name> entries.
Acceptance Checklist
Spec
機能仕様書: PlayMode制御機能
機能ID:
SPEC-5c438276作成日: 2025-10-17
ステータス: 完了
入力: Unity EditorのPlayMode(再生モード)の開始、一時停止、停止、状態取得、状態待機
実行フロー (main)
⚡ クイックガイドライン
ユーザーシナリオ&テスト
主要ユーザーストーリー
開発者として、ゲームロジックをテストするために、PlayModeをプログラムで制御したい。AIエージェントとして、ゲームを実行し、プレイ中の状態を確認したい。
受け入れシナリオ
エッジケース
要件
機能要件
非機能要件
主要エンティティ
レビュー&受け入れチェックリスト
コンテンツ品質
要件完全性
実行ステータス
参考実装
実装ファイル
unity-cli/src/handlers/playmode/PlaymodePlayToolHandler.jsunity-cli/src/handlers/playmode/PlaymodePauseToolHandler.jsunity-cli/src/handlers/playmode/PlaymodeStopToolHandler.jsunity-cli/src/handlers/playmode/PlaymodeGetStateToolHandler.jsunity-cli/src/handlers/playmode/PlaymodeWaitForStateToolHandler.jsUnityCliBridge/Packages/unity-cli-bridge/Editor/Handlers/PlayModeHandler.cs技術詳細
Plan
実装計画: PlayMode制御機能
機能ID:
SPEC-5c438276| ステータス: 実装完了概要
本機能は既に実装済みです。このplan.mdは実装完了後に作成されました。
実装状況
参考実装
実装詳細については
spec.mdの「参考実装」セクションを参照してください。本ドキュメントは実装完了後に作成されました
Tasks
タスク: PlayMode制御機能
機能ID:
SPEC-5c438276| ステータス: 完了実装状況
本機能は既に実装済みです。すべてのタスクが完了しています。
完了済みタスク
参考
実装詳細については
spec.mdおよびplan.mdを参照してください。本ドキュメントは実装完了後に作成されました
TDD
TODO
Research
TODO
Data Model
TODO
Quickstart
TODO
Contracts
Artifact files under
contracts/are managed in issue comments withcontract:<name>entries.Checklists
Artifact files under
checklists/are managed in issue comments withchecklist:<name>entries.Acceptance Checklist