GitHub Copilot にPlanモードが追加されたので、PlanおよびこれまでのAgent、Edit、Askとの使い分けについて、ScrollRectEx.csという名前のファイルを例に挙げて Copilotに聞いてみました。

GitHub Copilot の主要機能
1. Agent(エージェント)
特定のコンテキストに特化したアシスタント機能です。
- @workspace - ワークスペース全体の理解と操作
- @vscode - VS Codeの機能に関する質問・操作
- @terminal - ターミナルコマンドの生成・実行支援
使用例:
@workspace この予約リストシステムの構成を教えて`
@vscode デバッグ設定の方法は?`
@terminal Gitのコミット履歴を確認するコマンド`
2. Plan(プラン機能)
大きなタスクを段階的な計画に分割し、実行可能なステップを提案します。
使用例:
/plan ScrollRectExクラスのリファクタリング計画を作成して
出力例:
1. エディタ機能とランタイム機能の分離
2. 定数の整理とマジックナンバーの除去
3. メソッドの責任分離
4. パフォーマンスの最適化
5. テストケースの追加
3. Edit(編集機能)
具体的なコード変更を自動実行します。
使用例:
/edit ScrollRectExクラスの定数を整理して、マジックナンバーを削除してください
自動実行される変更:
- 定数定義の追加
- ハードコーディングされた値の置換
- コメントの追加
4. Ask(質問機能)
一般的な質問や説明要求に対応します。
使用例:
/ask ScrollRectExクラスのドラッグ機能の仕組みを説明して
/ask Unity UIのScrollRectとの違いは?
/ask このコードのパフォーマンス改善点は?
実際の使用例(現在のScrollRectExに対して)
1. プラン作成
/plan ScrollRectExクラスの保守性向上のためのリファクタリング計画
2. 段階的編集
/edit 以下の定数を追加してマジックナンバーを置換:
- DEFAULT_DRAG_THRESHOLD = 0.3f
- DEFAULT_EDGE_SLIP_THRESHOLD = 1f
- MIN_RANGE = 0.05f, MAX_RANGE = 0.5f
3. 質問例
/ask このScrollRectExでドラッグ&ドロップが動作する仕組みは?
/ask getScrollDelta メソッドのアルゴリズムを詳しく説明して
/ask ExDataクラスの設計思想と使用目的は?
効果的な使い方のコツ
1. 段階的なアプローチ
1. /ask で現状理解
2. /plan で改善計画
3. /edit で段階的実装
4. /ask で結果検証
2. 具体的な指示
// 良い例
/edit ScrollRectExクラスに以下の定数を追加し、該当箇所を置換してください:
- DRAG_THRESHOLD_MIN = 0.05f
- DRAG_THRESHOLD_MAX = 0.5f
// 悪い例
/edit コードを改善して
3. コンテキストの活用
// 現在のファイルを参照
/edit 現在のScrollRectExクラスのエディタ部分を別ファイルに分離
// ワークスペース全体を考慮
@workspace /plan 予約リストシステム全体のアーキテクチャ改善案
各機能の特徴
| 機能 | 用途 | 出力 |
|---|---|---|
| Agent | 特定領域の専門的なサポート | コンテキストに応じた回答・提案 |
| Plan | 複雑なタスクの計画立案 | 段階的な実行計画 |
| Edit | 具体的なコード変更 | 実際のコード修正 |
| Ask | 情報収集・説明要求 | 詳細な説明・解答 |
コマンド実例
エディタ機能の分離
/edit ScrollRectExEditorクラスを別ファイルに分離し、適切なnamespaceと using文を設定してください
定数の整理
/edit ScrollRectExクラス内のマジックナンバーを定数として定義し、わかりやすい名前を付けてください:
- 0.3f → DEFAULT_DRAG_THRESHOLD
- 1f → DEFAULT_EDGE_SLIP_THRESHOLD
- 0.05f, 0.5f → DRAG_THRESHOLD_MIN, DRAG_THRESHOLD_MAX
メソッドの改善
/edit getScrollDeltaメソッドをより読みやすく分割し、各処理の責任を明確にしてください
アーキテクチャの確認
/ask ScrollRectExクラスの現在の設計において、エディタ機能とランタイム機能が同じファイルにあることの問題点は?
これらの機能を組み合わせることで、効率的な開発とリファクタリングが可能になります。