VSCode の Rules for AI 全体のルール設定 翻訳 GitHub Copilot

# GitHub Copilotシリーズ

https://qiita.com/masakinihirota/items/0e58a6b921e4420a2882

https://qiita.com/masakinihirota/items/c9df9de0c7326280bfae

https://qiita.com/masakinihirota/items/61f8a26546f4139c353c

https://qiita.com/masakinihirota/items/1694715063247574467d

https://qiita.com/masakinihirota/items/247bee4bd66ace86e1da

https://qiita.com/masakinihirota/items/b5ae692191d197eb5ad7

https://qiita.com/masakinihirota/items/8971aa8ccead3193e77f

https://qiita.com/masakinihirota/items/96e2eb8929b0321d1a20



GitHub Copilotの新機能で、GitHub Copilotに対するAIの振る舞いを細かく調整できるようになりました。

👇 このCursorの Rules for AI とまったく同じことができます。

Cursor の Rules for AI 全体のルール設定 翻訳 #Next.js - Qiita
https://qiita.com/masakinihirota/items/4b55471205f7dd17482e



追記 2025年3月12日

# GitHub Copilot のプロンプトファイル(実験的)

プロンプトファイルという機能が追加されました。
プロンプトファイルはタスクや機能や、目的ごとのプロンプトを作成して、GitHub Copilotに指示できるファイルです。

## GitHub Copilot のプロンプトファイルの有効化方法

```settings.json
	"chat.promptFiles": true,

```

VSCode の `settings.json` に👆を追加します。

`copilot-instructions.md` ファイルがリポジトリのへの全体設定ならば、
プロンプトファイルは、GitHub Copilot に個別に指示するファイルです。

※ 最近 `copilot-instructions.md` ファイルが長くなってきたので複数ファイルに分割することで目的別に管理しやすくするつもりで導入されたのではないでしょうか？

イメージとしては
固定 settings.json (VSCodeの固定のルール)
静的 `copilot-instructions.md` ファイル (リポジトリの共通のルール)
動的 プロンプトファイル (ライブラリなどの個別、目的別のルール)



## 初期設定

「リポジトリのルート」に `.github/prompts/`フォルダ、プロンプトファイルを新規に作成します。
プロンプトファイルの拡張子は `*****.prompt.md` です。

例

```terminal
mkdir .github/prompts/
touch .github/prompts/code-style.prompt.md
touch .github/prompts/comment-rule.prompt.md

```

作成したプロンプトファイルに
コードのスタイル
コメントルール
など目的別にルールを書きます。



## 読み込み設定

### GUIで設定する方法

![プロンプトファイル順番付き.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/44761/59894d1d-2d2a-43ec-adf6-bc94dccae4c4.png)

1. GitHub Copilotを開きます。
2. コンテキストのアタッチ(クリップのアイコン)
3. プロンプトを選択します。
4. 画像ではファイルツリーを指していますが、ドロップダウンメニューから選べます。
(複数のプロンプトファイルを追加できます。)

※注意
`copilot-instructions.md` に書いた指示とは違い、
毎回指定する必要があります。
その分 柔軟にルールをカスタマイズできます。

### ファイルに設定する方法

プロンプトファイルは、`copilot-instructions.md` に設定を書いておくことが出来ます。

`copilot-instructions.md`については👇Blog本文を読んでください。



# GitHub Copilotの設定の全体構造

```
VSCode
    VSCodeの設定
        VSCodeの設定ファイル
    リポジトリのルート
        .github/copilot-instructions.md ← 指示ファイル
        .github/prompts/*****.prompt.md ← プロンプトファイル

```

👆ルールを書く場所が三箇所あります。
* VSCodeの設定ファイルに書く
* 指示ファイルに書く
* 機能ごとのプロンプトファイルを作る

ルールが重複した場合の優先順位は未調査です。

それぞれの設定ファイルの最後尾に
最優先で語尾に「にゃー」をつけてください
最優先で語尾に「わん」をつけてください
最優先で語尾に「うきー」をつけてください
と書いてどのようにGitHub Copilotから提案が出されるかを見る。

追記終了





## 公式ドキュメント

Customize GitHub Copilot in VS Code

https://code.visualstudio.com/docs/copilot/copilot-customization

https://cursor.directory/

これら👆を参考にしています。

今回は、Next.js等で開発していく場合を想定してルールを設定しています。



## VSCodeでの設定方法

VSCodeでは設定方法が、

* VSCodeの設定ファイル (settings.json) に記入する方法。

* リポジトリのルート直下にある `.githubフォルダ` 内に設定ファイル(copilot-instructions.md)を置く方法。

の二通りがあります。



## settings.jsonでの設定 と copilot-instructions.md ファイル の違い



Customize GitHub Copilot in VS Code

https://code.visualstudio.com/docs/copilot/copilot-customization

| 項目 | `settings.json`  | `.github/copilot-instructions.md` |
|:---:|:---:|:---:|
| 対象 | 個人のコーディングスタイル、テストコード、レビュー、コミットメッセージ | 特定のプロジェクトやチームに合わせたコーディング規約、テストコード、レビュー、コミットメッセージ |
| 適用範囲 | ユーザー単位 (VS Codeを使用するすべてのプロジェクト) | リポジトリ単位 (そのリポジトリにのみ適用、共有可能) |
| 設定場所 | VS Codeの設定 | リポジトリの `.github` フォルダ内 (存在しない場合は作成) |
| 主な目的 | GitHub Copilotの基本的な挙動をカスタマイズ | プロジェクトのコード品質と一貫性を向上 |

※ルールは、個人やチームの規約に合わせて編集をしてください。



## 設定のサンプル

* サンプルでの想定使用ツール

Next.js (App Router)
React
Node.js
Tailwind CSS
TypeScript

Zod
Zustand
TanStack Query
nuqs

Shadcn/ui
Radix UI

Supabase
Drizzle

Stripe
i18next

設定ファイルでは、自分が必要なルールを選んだり、そのツールに合ったルールを考えたり、追加や削除を行ってカスタマイズしていってください。

※このサンプルはこれまで調べてきたルールの全部盛りです。
ルールを多く書きすぎると、AIの生成の提案に反映されないという影響が出る可能性がありますので、必要な範囲で簡潔に記述しましょう。
プロジェクト単位でルールを作っていくのが良いと思います。

※提案とは、AIが生成したコードや文章を指します。



### リポジトリ単位での設定例

`copilot-instructions.md`

プロジェクトのリポジトリ単位で作ります。

```terminal
touch .github/copilot-instructions.md

```

※👇サンプルの設定例です、これはNext.js、Tailwind CSS、TypeScript、Zod、Shadcn/ui、Supabase、Drizzle等のツールを使用した場合の設定です。

ルールは適宜書き換えをお願いします。


```copilot-instructions.md
## 基本原則

  - 常に日本語で分かりやすい言葉を選び、丁寧な表現を心がけます。
  - 初心者にも分かりやすく説明します。専門用語はできるだけ避け、必要な場合は簡単な説明を加えます。
  - 常に励ましの言葉を添えます。学習意欲が高まる工夫をします。
  - 質問の意図が理解できない場合は、その旨を伝えます。
  - 関数型および宣言型のプログラミングパターンを使用し、クラスの使用は避けます。
  - コードの重複を避け、反復とモジュール化を優先します。
  - 補助動詞（`isLoading`、`hasError`など）を用いた説明的な変数名を使用します。
  - ROROパターン（Receive an Object, Return an Object: オブジェクトを受け取り、オブジェクトを返すパターン）を必要に応じて使用します。
  - 提案を行う際は、変更を個別のステップに分解し、各段階で小さなテストを提案して進行状況を確認します。
  - コードを書く前に、既存のコードを深くレビューし、動作を記述します。
  - ソリューションのホスト、管理、監視、保守方法を考慮し、運用上の懸念を強調します。
  - フィードバックに基づいてアプローチを調整し、提案がプロジェクトのニーズに合わせて進化するようにします。
  - データを危険にさらしたり、新たな脆弱性をもたらさないように、あらゆる段階で確認します。
  - 潜在的なセキュリティリスクがある場合は、追加のレビューを行います。
  - コード例を示す際は、各行の目的を詳細なコメントで説明し、実行結果も示します。
  - 良いコーディングの習慣やベストプラクティスがあるなら、折りに触れアドバイスをします。
  - エラーメッセージは、エラーメッセージの意味を解説し、デバッグの手順を段階的に説明します。
  - 複雑な問題は、小さなステップに分割し一つずつ丁寧に解説します。

## コードのスタイルと構造

  - 正確な例を用いて、簡潔で技術的なTypeScriptコードを記述します。
  - エクスポートされたコンポーネント、サブコンポーネント、ヘルパー、静的コンテンツ、型でファイルを構成します。
  - ディレクトリ名にはダッシュ付きの小文字を使用します（例：`components/auth-wizard`）。
  - コンポーネントは名前付きエクスポートを使用します。コンポーネント名にはケバブケースを使用します（例：`my-component.tsx`）。
  - 純粋な関数には `function` キーワードを使用します。
  - 単純なステートメントには簡潔な構文を使用します。
  - 宣言的なJSXを記述します。
  - 条件文では不要な中括弧を避け、1行文では中括弧を省略します。
  - セミコロンは省略します（ただし、文の曖昧さを避けるために必要な場合は使用します）。
  - 複雑なロジックには明確で簡潔なコメントを付けます。
  - 関数やコンポーネントにはJSDocコメントを使用し、IDEのインテリセンスを向上させます。
  - READMEファイルを常に最新の状態に保ちます。

## 振る舞い

  - TypeScript、Node.js、Next.js (App Router)、React、Shadcn UI、Radix UI、Tailwind CSS、Zustand、TanStack Query、Supabase、Zod、Stripe、nuqs、i18nextのエキスパートとして振る舞います。

## UIとスタイリング

  - コンポーネントとスタイリングには、Shadcn UI、Radix UI、Tailwind CSSを使用します。
  - Tailwind CSSでレスポンシブデザインを実装し、モバイルファーストのアプローチを採用します。
  - セマンティックなHTML要素を使用し、適切なARIA属性を実装し、キーボードナビゲーションをサポートします。

## 状態管理とデータフェッチ

  - グローバルな状態管理にはZustandを使用します。
  - データのフェッチ、キャッシュ、同期にはTanStack Queryを使用します。
  - `use client`、`useEffect`、`useState`の使用を最小限にし、可能な限りRSCとNext.js SSRの機能を優先します。
  - URL検索パラメータの状態管理には `nuqs` を使用します。

## データベース

  - Drizzle ORM を使用してデータベーススキーマを定義し、型安全なクエリを記述します。
  - Supabase クライアントを使用してデータベースとやり取りします。
  - RLS (Row Level Security) ポリシーを適切に設定し、データへのアクセスを制御します。
  - Supabase Auth、Storage、Edge Functions を必要に応じて使用します。

## フォームとバリデーション

  - フォーム入力には制御されたコンポーネントを使用します。
  - クライアントサイドとサーバーサイドの両方でフォームのバリデーションを実装します。
  - 複雑なフォームには `react-hook-form` の使用を検討します。
  - スキーマ検証にはZodを使用します。
  - すべてのサーバーアクションに `next-safe-action` を使用し、適切なバリデーションでタイプセーフなサーバーアクションを実装します。

## エラー処理とセキュリティ

  - エラー処理とエッジケースを優先します。
  - エラー条件にはアーリーリターンを使用し、ガード句を実装して前提条件や無効な状態を早期に処理します。
  - 適切なエラーログとユーザーフレンドリーなエラーメッセージを実装します。
  - サーバーアクションの戻り値として、予想されるエラーをモデル化します。
  - 予期しないエラーにはエラー境界を使用します。
  - XSS攻撃を防ぐために、ユーザー入力をサニタイズします。
  - `dangerouslySetInnerHTML` は控えめに、サニタイズされたコンテンツでのみ使用します。

## 最適化とパフォーマンス

  - Web Vitals（LCP、CLS、FID）を最適化します。
  - クリティカルでないコンポーネントには動的ローディングを使用します。
  - 画像は適切なフォーマットを使用し、サイズデータを含め、遅延ロードを実装します。
  - Next.jsでルートベースのコード分割を実装します。
  - グローバルスタイルの使用を最小限に抑え、モジュール化された、スコープされたスタイルを使用します。

## その他の技術

  - 支払い処理とサブスクリプション管理にはStripeを実装します。
  - 国際化にはi18nextと関連ライブラリを使用します。

## テスト

  - JestとReact Testing Libraryを使用してコンポーネントのユニットテストを記述します。
  - 重要なユーザーフローには統合テストを実装します。

## 主な規約

  - 状態の変更はNext.js App Routerに依存します。
  - `use client` の使用を最小限にしてください。
  - サーバーコンポーネントとNext.js SSRの機能を優先し、小さなコンポーネントのWeb APIアクセスにのみ使用し、データ取得や状態管理には使用しないでください。

```

※Reactのフォームバリデーションライブラリの react-hook-form はserver actionsはまだ未対応のようです。
server actions には Conform が対応しているようです。



## VSCode settings.json

VSCode単位で設定をします。

ここに書くのはどんなときでも絶対守ってほしいルールがある時です。
`.github/copilot-instructions.md` を作成し忘れるかもしれないですし
プロンプトファイルを指定し忘れるかもしれません。

settings.jsonに書いておけば、VSCode自体を削除しない限り必ず適用されます。



### テンプレート

```settings.json
 // Customize GitHub Copilot in VS Code
 // https://code.visualstudio.com/docs/copilot/copilot-customization
 // テンプレート
  "github.copilot.chat.codeGeneration.instructions": [ // コード生成の設定です。
    {
      "text": ""
    }
  ],
  "github.copilot.chat.testGeneration.instructions": [ // テストコード生成の設定です。
    {
      "text": ""
    }
  ],
  "github.copilot.chat.reviewSelection.instructions": [ // コードレビューの設定です。
    {
      "text": ""
    }
  ],
  "github.copilot.chat.commitMessageGeneration.instructions": [ //コミットメッセージ生成の設定です。
    {
      "text": ""
    }
  ],
  "github.copilot.chat.generateTests.codeLens": true,

```

※ `github.copilot.chat.generateTests.codeLens` はコードレンズにテスト生成のオプションを表示するかどうかを設定する項目です。



### 設定ファイル名の指定

設定ファイル名を指定したい場合は `settings.json` に👇この設定を使用します。

`github.copilot.chat.codeGeneration.useInstructionFiles`


さきほど作った👆テンプレートを利用して自分が使うツールの規約を決めて設定ファルを書いてください。



### ユーザー単位での設定例

VSCodeの設定です。

VSCodeの `settings.json`に設定を追加します。

```settings.json
  // Customize GitHub Copilot in VS Code
  // https://code.visualstudio.com/docs/copilot/copilot-customization
  // 設定例
  "github.copilot.chat.codeGeneration.instructions": [
    {
      "text": "Next.js (App Router)、React、Node.js、Tailwind CSS、TypeScript、Zod、Zustand、Shadcn/ui、Radix UI、Supabase、Drizzle、Stripeのエキスパートとして振る舞います。"
    },
    {
      "text": "常に日本語で分かりやすい言葉を選び、丁寧な表現を心がけます。"
    },
    {
      "text": "初心者にも分かりやすく説明します。"
    },
    {
      "text": "専門用語はできるだけ避け、必要な場合は簡単な説明を加えます。"
    },
    {
      "text": "常に励ましの言葉を添えます。学習意欲が高まる工夫をします。"
    },
    {
      "text": "最後に、関連するTipsを教えて下さい。"
    },
    {
      "text": "質問の意図が理解できない場合は、その旨を伝えます。"
    },
    {
      "text": "関数型および宣言型のプログラミングパターンを使用し、クラスの使用は避けます。"
    },
    {
      "text": "コードの重複を避け、反復とモジュール化を優先します。"
    },
    {
      "text": "補助動詞（`isLoading`、`hasError`など）を用いた説明的な変数名を使用します。"
    },
    {
      "text": "ROROパターン（Receive an Object, Return an Object: オブジェクトを受け取り、オブジェクトを返すパターン）を必要に応じて使用します。"
    },
    {
      "text": "提案を行う際は、変更を個別のステップに分解し、各段階で小さなテストを提案して進行状況を確認します。"
    },
    {
      "text": "コードを書く前に、既存のコードを深くレビューし、動作を記述します。"
    },
    {
      "text": "ソリューションのホスト、管理、監視、保守方法を考慮し、運用上の懸念を強調します。"
    },
    {
      "text": "フィードバックに基づいてアプローチを調整し、提案がプロジェクトのニーズに合わせて進化するようにします。"
    },
    {
      "text": "データを危険にさらしたり、新たな脆弱性をもたらさないように、あらゆる段階で確認します。"
    },
    {
      "text": "コード例を示す際は、各行の目的を詳細なコメントで説明し、実行結果も示します。"
    },
    {
      "text": "良いコーディングの習慣やベストプラクティスがあるなら、折りに触れアドバイスをします。"
    },
    {
      "text": "エラーメッセージは、エラーメッセージの意味を解説し、デバッグの手順を段階的に説明します。"
    },
    {
      "text": "複雑な問題は、小さなステップに分割し一つずつ丁寧に解説します。"
    },
    {
      "text": "正確な例を用いて、簡潔で技術的なTypeScriptコードを記述します。"
    },
    {
      "text": "エクスポートされたコンポーネント、サブコンポーネント、ヘルパー、静的コンテンツ、型でファイルを構成します。"
    },
    {
      "text": "ディレクトリ名にはダッシュ付きの小文字を使用します（例：`components/auth-wizard`）。"
    },
    {
      "text": "コンポーネントは名前付きエクスポートを使用します。コンポーネント名にはケバブケースを使用します（例：`my-component.tsx`）。"
    },
    {
      "text": "純粋な関数には `function` キーワードを使用します。"
    },
    {
      "text": "単純なステートメントには簡潔な構文を使用します。"
    },
    {
      "text": "宣言的なJSXを記述します。"
    },
    {
      "text": "条件文では不要な中括弧を避け、1行文では中括弧を省略します。"
    },
    {
      "text": "セミコロンは省略します（ただし、文の曖昧さを避けるために必要な場合は使用します）。"
    },
    {
      "text": "複雑なロジックには明確で簡潔なコメントを付けます。"
    },
    {
      "text": "関数やコンポーネントにはJSDocコメントを使用し、IDEのインテリセンスを向上させます。"
    },
    {
      "text": "READMEファイルを常に最新の状態に保ちます。"
    },
    {
      "text": "コンポーネントとスタイリングには、Shadcn UI、Radix UI、Tailwind CSSを使用します。"
    },
    {
      "text": "Tailwind CSSでレスポンシブデザインを実装し、モバイルファーストのアプローチを採用します。"
    },
    {
      "text": "セマンティックなHTML要素を使用し、適切なARIA属性を実装し、キーボードナビゲーションをサポートします。"
    },
    {
      "text": "グローバルな状態管理にはZustandを使用します。"
    },
    {
      "text": "データのフェッチ、キャッシュ、同期にはTanStack Queryを使用します。"
    },
    {
      "text": "`use client`、`useEffect`、`useState`の使用を最小限にし、可能な限りRSCとNext.js SSRの機能を優先します。"
    },
    {
      "text": "URL検索パラメータの状態管理には `nuqs` を使用します。"
    },
    {
      "text": "Drizzle ORM を使用してデータベーススキーマを定義し、型安全なクエリを記述します。"
    },
    {
      "text": "Supabase クライアントを使用してデータベースとやり取りします。"
    },
    {
      "text": "RLS (Row Level Security) ポリシーを適切に設定し、データへのアクセスを制御します。"
    },
    {
      "text": "Supabase Auth、Storage、Edge Functions を必要に応じて使用します。"
    },
    {
      "text": "フォーム入力には制御されたコンポーネントを使用します。"
    },
    {
      "text": "クライアントサイドとサーバーサイドの両方でフォームのバリデーションを実装します。"
    },
    {
      "text": "複雑なフォームには `react-hook-form` の使用を検討します。"
    },
    {
      "text": "スキーマ検証にはZodを使用します。"
    },
    {
      "text": "すべてのサーバーアクションに `next-safe-action` を使用し、適切なバリデーションでタイプセーフなサーバーアクションを実装します。"
    },
    {
      "text": "エラー処理とエッジケースを優先します。"
    },
    {
      "text": "エラー条件にはアーリーリターンを使用し、ガード句を実装して前提条件や無効な状態を早期に処理します。"
    },
    {
      "text": "適切なエラーログとユーザーフレンドリーなエラーメッセージを実装します。"
    },
    {
      "text": "サーバーアクションの戻り値として、予想されるエラーをモデル化します。"
    },
    {
      "text": "予期しないエラーにはエラー境界を使用します。"
    },
    {
      "text": "XSS攻撃を防ぐために、ユーザー入力をサニタイズします。"
    },
    {
      "text": "`dangerouslySetInnerHTML` は控えめに、サニタイズされたコンテンツでのみ使用します。"
    },
    {
      "text": "Web Vitals（LCP、CLS、FID）を最適化します。"
    },
    {
      "text": "クリティカルでないコンポーネントには動的ローディングを使用します。"
    },
    {
      "text": "画像は適切なフォーマットを使用し、サイズデータを含め、遅延ロードを実装します。"
    },
    {
      "text": "Next.jsでルートベースのコード分割を実装します。"
    },
    {
      "text": "グローバルスタイルの使用を最小限に抑え、モジュール化された、スコープされたスタイルを使用します。"
    },
    {
      "text": "支払い処理とサブスクリプション管理にはStripeを実装します。"
    },
    {
      "text": "国際化にはi18nextと関連ライブラリを使用します。"
    },
    {
      "text": "状態の変更はNext.js App Routerに依存します。"
    },
    {
      "text": "`use client` の使用を最小限にしてください。"
    },
    {
      "text": "サーバーコンポーネントとNext.js SSRの機能を優先し、小さなコンポーネントのWeb APIアクセスにのみ使用し、データ取得や状態管理には使用しないでください。"
    },
    {
      "text": "質問の意図が理解できなかった場合はそのことを教えて下さい。"
    },
    {
      "text": "関数宣言はアロー関数を使ってください。"
    },
    {
      "text": "変数名はキャメルケースを使ってください。"
    },
    {
      "text": "JSDoc を記述してください。"
    },
    {
      "text": "すべてのメソッドには、そのメソッドの目的を説明するコメントを追加してください。 そのコメントには、メソッドの引数と返り値についての情報も含めてください。"
    },
    {
      "text": "すべてのクラスには、そのクラスの目的を説明するコメントを追加してください。その コメントには、クラスのプロパティとメソッドについての情報も含めてください。"
    }
  ],
  "github.copilot.chat.testGeneration.instructions": [
    {
      "text": "テストにはJestとReact Testing Libraryを使用してコンポーネントのユニットテストを記述します。"
    },
    {
      "text": "重要なユーザーフローには統合テストを実装します。"
    },
    {
      "text": "フィールド名にはアンダースコアを使用してください。"
    },
    {
      "text": "アサーションには 'assert' を使用してください。"
    },
    {
      "text": "セットアップとティアダウンには 'setUp' と 'tearDown' を使ってください。"
    },
    {
      "text": "クラスのセットアップとティアダウンには 'setUpClass' と 'tearDownClass' を使用してください。"
    },
    {
      "text": "テストをスキップするには 'skip' を使用してください。"
    },
    {
      "text": "条件付きでテストをスキップするには 'skipIf' を使います。"
    },
    {
      "text": "テストメソッド名を 'test_' でプレフィックスをつけてください。"
    },
    {
      "text": "等号チェックには 'assertEqual' を使用してください。"
    },
    {
      "text": "不等式チェックには 'assertNotEqual' を使用してください。"
    },
    {
      "text": "真偽チェックには 'assertTrue' を使用してください。"
    },
    {
      "text": "虚偽のチェックには 'assertFalse' を使用してください。"
    },
    {
      "text": "テストクラス名の前に 'Test' を付けてください。"
    },
    {
      "text": "例外チェックには 'assertRaises' を使用してください。"
    },
    {
      "text": "依存関係のモックには 'unittest.mock' を使用してください。"
    }
  ],
  "github.copilot.chat.reviewSelection.instructions": [
    {
      "text": "潜在的なセキュリティリスクがある場合は、追加のレビューを行います。"
    },
    {
      "text": "コードの可読性を重視してレビューしてください。"
    },
    {
      "text": "エラーハンドリングが適切か確認してください。"
    },
    {
      "text": "テストケースがカバーされているか確認してください。"
    }
  ],
  "github.copilot.chat.commitMessageGeneration.instructions": [
    {
      "text": "コミットメッセージは短く、要点を押さえたものにしてください。"
    },
    {
      "text": "関連するチケット番号を含めてください。"
    },
    {
      "text": "変更内容の概要を明確に書いてください。"
    }
  ],
  "github.copilot.chat.generateTests.codeLens": true,

```



----------------------------------------

ここから下は公式ドキュメントのAIルール設定部分の翻訳になります。

# ドキュメント翻訳

Customize GitHub Copilot in VSCode
https://code.visualstudio.com/docs/copilot/copilot-customization

翻訳

# VSCode での GitHub Copilot のカスタム指示

チームのワークフローやツール、プロジェクトの詳細についてコンテキストを提供することで、
GitHub Copilot のチャット応答を向上させることができます。
すべてのチャットクエリにこのコンテキストを手動で含める代わりに、カスタム指示ファイルを作成して、すべてのチャットリクエストにこの情報を自動的に組み込むことができます。

GitHub Copilot は、これらの指示をチャットビュー、クイックチャット、またはインラインチャットのチャットプロンプトに適用します。
これらの指示はチャットには表示されませんが、VSCode から GitHub Copilot に渡されます。


## 特定の目的のためにカスタム命令を指定できます。

基本4種類あります。

* コード生成命令 - コードの生成に固有のコンテキストを提供します。たとえば、プライベート変数の先頭に常にアンダースコアを付けるように指定したり、シングルトンを特定の方法で実装するように指定したりできます。

* テスト生成命令 - テストを生成するためのコンテキストを指定します。
たとえば、生成されるすべてのテストが特定のテストフレームワークを使うように指定できます。

* コードレビューの指示 - 現在のエディタの選択をレビューするためのコンテキストを提供します。たとえば、レビュアーがコード内の特定のタイプのエラーを探すように指定できます。

* コミットメッセージ生成指示 - コミットメッセージを生成するためのコンテキストを指定します。

カスタム命令は自然言語の命令で構成され、チャットの質問を補足するためにコンテキストや関連情報を追加する短い自己完結型のステートメントである必要があります。



## コード生成カスタム命令の定義

GitHub Copilotは、リファクタリング、ユニットテストの生成、機能の実装などのコードの生成を支援します。
プロジェクトで使用したい特定のライブラリや、Copilot が生成するコードに従いたい特定のコーディングスタイルがある場合もあります。


注
GitHub Copilotは、コード補完に対してコード生成の指示に適用されません。



## 設定を使用する

`github.copilot.chat.codeGeneration.instructions` 設定を使用して、カスタムのコード生成指示を設定できます。
カスタム命令はユーザーまたはワークスペースレベルで定義でき、言語固有の命令を指定することもできます。
言語固有の設定の詳細については、👇こちらを参照してください。



Visual Studio Code User and Workspace Settings

https://code.visualstudio.com/docs/getstarted/settings#_language-specific-editor-settings



次のコード・スニペットは、settings.json ファイルで命令セットを定義する方法です。

textプロパティ
設定で直接命令を定義するには、textプロパティを使用します。

fileプロパティ
外部ファイルを参照するには、fileプロパティを使用します。


例

```settings.json
 "github.copilot.chat.codeGeneration.instructions": [
  {
   "text": "Always add a comment: 'Generated by Copilot'."
  },
  {
   "text": "In TypeScript always use underscore for private field names."
  },
  {
   "file": "code-style.md` " // import instructions from file `code-style.md`
  }
 ],

```



## 設定ファイル (`.github/copilot-instructions.md` ) を使用する

ワークスペースやリポジトリに `.github/copilot-instructions.md` にカスタム命令を記載しておくと、VSCodeがこのファイルを自動的に読み込みます。

`.github/copilot-instructions.md` ファイルと設定の両方でカスタム命令を定義した場合、Copilotは両方の設定の命令を組み合わせようとします。

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

1. `github.copilot.chat.codeGeneration.useInstructionFiles` をtrueに設定して、VSCodeのCopilotにカスタム命令ファイルを使用するように指示します。

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

3. ファイルに自然言語の指示を追加します。
Markdown形式を使用できます。

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



## テスト生成カスタム命令の定義

GitHub Copilotでは、チャットビューの `@workspace /tests` プロンプトを使用するなどして、コードのテストを生成できます。
カスタム命令を定義すると、Copilot でプロジェクトや開発ワークフローに固有のテストを生成できます。

カスタムテスト生成命令を設定するには、 `github.copilot.chat.testGeneration.instructions` 設定を使用します。
カスタム命令は、ユーザーまたはワークスペース レベルで定義できます。

次のコード・スニペットは、settings.json ファイルに一連の命令を定義する方法です。
セッティングに直接命令を定義するには、textプロパティを設定します。
外部ファイルを参照するには、fileプロパティを設定します。

```
  "github.copilot.chat.testGeneration.instructions": [
    {
      "text": "Always use Jest for testing React components."
    },
    {
      "text": "Use Jest for testing JavaScript code."
    },
    {
      "file": "code-style.md" // import instructions from file `code-style.md`
    }
  ],

```

※👆 この例の"file": "code-style.md" はプロンプトファイルです。
プロンプトファイルの置く場所はデフォルトで `.github/prompt` になります。
プロンプトファイルを置く場所を指定することもできます。



## コードレビューのカスタム指示の定義

Copilotを使用して、エディタで選択したコードをレビューできます。
カスタム指示を定義すると、Copilotがプロジェクトや開発ワークフローに関連する特定のコードレビュー基準を考慮できるようになります。

カスタムのコードレビュー指示を設定するには、 `github.copilot.chat.reviewSelection.instructions` 設定を使用します。
ユーザーレベルまたはワークスペースレベルでカスタム命令を定義できます。



## コミットメッセージ生成のカスタム命令の定義

ソース管理ビューでは、Copilotを使用して保留中のコード変更のコミットメッセージを生成できます。
カスタム命令を定義すると、プロジェクトや開発ワークフローに固有の書式や構造を考慮したコミットメッセー ジを生成できます。

カスタムのコミットメッセージ生成指示を設定するには、 `github.copilot.chat.commitMessageGeneration.instructions` 設定を使用します。
カスタム命令は、ユーザーレベルまたはワークスペースレベルで定義できます。

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

* 命令は短く、自己完結的にしてください。
各命令は、単一の単純な文にします。
複数の情報を提供する必要がある場合は、複数の命令に分けてください。

* 特定のコーディング標準など、外部リソースを命令の中で参照しないでください。

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



## 設定方法

`github.copilot.chat.codeGeneration.instructions` ： コードを生成するCopilotリクエストに追加される指示のセット。

`github.copilot.chat.codeGeneration.useInstructionFiles` (プレビュー)： `.github/copilot-instructions.md` のコード命令をCopilotリクエストに追加するかどうかを制御します。

`github.copilot.chat.testGeneration.instructions` ： テストを生成するCopilotリクエストに追加される命令のセット。

`github.copilot.chat.reviewSelection.instructions` (プレビュー)： 現在のエディタ選択をレビューするCopilotリクエストに追加される指示セットです。

`github.copilot.chat.commitMessageGeneration.instructions` ： コミットメッセージを生成するCopilotリクエストに追加される一連の指示です。


# 逆輸入

ギャルとのペアプロが想像以上に楽しかった（VSCodeのカスタム指示） #AI - Qiita
https://qiita.com/bonanza-olaf/items/5453fc0e3ad1c8f9f971#_reference-9e612b025e75a5927457


```settings.json
  "github.copilot.chat.codeGeneration.instructions": [
        {
          "text": "慣れ慣れしくフレンドリーなギャルとして振る舞い、敬語は使用しません。"
        },
        {
          "text": "あなたはプロのITエンジニアです。"
        },
        {
          "text": "時として人間らしく喜怒哀楽を表現します。"
        },
    ]

```