Skip to content

機能仕様書: Editor制御機能 #73

@akiojin

Description

@akiojin

Spec

機能仕様書: Editor制御機能

機能ID: SPEC-3d9b5f4e
作成日: 2025-10-17
ステータス: 完了
入力: Unity Editorのウィンドウ管理、選択操作、タグ・レイヤー管理、ツール/プラグイン管理、メニュー実行

実行フロー (main)

1. 入力からEditor操作要件を解析
   → 操作タイプ(ウィンドウ/選択/タグ/レイヤー/ツール/メニュー)の特定
2. Editor状態の確認
   → 現在のウィンドウ状態、選択オブジェクト、プロジェクト設定を確認
3. Editor操作の実行
   → ウィンドウ: リスト取得、フォーカス、状態取得
   → 選択: オブジェクト選択、クリア、詳細取得
   → タグ/レイヤー: 追加、削除、リスト取得、変換
   → ツール: 有効化、無効化、リスト取得
   → メニュー: メニュー項目実行、利用可能メニュー取得
4. 安全性チェック(メニュー実行時)
   → 危険な操作(削除、クローズ等)の検出と警告
5. 結果の返却
   → 操作結果とEditor状態の更新情報
6. 戻り値: SUCCESS(操作結果情報)

⚡ クイックガイドライン

  • ✅ Editorの自動化とAIエージェントによる操作の必要性に焦点
  • ❌ 内部的なEditorUIシステムやUnityエディタの実装詳細は避ける
  • 👥 ゲーム開発者・テクニカルアーティスト・AIエージェント向けに記述

ユーザーシナリオ&テスト

主要ユーザーストーリー

開発者として、繰り返し作業を自動化するために、Unity Editorの操作をプログラムで制御したい。AIエージェントとして、ユーザーの指示に従ってEditorウィンドウを操作したい。

受け入れシナリオ

  1. 前提 複数のウィンドウが開いている、実行 ウィンドウリスト取得、結果 全ウィンドウの名前と状態が返される
  2. 前提 Consoleウィンドウにフォーカスしたい、実行 ウィンドウフォーカス要求、結果 Consoleがアクティブになる
  3. 前提 特定のGameObjectを選択したい、実行 オブジェクト選択、結果 指定したオブジェクトが選択される
  4. 前提 新しいタグを追加したい、実行 タグ追加、結果 タグが追加され、リストに表示される
  5. 前提 カスタムレイヤーを追加したい、実行 レイヤー追加、結果 レイヤーが追加され、インデックスが返される
  6. 前提 レイヤー名からインデックスを知りたい、実行 レイヤー名で検索、結果 レイヤーインデックスが返される
  7. 前提 メニュー項目を実行したい、実行 メニューパス指定で実行、結果 メニュー項目が実行される
  8. 前提 危険なメニュー項目を実行しようとした、実行 安全性チェック、結果 警告が表示され、確認が求められる

エッジケース

  • ウィンドウが存在しない場合、フォーカスはどう処理するか? → エラーメッセージと利用可能なウィンドウリストを返す
  • 同じタグを追加しようとした場合、どう処理するか? → 既に存在することを通知し、エラーを返す
  • レイヤーが満杯(32個)の場合、追加はどう処理するか? → エラーメッセージと既存レイヤーのリストを返す
  • 無効なメニューパスを指定した場合、どう処理するか? → エラーメッセージと類似メニューの提案を返す
  • 破壊的なメニュー項目を実行した場合、どうなるか? → 安全性チェックで検出し、確認プロンプトを表示

要件

機能要件

  • FR-001: ユーザーは現在開いているEditorウィンドウのリストを取得できる必要がある
  • FR-002: システムは非表示/最小化されたウィンドウを含めるオプションをサポートする必要がある
  • FR-003: ユーザーは特定のウィンドウにフォーカスできる必要がある
  • FR-004: ユーザーはウィンドウの状態(フォーカス、位置、サイズ)を取得できる必要がある
  • FR-005: ユーザーはGameObjectを選択できる必要がある(単一または複数)
  • FR-006: ユーザーは現在の選択をクリアできる必要がある
  • FR-007: システムは選択詳細(名前、タイプ、パス)を返すオプションをサポートする必要がある
  • FR-008: ユーザーはプロジェクトにタグを追加できる必要がある
  • FR-009: ユーザーはタグを削除できる必要がある(予約タグは保護)
  • FR-010: ユーザーはすべてのタグのリストを取得できる必要がある
  • FR-011: ユーザーはプロジェクトにレイヤーを追加できる必要がある(インデックス0-31)
  • FR-012: ユーザーはレイヤーを削除できる必要がある(組み込みレイヤーは保護)
  • FR-013: ユーザーはレイヤー名からインデックスを取得できる必要がある
  • FR-014: ユーザーはレイヤーインデックスから名前を取得できる必要がある
  • FR-015: ユーザーは利用可能なツール/プラグインのリストを取得できる必要がある
  • FR-016: ユーザーはツール/プラグインを有効化/無効化できる必要がある
  • FR-017: ユーザーはUnityメニュー項目を実行できる必要がある
  • FR-018: システムはメニュー実行前に安全性チェックを行う必要がある(デフォルト有効)
  • FR-019: ユーザーは安全性チェックを無効化できる必要がある
  • FR-020: ユーザーは利用可能なメニュー項目のリストを取得できる必要がある

非機能要件

  • NFR-001: ウィンドウ操作は500ms以内に完了する必要がある
  • NFR-002: 選択操作は200ms以内に完了する必要がある
  • NFR-003: タグ/レイヤー管理は1秒以内に完了する必要がある
  • NFR-004: メニュー実行は操作内容に依存するが、コマンド送信は200ms以内に完了する必要がある
  • NFR-005: ツール管理は2秒以内に完了する必要がある

主要エンティティ

  • EditorWindow: ウィンドウ名、タイプ、フォーカス状態、位置、サイズを含むウィンドウ情報
  • SelectionInfo: 選択オブジェクトのパス、名前、タイプ、詳細を含む選択情報
  • TagInfo: タグ名、予約フラグを含むタグ情報
  • LayerInfo: レイヤー名、インデックス、組み込みフラグを含むレイヤー情報
  • ToolInfo: ツール名、カテゴリ、有効状態、バージョンを含むツール情報
  • MenuItemInfo: メニューパス、有効状態、ショートカット、危険度を含むメニュー項目情報

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

コンテンツ品質

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

要件完全性

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

実行ステータス

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

参考実装

実装ファイル

  • unity-cli/src/handlers/editor/EditorWindowsManageToolHandler.js
  • unity-cli/src/handlers/editor/EditorSelectionManageToolHandler.js
  • unity-cli/src/handlers/editor/EditorTagsManageToolHandler.js
  • unity-cli/src/handlers/editor/EditorLayersManageToolHandler.js
  • unity-cli/src/handlers/editor/EditorToolsManageToolHandler.js
  • unity-cli/src/handlers/menu/MenuItemExecuteToolHandler.js
  • UnityCliBridge/Packages/unity-cli-bridge/Editor/Handlers/WindowManagementHandler.cs
  • UnityCliBridge/Packages/unity-cli-bridge/Editor/Handlers/SelectionHandler.cs
  • UnityCliBridge/Packages/unity-cli-bridge/Editor/Handlers/TagManagementHandler.cs
  • UnityCliBridge/Packages/unity-cli-bridge/Editor/Handlers/LayerManagementHandler.cs
  • UnityCliBridge/Packages/unity-cli-bridge/Editor/Handlers/ToolManagementHandler.cs
  • UnityCliBridge/Packages/unity-cli-bridge/Editor/Handlers/MenuHandler.cs

技術詳細

  • UnityEditor.EditorWindowによるウィンドウ管理
  • UnityEditor.Selectionによる選択操作
  • UnityEditorInternal.InternalEditorUtilityによるタグ管理
  • LayerMaskとTagManagerによるレイヤー管理
  • UnityEditor.EditorApplicationによるメニュー実行
  • メニュー安全性チェック(破壊的操作の検出)

Plan

実装計画: Editor制御機能

機能ID: SPEC-3d9b5f4e | ステータス: 実装完了

概要

本機能は既に実装済みです。このplan.mdは実装完了後に作成されました。

実装状況

  • ✅ Phase 0: Research完了
  • ✅ Phase 1: Design完了
  • ✅ Phase 2: Task planning完了
  • ✅ Phase 3: Tasks実装完了
  • ✅ Phase 4: 実装完了
  • ✅ Phase 5: テスト完了

参考実装

実装詳細については spec.md の「参考実装」セクションを参照してください。


本ドキュメントは実装完了後に作成されました

Tasks

タスク: Editor制御機能

機能ID: SPEC-3d9b5f4e | ステータス: 完了

実装状況

本機能は既に実装済みです。すべてのタスクが完了しています。

完了済みタスク

  • 機能設計
  • コア実装
  • テスト実装
  • ドキュメント作成

参考

実装詳細については 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