Skip to content

機能仕様書: PlayMode制御機能 #78

@akiojin

Description

@akiojin

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エージェントとして、ゲームを実行し、プレイ中の状態を確認したい。

受け入れシナリオ

  1. 前提 エディタがEditモード、実行 Play開始を要求、結果 PlayModeに移行し、isPlaying=trueが返される
  2. 前提 PlayMode中、実行 一時停止を要求、結果 ゲームが一時停止し、isPaused=trueが返される
  3. 前提 一時停止中、実行 一時停止を再度要求、結果 ゲームがレジュームし、isPaused=falseが返される
  4. 前提 PlayMode中、実行 停止を要求、結果 EditModeに復帰し、isPlaying=falseが返される
  5. 前提 エディタ状態を確認したい、実行 状態取得、結果 isPlaying、isPaused、プラットフォーム、選択オブジェクトが返される
  6. 前提 PlayMode移行を待ちたい、実行 isPlaying=trueを待機、結果 PlayModeになるまで待機し、状態が返される
  7. 前提 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: 初期遅延、再接続間隔、最大待機時間を含む再接続設定情報

レビュー&受け入れチェックリスト

コンテンツ品質

  • 実装詳細なし(言語、フレームワーク、API)
  • ユーザー価値とビジネスニーズに焦点
  • 非技術関係者向けに記述
  • すべての必須セクション完成

要件完全性

  • [要明確化]マーカーが残っていない
  • 要件はテスト可能で曖昧さがない
  • 成功基準は測定可能
  • スコープが明確に境界付けられている
  • 依存関係と前提条件が識別されている

実行ステータス

  • ユーザー説明を解析済み
  • 主要概念を抽出済み
  • 曖昧さをマーク済み
  • ユーザーシナリオを定義済み
  • 要件を生成済み
  • エンティティを識別済み
  • レビューチェックリスト合格

参考実装

実装ファイル

  • 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

  • Add acceptance checklist

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions