AI を VS Code で活用するためのベストプラクティス
この記事では、Visual Studio CodeでAIを最大限に活用するための実績のあるプラクティスを紹介します。各セクションでは、より詳細なドキュメントへのリンクとともに、実践的なガイダンスを提供します。
プロジェクトをAI向けに最適化する
AIを念頭に置いてプロジェクトとコードベースを構成することで、AIの回答の精度を向上させ、AIがチームのコーディング標準やプラクティスに従うようにすることができます。
VS Codeは、プロジェクトのAIの動作を構成するためのいくつかのメカニズムをサポートしています。チャットに/initと入力すると、スターター構成が生成されます。
| メカニズム | 最適な用途 | 開始方法 |
|---|---|---|
| カスタム指示 | プロジェクト全体のコーディング標準とアーキテクチャのコンテキスト | /initと入力して、プロジェクトの常時オンの指示を生成します |
| カスタムエージェント | 特殊なワークフローまたはペルソナ(TDD、セキュリティ監査) | /create-agent <説明>と入力してカスタムエージェントを生成します |
| スキル | ドメイン固有の機能(テスト、デプロイ) | /create-skill <説明>と入力してスキルを生成します |
| ツールとMCPサーバー | 外部システム(データベース、API、CLI)への接続 | mcp.jsonで構成する |
効果的なプロジェクト構成のためのヒント
- 指示ファイルは簡潔に保ちます。これらはチャットのインタラクションごとにロードされます。デフォルト以外の規約、アーキテクチャ上の決定、環境のセットアップなど、AIがコードから推測できない情報に焦点を当ててください。
applyToパターンで指示のスコープを設定します。すべてを1つのファイルにまとめるのではなく、/instructionsと入力して、言語固有またはフォルダ固有の指示ファイルを作成します。- 有効にするツールを制限します。アクティブなツールが少ないほど、より高速で関連性の高い回答が得られます。タスクに必要な場合にのみツールを有効にしてください。
セットアップの全詳細については、カスタマイズの概要を参照してください。
タスクに適したツールを選択する
VS CodeのAIは、いくつかのインタラクションモードを提供します。目の前のタスクに適したモードを選択することで、時間を節約し、より良い結果を得ることができます。
| ツール | 最適な用途 | 例 |
|---|---|---|
| インライン提案 | コード作成中にフローを維持する | インライン提案、変数名、定型コード |
| 質問する(チャット) | 質問、ブレインストーミング、アイデアの探索 | 「このプロジェクトの認証はどのように機能しますか?」 |
| インラインチャット | コンテキストを切り替えることなく、特定の場所を直接編集する | 関数のリファクタリング、エラーハンドリングの追加 |
| エージェント | 自律的な計画とツールの使用を必要とする、複数ファイルにわたる変更 | エンドツーエンドでの機能実装 |
| Plan | 実装前の構造化された計画 | アーキテクチャや移行戦略の設計 |
| スマートアクション | ビルトインの特殊なワンステップタスク | コミットメッセージの生成、エラーの修正、シンボルの名前変更 |
適切なエージェントタイプを選択する
エージェントを使用する場合は、タスクやワークフローに合ったエージェントタイプを選択してください。各タイプで、インタラクティブ性、速度、アイソレーション(分離性)のトレードオフが異なります。
-
インタラクティブな作業にはローカルエージェントを使用します。ローカルエージェントはエディター内で実行され、ワークスペース、ツール、拡張機能に完全にアクセスできます。迅速に反復処理を行いたい場合、発生した変更をその場で確認したい場合、または統合ブラウザーやMCPサーバーなどのVS Code独自のツールを使用したい場合に選択してください。
-
明確に定義されたタスクはバックグラウンドエージェントにオフロードします。すべてのステップを監視する必要がないほどタスクが明確な場合は、Copilot CLIまたはクラウドエージェントを使用してください。
-
チームコラボレーションにはクラウドエージェントを使用します。クラウドエージェントはリモートで実行され、プルリクエストを作成するため、チームによるレビューが役立つタスクや、GitHubのイシューをエージェントに直接割り当てたい場合に最適です。
-
独立したタスクには並行セッションを実行します。ローカル、バックグラウンド、クラウド環境にわたって複数のエージェントセッションを立ち上げ、無関係なタスクを同時に進めます。これらはセッション一覧から監視できます。
-
エージェントタイプ間でハンドオフ(引き継ぎ)します。最初はローカルエージェントとインタラクティブに探索や計画を行い、その後、実装のためにバックグラウンドまたはクラウドエージェントにハンドオフします。会話履歴は引き継がれます。
詳細については、エージェントの使用方法およびエージェントチュートリアルを参照してください。
効果的なプロンプトを作成する
AIの回答の品質は、プロンプトの明確さと具体性に依存します。これらの手法は、より良い結果を得るのに役立ちます。
-
入力、出力、制約を具体的に指定します。使用したいプログラミング言語、フレームワーク、ライブラリを明記してください。期待される動作を説明するか、入力と出力の例を含めます。
Write a TypeScript function that validates email addresses. Return true for valid addresses, false otherwise. Don't use regex. Example: validateEmail("user@example.com") returns true Example: validateEmail("invalid") returns false -
複雑なタスクは分解します。一度に機能全体を要求するのではなく、スコープが明確な小さなステップに分解してください。このアプローチにより、より信頼性の高い結果が得られ、問題を早期に発見しやすくなります。
-
検証用の期待される出力を提示します。テストケース、期待される結果、または受け入れ基準を提供して、AIが自身の成果を検証できるようにします。このステップは、最も効果的な方法の1つです。
Implement a rate limiter using the token bucket algorithm. Write unit tests that verify: 10 requests/second allowed, 11th request rejected, bucket refills after 1 second. Run the tests after implementing. -
曖昧なプロンプトを避けます。「これを改善して」のようなプロンプトでは、AIに方向性が伝わりません。代わりに、「時間計算量を削減する」や「null値の入力検証を追加する」のように、具体的に「改善」の意味を指定してください。
-
フォローアッププロンプトで反復処理を行います。プロンプト全体を書き直すのではなく、フォローアップメッセージで制約や修正を追加して回答をブラッシュアップします。
-
早期に軌道修正します。AIが誤った方向に向かっている場合は、フォローアップメッセージでコントロールし、現在のリクエストを方向転換するか、フォローアップリクエストをキューに入れるか、または停止して新しいプロンプトを送信してください。
-
AIに確認の質問をするよう指示します。タスクが曖昧な場合は、作業を進める前に質問するようAIに指示してください。要件を推測させるよりも、正確な結果につながります。
-
並行タスク。独立したタスクが複数ある場合は、時間を節約するためにそれらを並行して実行するようAIに依頼します。例えば、「XとYについて個別に並行して調査を行い、その結果を要約してください」のように指定します。
詳細については、GitHub Copilotドキュメントの実践的なプロンプトの例を参照してください。
適切なコンテキストを提供する
関連するコンテキストがある場合、AIはより正確に回答します。これらの手法を使用して、AIに適切な情報を提示してください。
-
AIは自動的にコード検索を実行して、関連するコンテキストを収集します。プロンプトが曖昧な場合は、
#<file>、#<folder>、または#<symbol>を使用して、プロンプト内で特定のファイル、フォルダ、またはシンボルを参照することでAIを誘導できます。 -
ウェブページやGitHubリポジトリから情報を取得するには、
#fetchを使用してコードベース以外の最新情報をAIに提供するか、GitHub MCPなどのMCPサーバーのツールを使用します。 -
ソース管理の変更、ターミナル出力、テストの失敗などのVS Code環境のコンテキストを参照することで、AIがプロジェクトの現在の状態を理解し、より関連性の高い回答を提供できるようにします。
-
画像やスクリーンショットを追加して、AIに視覚的なコンテンツを分析させます。
-
統合ブラウザーを使用してアプリをプレビューし、コンテキストとして使用するページ要素を選択します。
詳細については、チャットプロンプトへのコンテキストの追加およびツールの構成を参照してください。
適切なモデルを選択する
各AIモデルにはそれぞれ異なる強みがあります。推論に優れているものもあれば、コード生成や迅速な回答に優れているものもあります。タスクに適したモデルを選択することで、結果が向上します。
-
タスクの複雑さにモデルを合わせます。シンプルな補完や定型コードには、高速なモデルを使用します。計画、デバッグ、またはアーキテクチャ上の決定には、推論に最適化されたモデルに切り替えます。
-
最新のモデルを使用します。新しいモデルは、機能が向上していることがよくあります。VS Codeは、新しいモデルやモデルバージョンへのサポートを継続的に追加しています。利用可能なモデルを確認し、最新のモデルを使用してください。
-
プロンプトファイルやエージェントでモデルを固定します。プロンプトファイルまたはカスタムエージェントの定義で優先モデルを指定し、特定のタスクに対して常に適切なモデルが使用されるようにします。
-
実験して比較します。回答に満足できない場合は、別のモデルを試してください。同じプロンプトでも、モデルが異なると結果が大きく異なる場合があります。
-
推論モデルの思考プロセスを調整します。モデルピッカーの思考プロセス制御(thinking effort control)を使用して、複雑なタスクでは思考プロセスを増やし、単純なタスクでは減らします。
-
追加の制御のためにBYOK(Bring Your Own Key)を使用します。独自のAPIキーを持ち込むことで、より多くのモデルの選択肢やホスティングオプションを利用できます。
-
クレジット消費を考慮します。より高性能なモデルは、トークンあたりのAIクレジットをより多く消費します。自動モデル選択機能は、品質とコストのバランスを自動的に調整します。その他のヒントについては、AIクレジット使用量の最適化を参照してください。
詳細については、AIモデルの選択およびCopilot Chatで利用可能なモデルを参照してください。
最初に計画し、次に実装する
複数ファイルにわたる複雑な変更の場合は、計画と実装を切り離します。このアプローチにより、AIが誤った問題を解決するのを防ぎ、破棄せざるを得ないコードにAIクレジットを費やすのを避けることができます。
- 探索する。変更を加える前に、質問(ask)モードまたはサブエージェントを使用して、関連するコードを読み取り、それがどのように機能するかを理解します。
- 計画する。Planエージェントを使用して、構造化された実装計画を作成します。実行する前に計画を確認し、洗練させます。
- 実装する。エージェントモードに切り替え、計画に基づいて実装します。テストまたは期待される出力を提示し、エージェントが自身の作業を検証できるようにします。時間のかかるタスクは、バックグラウンドエージェントまたはクラウドエージェントに引き継ぎます。
- 確認する。チェックポイントを使用して進捗を確認し、エージェントが軌道から外れた場合は巻き戻します。または、作成されたプルリクエストに対してCopilotによるコードレビューをリクエストします。
詳細については、コンテキストエンジニアリングワークフローを参照してください。
AIの出力を確認・検証する
AIが生成したコードには、バグ、セキュリティ上の問題、または微妙なロジックエラーが含まれている可能性があります。AIの出力は、常にレビューが必要な「出発点」として扱ってください。
-
受け入れる前に確認します。変更を受け入れる前に、生成されたコードをしっかりと読み込んでください。エッジケース、エラーハンドリング、およびAIが行った可能性のある仮定に注意を払います。
-
AIによる変更後にテストを実行します。AIが自身の成果を検証できるように、プロンプトにテストケースを含めます。AIがテストを自動的に実行しない場合は、次の作業に進む前に自身でテストを実行してください。
-
チェックポイントを使用して巻き戻します。エージェントが軌道から外れた場合は、連鎖するエラーを修正しようとするのではなく、チェックポイントを使用して正常であることがわかっている状態までロールバックします。
-
セキュリティ上の問題を確認します。インジェクションの脆弱性、ハードコードされたシークレット、入力検証の不足など、一般的な脆弱性がないかAI生成コードを確認します。プロンプトに認証情報や機密データを貼り付けないでください。
詳細については、GitHub CopilotのセキュリティおよびGitHub Copilot Trust Centerを参照してください。
コンテキストとセッションを管理する
会話が無関係なコンテキストで満たされると、AIの回答の質が低下する可能性があります。プロアクティブにセッションを管理してください。
-
無関係なタスクには新しいセッションを開始します。無関係な質問を1つの会話に積み重ねないでください。コンテキストの汚染は回答の質を低下させ、無関係な履歴にトークンを浪費することになります。
-
無関係な履歴を削除します。関連性がなくなった過去の質問と回答を削除するか、新しいセッションを開始します。
-
コンテキストを圧縮します。/compactを使用し、指示を与えてコンテキストを選択的に圧縮し、最も関連性の高い情報のみを保持します。圧縮により、それ以降の各リクエストで送信されるトークンが削減され、AIクレジット使用量の管理に役立ちます。
-
調査にはサブエージェントを使用します。調査結果がメインコンテキストを煩雑にしないよう、サブエージェントを使用して、AIに独立して調査や探索を行うよう促します。
-
適切なセッションタイプを選択します。即座の注意が必要な現在のコードに対する迅速なタスクにはローカルセッション、メインコンテキストから分離してローカルで実行できるタスクにはバックグラウンドタスク、チームコラボレーションが有益なタスクにはクラウドセッションを使用します。
-
並行セッションでスケールします。独立したタスクについて複数のセッションを並行して実行することで、時間を節約し、コンテキストを分離した状態に保ちます。ローカル、バックグラウンド、およびクラウド環境にわたって複数のセッションを同時に実行でき、VS Codeのセッション一覧からそれらを切り替えることができます。
-
再プロンプトする代わりにフォークします。最初からやり直してコンテキストを再構築する代わりに、
/forkを使用してコンテキストを失うことなく代替案を検討します。
詳細については、セッション管理、ワークスペースのインデックス作成、およびAIクレジット使用量の最適化を参照してください。
大規模なコードベースでの作業
Copilotは、大規模で複雑な、マルチルートのワークスペースでも効果的に機能するように設計されています。大規模な開発において最良の結果を得るために、以下のプラクティスを活用してください。
-
ワークスペースのインデックス作成を使用します。VS Codeは、セマンティック検索、言語インテリジェンス、およびGitHub'sのコード検索を使用して、ファイル間をまたぐ深い推論のためにプロジェクトを自動的にインデックス化します。これは、小規模なプロジェクトから大規模なエンタープライズコードベースまで機能します。大規模なリポジトリの場合は、GitHub上のご自身のリポジトリや関連リポジトリ全体で、高速かつ包括的な結果を得るためにリモートインデックス作成を使用してください。
-
マルチルートワークスペースで作業のスコープを設定します。モノレポや複数のサービスを持つプロジェクトでは、マルチルートワークスペースを使用して、AIに明確な境界と焦点の絞られたコンテキストを提供します。
-
プロジェクトレベルの指示を提供します。カスタム指示(custom instructions)を使用して、コードだけからはAIが推測できないプロジェクトのアーキテクチャ、モジュールの境界、規約を説明します。これにより、アーキテクチャレベルの変更に必要なコンテキストがAIに提供されます。
-
独立した変更のために並行セッションを実行します。大きなタスクを独立したサブタスクに分割し、それぞれがコードベースの異なる領域に焦点を当てた並行セッションで実行します。
-
横断的な変更にはPlanエージェントを使用します。多くのファイルやモジュールにまたがる変更の場合は、実行する前にPlanエージェントから始めて構造化された実装計画を作成します。
詳細については、ワークスペースコンテキストおよびエージェントを参照してください。
関連リソース
- コンテキストエンジニアリングガイド
- カスタマイズの概要
- チートシート
- GitHub Copilotのセキュリティ
- GitHub Copilotドキュメント内のGitHub Copilotを使用する際のベストプラクティス