VS Codeのエージェントモードを拡張するには、を試してください!

VS Code で AI の応答をカスタマイズする

Visual Studio Code のチャットは、適切なコンテキストを与えることで、コーディング規約やプロジェクト要件に合致する応答を提供し、コードを生成できます。この情報を毎回チャットプロンプトに繰り返し追加する代わりに、このコンテキストをファイルに保存し、すべてのチャットリクエストに自動的に含めることができます。この記事では、カスタム命令とプロンプトファイルを使用して、VS Code で AI の応答をカスタマイズする方法を学びます。

Visual Studio Code で AI の応答をカスタマイズするには、主に3つの方法があります。

  • カスタム命令: コード生成、コードレビューの実行、コミットメッセージの生成などのタスクに対する一般的なガイドラインやルールを定義します。カスタム命令は、AI がどのようにタスクを実行すべきか (how) の条件を記述します。カスタム命令を定義する方法を学びましょう。VS Code はまた、コーディング規約やプロジェクト要件に合致するワークスペース用のカスタム命令ファイルを生成するのにも役立ちます。

    例のシナリオ
    • 生成されたコードが標準に従うように、コーディング規約、推奨テクノロジー、またはプロジェクト要件を指定します。
    • セキュリティ脆弱性やパフォーマンス問題のチェックなど、コードレビューのルールを設定します。
    • コミットメッセージやプルリクエストのタイトルと説明を生成するための指示を提供します。
  • プロンプトファイル: コード生成やコードレビューの実行などの一般的なタスクのための再利用可能なプロンプトを定義します。プロンプトファイルは、チャットで直接実行できるスタンドアロンのプロンプトです。これらは実行すべきタスク (what) を記述します。オプションで、タスクの実行方法に関するタスク固有のガイドラインを含めることも、プロンプトファイル内でカスタム命令を参照することもできます。プロンプトファイルを作成する方法を学びましょう。

    例のシナリオ
    • 新しいコンポーネント、API ルートのスキャフォールディング、テストの生成など、一般的なコーディングタスクのための再利用可能なプロンプトを作成します。
    • コード品質、セキュリティ脆弱性、パフォーマンス問題のチェックなど、コードレビューを実行するためのプロンプトを定義します。
    • 複雑なプロセスやプロジェクト固有のパターンに対するステップバイステップのガイドを作成します。
    • 実装計画、アーキテクチャ設計、移行戦略を生成するためのプロンプトを定義します。
  • カスタムチャットモード: チャットがどのように動作するか、どのツールを使用できるか、コードベースとどのように対話するかを定義します。各チャットプロンプトは、リクエストごとにツールと命令を設定することなく、チャットモードの境界内で実行されます。

    例のシナリオ
    • AI がコードベースに読み取り専用アクセスを持ち、実装計画のみを生成できる計画用のチャットモードを作成します。
    • AI が外部リソースにアクセスして新しいテクノロジーを探索したり、情報を収集したりできる研究チャットモードを定義します。
    • AI がフロントエンド開発に関連するコードのみを生成および変更できるフロントエンド開発者チャットモードを作成します。

カスタム指示

カスタム命令を使用すると、特定のコーディング規約や技術スタックに合致する応答を得るために、一般的なガイドラインやルールを記述できます。このコンテキストを各チャットクエリに手動で含める代わりに、カスタム命令はすべてのチャットリクエストにこの情報を自動的に組み込みます。

カスタム命令はコード補完には考慮されません。

カスタム命令の種類

VS Code はカスタム命令を定義する複数の方法をサポートしています。

カスタム命令の種類 説明
`.github/copilot-instructions.md` ファイル
  • コード生成の命令を Markdown で記述します。
  • すべての命令は単一のファイルにまとめられ、ワークスペース内に保存されます。
  • 命令はすべてのチャットリクエストに自動的に含まれます。
  • Copilot をサポートするすべてのエディターと IDE でサポートされます。
  • このファイルを使用して、すべてのコード生成タスクに適用される一般的なコーディング規約、推奨テクノロジー、およびプロジェクト要件を定義します。
`.instructions.md` ファイル
  • コード生成の命令を Markdown で記述します。
  • ワークスペースまたはユーザープロファイルに1つ以上の命令ファイルを作成します。
  • グロブパターンを使用して、すべてのリクエストまたは特定のファイルに命令を自動的に含めます。
  • VS Code でサポートされます。
  • タスク固有のコード生成命令を持ちたい場合、またはチャットプロンプトに命令を含めるタイミングをより細かく制御したい場合は、これらのファイルを使用します。
VS Code 設定
  • VS Code のユーザーまたはワークスペース設定で命令を指定します。
  • 設定値または1つ以上のファイルで命令を定義します。
  • VS Code でサポートされます。
  • コード生成、テスト生成、コミットメッセージ、コードレビュー、PR タイトルと説明の命令をサポートします。
  • このオプションを使用して、コード生成以外のタスクの命令を定義します。

これらのアプローチを組み合わせてカスタム命令を定義でき、命令はすべてチャットリクエストに含まれます。命令に特定の順序や優先順位は適用されないため、ファイル内で競合する命令を避けるようにしてください。

カスタム命令の例

以下の例は、カスタム命令の使用方法を示しています。

例: 一般的なコーディングガイドライン
---
applyTo: "**"
---
# Project general coding standards

## Naming Conventions
- Use PascalCase for component names, interfaces, and type aliases
- Use camelCase for variables, functions, and methods
- Prefix private class members with underscore (_)
- Use ALL_CAPS for constants

## Error Handling
- Use try/catch blocks for async operations
- Implement proper error boundaries in React components
- Always log errors with contextual information
例: TypeScript および React コーディングガイドライン

これらの命令が一般的なコーディングガイドラインファイルを参照していることに注目してください。命令を複数のファイルに分割することで、整理し、特定のトピックに集中させることができます。

---
applyTo: "**/*.ts,**/*.tsx"
---
# Project coding standards for TypeScript and React

Apply the [general coding guidelines](./general-coding.instructions.md) to all code.

## TypeScript Guidelines
- Use TypeScript for all new code
- Follow functional programming principles where possible
- Use interfaces for data structures and type definitions
- Prefer immutable data (const, readonly)
- Use optional chaining (?.) and nullish coalescing (??) operators

## React Guidelines
- Use functional components with hooks
- Follow the React hooks rules (no conditional hooks)
- Use React.FC type for components with children
- Keep components small and focused
- Use CSS modules for component styling

`.github/copilot-instructions.md` ファイルを使用する

カスタム命令をワークスペースまたはリポジトリの `.github/copilot-instructions.md` ファイルに保存し、Markdown を使用してコーディング規約、推奨テクノロジー、およびプロジェクト要件を記述できます。これらの命令は、ファイルが配置されているワークスペースにのみ適用されます。

VS Code は、`.github/copilot-instructions.md` ファイルからの命令をすべてのチャットリクエストに自動的に含め、コード生成に適用します。

`.github/copilot-instructions.md` ファイルを使用するには

  1. VS Code がすべてのチャットリクエストで `copilot-instructions.md` ファイルを自動的に使用するように指示するには、github.copilot.chat.codeGeneration.useInstructionFiles 設定を true に設定します。

  2. ワークスペースのルートに `.github/copilot-instructions.md` ファイルを作成します。必要に応じて、まず `.github` ディレクトリを作成してください。

  3. 命令を自然言語で Markdown 形式で記述します。

    命令間の空白は無視されるため、命令は1つの段落として、各行を新しい行にするか、読みやすさのために空白行で区切って記述できます。

Visual Studio および GitHub.com の GitHub Copilot も `.github/copilot-instructions.md` ファイルを検出します。VS Code と Visual Studio の両方で使用するワークスペースがある場合、同じファイルを使用して両方のエディターのカスタム命令を定義できます。

`.instructions.md` ファイルを使用する

特定のタスクのカスタム命令を保存するために、1つ以上の `.instructions.md` ファイルを作成することもできます。例えば、異なるプログラミング言語、フレームワーク、またはプロジェクトタイプごとに命令ファイルを作成できます。

VS Code は命令ファイルをすべてのチャットリクエストに自動的に追加できます。または、どのファイルに命令を自動適用するかを指定することもできます。あるいは、命令ファイルをチャットプロンプトに手動で添付することもできます。

VS Code は命令ファイルに2種類のスコープをサポートしています。

  • ワークスペース命令ファイル: ワークスペース内でのみ利用可能で、ワークスペースの `.github/instructions` フォルダーに保存されます。
  • ユーザー命令ファイル: 複数のワークスペースで利用可能で、現在のVS Code プロファイルに保存されます。

命令ファイルの構造

命令ファイルは、`.instructions.md` のファイル接尾辞を持つ Markdown ファイルです。命令ファイルは2つのセクションで構成されます。

  • (オプション) メタデータ付きヘッダー (Front Matter 構文)

    • `description`: 命令ファイルの簡単な説明。この説明は、チャットビューで命令ファイルにカーソルを合わせたときに表示されます。

    • `applyTo`: 命令が自動的に適用されるファイルのグロブパターンを指定します。カスタム命令を常に含めるには、`**` パターンを使用します。

      例えば、以下の命令ファイルは常に適用されます。

      ---
      applyTo: "**"
      ---
      Add a comment at the end of the file: 'Contains AI-generated edits.'
      
  • 命令内容を含む本文

    Markdown 書式を使用して、カスタム命令を自然言語で指定します。命令を構造化するために、見出し、リスト、コードブロックを使用できます。

    Markdown リンクを使用して、他の命令ファイルを参照できます。これらのファイルを参照するには相対パスを使用し、命令ファイルの場所に基づいてパスが正しいことを確認してください。

命令ファイルを作成する

命令ファイルはワークスペースまたはユーザープロファイルに作成できます。ワークスペース命令ファイルはワークスペース内でのみ利用可能ですが、ユーザー命令ファイルは複数のワークスペースで利用可能です。

命令ファイルを作成するには

  1. チャットビューでチャットの設定ボタンを選択し、命令を選択し、次に新しい命令ファイルを選択します。

    Screenshot showing the Chat view, and Configure Chat menu, highlighting the Configure Chat button.

    または、コマンドパレット (⇧⌘P (Windows、Linux Ctrl+Shift+P)) からチャット: 新しい命令ファイルコマンドを使用します。

  2. 命令ファイルを作成する場所を選択します。

    • ワークスペース: 既定では、ワークスペース命令ファイルはワークスペースの .github/instructions フォルダーに保存されます。chat.instructionsFilesLocations 設定で、ワークスペースに命令フォルダーを追加できます。

    • ユーザープロファイル: ユーザー命令ファイルは、現在のプロファイルフォルダーに保存されます。設定の同期を使用して、ユーザー命令ファイルを複数のデバイス間で同期できます。

  3. 命令ファイルの名前を入力します。

  4. Markdown 書式を使用してカスタム命令を作成します。

    ヘッダーで applyTo メタデータプロパティを指定して、命令が自動的に適用されるタイミングを設定します。例えば、applyTo: "**/*.ts,**/*.tsx" を指定すると、TypeScript ファイルにのみ命令が適用されます。

    追加のワークスペースファイルを参照するには、命令ファイル内で Markdown リンク ([index](../index.ts)) または # 参照 (#index.ts) を使用します。

既存の命令ファイルを変更するには、チャットビューでチャットの設定ボタンを選択し、命令を選択し、リストから命令ファイルを選択します。または、コマンドパレット (⇧⌘P (Windows、Linux Ctrl+Shift+P)) からチャット: 命令の設定コマンドを使用し、クイックピックから命令ファイルを選択します。

チャットで命令ファイルを使用する

命令ファイルで applyTo メタデータプロパティを指定した場合、VS Code はグロブパターンに一致するすべてのファイルに命令を自動的に適用します。

命令ファイルをチャットプロンプトに手動で添付するには

  • チャットビューで、コンテキストの追加 > 命令を選択し、クイックピックから命令ファイルを選択します。

  • コマンドパレット (⇧⌘P (Windows、Linux Ctrl+Shift+P)) からチャット: 命令の添付コマンドを実行し、クイックピックから命令ファイルを選択します。

設定でカスタム命令を指定する

特殊なシナリオのカスタム命令は、ユーザーまたはワークスペース設定で構成できます。

命令の種類 設定名
コードレビュー github.copilot.chat.reviewSelection.instructions
コミットメッセージの生成 github.copilot.chat.commitMessageGeneration.instructions
プルリクエストのタイトルと説明の生成 github.copilot.chat.pullRequestDescriptionGeneration.instructions
コード生成 (非推奨)* github.copilot.chat.codeGeneration.instructions
テスト生成 (非推奨)* github.copilot.chat.testGeneration.instructions

* codeGeneration および testGeneration 設定は、VS Code 1.102 で非推奨になりました。代わりに命令ファイル (.github/copilot-instructions.md または *.instructions.md) の使用を推奨します。

カスタム命令は、設定値のテキスト (text プロパティ) として定義するか、ワークスペース内の外部ファイル (file プロパティ) を参照することができます。

以下のコードスニペットは、settings.json ファイルで一連の命令を定義する方法を示しています。

    "github.copilot.chat.pullRequestDescriptionGeneration.instructions": [
        { "text": "Always include a list of key changes." },
    "github.copilot.chat.reviewSelection.instructions": [
        { "file": "guidance/backend-review-guidelines.md" },
        { "file": "guidance/frontend-review-guidelines.md" }
  ]

ワークスペースの命令ファイルを生成する

VS Code はワークスペースを分析し、コーディング規約やプロジェクト要件に合致するカスタム命令を含む `.github/copilot-instructions.md` ファイルを生成できます。

ワークスペースの命令ファイルを生成するには

  1. チャットビューでチャットの設定ボタンを選択し、命令を選択します。

  2. クイックピックから命令を生成を選択します。

  3. 生成された命令ファイルを確認し、必要に応じて編集します。

カスタム命令を定義するためのヒント

  • 命令は短く、自己完結型にしてください。各命令は単一のシンプルな文であるべきです。複数の情報を提供する必要がある場合は、複数の命令を使用してください。

  • 特定のコーディング規約など、外部リソースを命令内で参照しないでください。

  • 命令を複数のファイルに分割します。このアプローチは、トピックやタスクの種類ごとに命令を整理するのに役立ちます。

  • 命令を命令ファイルに保存することで、カスタム命令をチームやプロジェクト間で簡単に共有できます。ファイルのバージョン管理を行い、時間の経過に伴う変更を追跡することもできます。

  • 命令ファイルのヘッダーにある applyTo プロパティを使用して、特定のファイルまたはフォルダーに命令を自動的に適用します。

  • プロンプトファイルをきれいに保ち、焦点を絞り、異なるタスクの命令の重複を避けるために、プロンプトファイル内でカスタム命令を参照します。

プロンプトファイル (試験段階)

プロンプトファイルは、コード生成やコードレビューの実行などの一般的なタスクのための再利用可能なプロンプトです。プロンプトの内容は Markdown ファイルで定義します。プロンプトファイルは、チャットで直接実行できるスタンドアロンのプロンプトです。オプションで、タスクの実行方法に関するガイドラインを含めることもできます。

ヒント

プロンプトファイルは、命令ファイルを利用して一般的なガイドラインを再利用し、タスク固有の命令をプロンプトに含めることができます。例えば、セキュリティレビューのプロンプトファイルは、一般的なセキュリティプラクティスを記述するカスタム命令を参照しつつ、レビューの発見事項を報告する方法に関する具体的な命令を含めることができます。

VS Code はプロンプトファイルに2種類のスコープをサポートしています。

  • ワークスペースプロンプトファイル: ワークスペース内でのみ利用可能で、ワークスペースの .github/prompts フォルダーに保存されます。
  • ユーザープロンプトファイル: 複数のワークスペースで利用可能で、現在のVS Code プロファイルに保存されます。

プロンプトファイルの例

以下の例は、プロンプトファイルの使用方法を示しています。

例: React フォームコンポーネントを生成する
---
mode: 'agent'
model: GPT-4o
tools: ['githubRepo', 'codebase']
description: 'Generate a new React form component'
---
Your goal is to generate a new React form component based on the templates in #githubRepo contoso/react-templates.

Ask for the form name and fields if not provided.

Requirements for the form:
* Use form design system components: [design-system/Form.md](../docs/design-system/Form.md)
* Use `react-hook-form` for form state management:
* Always define TypeScript types for your form data
* Prefer *uncontrolled* components using register
* Use `defaultValues` to prevent unnecessary rerenders
* Use `yup` for validation:
* Create reusable validation schemas in separate files
* Use TypeScript types to ensure type safety
* Customize UX-friendly validation rules
例: REST API のセキュリティレビューを実行する
---
mode: 'ask'
model: Claude Sonnet 4
description: 'Perform a REST API security review'
---
Perform a REST API security review and provide a TODO list of security issues to address.

* Ensure all endpoints are protected by authentication and authorization
* Validate all user inputs and sanitize data
* Implement rate limiting and throttling
* Implement logging and monitoring for security events

Return the TODO list in a Markdown format, grouped by priority and issue type.

プロンプトファイルの構造

プロンプトファイルは、`.prompt.md` のファイル接尾辞を持つ Markdown ファイルです。以下の2つの主要なセクションがあります。

  • (オプション) メタデータ付きヘッダー (Front Matter 構文)

    • `mode`: プロンプトを実行する際に使用するチャットモード: askedit、または agent (既定)。
    • `model`: プロンプトを実行する際に使用する AI モデル。指定されていない場合、モデルピッカーで現在選択されているモデルが使用されます。
    • `tools`: エージェントモードで使用できるツール (セット) を示すツール (セット) 名の配列。ワークスペースで利用可能なツールのリストからツールを選択するには、ツールの設定を選択します。指定されたツール (セット) がプロンプトの実行時に利用できない場合、それは無視されます。
    • `description`: プロンプトの簡単な説明。
  • プロンプト内容を含む本文

    プロンプトファイルは、チャットでプロンプトを記述する形式を模倣しています。これにより、自然言語の命令、追加のコンテキスト、さらには他のプロンプトファイルへの依存関係としてのリンクを組み合わせることができます。見出し、リスト、コードブロックなど、Markdown 書式を使用してプロンプトコンテンツを構造化できます。

Markdown リンクを使用して、他のワークスペースファイル、プロンプトファイル、または命令ファイルを参照できます。これらのファイルを参照するには相対パスを使用し、プロンプトファイルの場所に基づいてパスが正しいことを確認してください。

プロンプトファイル内では、${variableName} 構文を使用して変数を参照できます。以下の変数を参照できます。

  • ワークスペース変数 - ${workspaceFolder}${workspaceFolderBasename}
  • 選択変数 - ${selection}${selectedText}
  • ファイルコンテキスト変数 - ${file}${fileBasename}${fileDirname}${fileBasenameNoExtension}
  • 入力変数 - ${input:variableName}${input:variableName:placeholder} (チャット入力フィールドからプロンプトに値を渡す)

プロンプトファイルを作成する

プロンプトファイルはワークスペースまたはユーザープロファイルに作成できます。ワークスペースプロンプトファイルはワークスペース内でのみ利用可能ですが、ユーザープロンプトファイルは複数のワークスペースで利用可能です。

プロンプトファイルを作成するには

  1. チャットビューでチャットの設定ボタンを選択し、プロンプトファイルを選択し、次に新しいプロンプトファイルを選択します。

    Screenshot showing the Chat view, and Configure Chat menu, highlighting the Configure Chat button.

    または、コマンドパレット (⇧⌘P (Windows、Linux Ctrl+Shift+P)) からチャット: 新しいプロンプトファイルコマンドを使用します。

  2. プロンプトファイルを作成する場所を選択します。

    • ワークスペース: 既定では、ワークスペースプロンプトファイルはワークスペースの .github/prompts フォルダーに保存されます。chat.promptFilesLocations 設定で、ワークスペースにプロンプトフォルダーを追加できます。

    • ユーザープロファイル: ユーザープロンプトファイルは、現在のプロファイルフォルダーに保存されます。設定の同期を使用して、ユーザープロンプトファイルを複数のデバイス間で同期できます。

  3. プロンプトファイルの名前を入力します。

    あるいは、ワークスペースのプロンプトフォルダーに直接 `.prompt.md` ファイルを作成することもできます。

  4. Markdown 書式を使用してチャットプロンプトを作成します。

    プロンプトファイル内では、追加のワークスペースファイルを Markdown リンク ([index](../index.ts)) として、またはプロンプトファイル内で #index.ts 参照として参照できます。

    他の `.prompt.md` ファイルを参照して、プロンプトの階層を作成することもできます。同じ方法で命令ファイルも参照できます。

既存のプロンプトファイルを変更するには、チャットビューでチャットの設定ボタンを選択し、プロンプトファイルを選択し、リストからプロンプトファイルを選択します。または、コマンドパレット (⇧⌘P (Windows、Linux Ctrl+Shift+P)) からチャット: プロンプトファイルの設定コマンドを使用し、クイックピックからプロンプトファイルを選択します。

チャットでプロンプトファイルを使用する

プロンプトファイルを実行するには複数のオプションがあります。

  • コマンドパレット (⇧⌘P (Windows、Linux Ctrl+Shift+P)) からチャット: プロンプトの実行コマンドを実行し、クイックピックからプロンプトファイルを選択します。

  • チャットビューで、チャット入力フィールドに / と続けてプロンプトファイル名を入力します。

    このオプションを使用すると、チャット入力フィールドに追加情報を渡すことができます。例えば、/create-react-form/create-react-form: formName=MyForm などです。

  • エディターでプロンプトファイルを開き、エディターのタイトル領域にある再生ボタンを押します。現在のチャットセッションでプロンプトを実行するか、新しいチャットセッションを開くかを選択できます。

    このオプションは、プロンプトファイルを迅速にテストし、反復処理するのに便利です。

ユーザープロンプトファイルをデバイス間で同期する

VS Code は、設定の同期を使用して、ユーザープロンプトファイルを複数のデバイス間で同期できます。

ユーザープロンプトファイルを同期するには、プロンプトファイルと命令ファイルの設定の同期を有効にします。

  1. 設定の同期が有効になっていることを確認してください。

  2. コマンドパレット (⇧⌘P (Windows、Linux Ctrl+Shift+P)) から設定の同期: 構成を実行します。

  3. 同期する設定のリストからプロンプトと命令を選択します。

VS Code で命令ファイルとプロンプトファイルを一元的に管理する

chat.promptFiles 設定で、VS Code の命令ファイルとプロンプトファイルを有効または無効にします。

デバイス管理を使用して組織内でこの設定を一元的に有効または無効にするには、エンタープライズドキュメントのVS Code 設定の一元管理を確認してください。

設定

カスタム命令の設定
プロンプトファイルの設定
  • chat.promptFiles (試験段階): 再利用可能なプロンプトファイルと命令ファイルのサポートを有効にします。

  • chat.promptFilesLocations (試験段階): プロンプトファイルが配置されているフォルダーの辞書と、それらが有効になっているかどうかを示すブール値。相対パスは、ワークスペースのルートフォルダーから解決されます。ファイルパスのグロブパターンをサポートします。既定では、プロンプトファイルはワークスペースの .github/prompts フォルダーに配置されます。

    "chat.promptFilesLocations": {
        ".github/prompts": false,
        "setup/**/prompts": true
    }