「GitHub Copilotの設定 - パス固有カスタム指示」の版間の差分

編集の要約なし
 
(同じ利用者による、間の7版が非表示)
5行目: 5行目:
<u>.github/instructions/</u> ディレクトリ内に配置された <u>*.instructions.md</u> ファイルを使用することにより、特定のファイルパターンやディレクトリに対してコンテキスト固有のガイダンスをCopilotに伝えることができる。<br>
<u>.github/instructions/</u> ディレクトリ内に配置された <u>*.instructions.md</u> ファイルを使用することにより、特定のファイルパターンやディレクトリに対してコンテキスト固有のガイダンスをCopilotに伝えることができる。<br>
<br>
<br>
パス固有指示ファイルは、以下に示す特徴を持つ。<br>
パス固有カスタム指示ファイルは、以下に示す特徴を持つ。<br>
* 特定のファイルパターンやディレクトリに適用される指示
* 特定のファイルパターンやディレクトリに適用される指示
* YAMLフロントマターによるglobパターン指定
* YAMLフロントマターによるglobパターン指定
12行目: 12行目:
* エージェント別の除外設定が可能
* エージェント別の除外設定が可能
<br>
<br>
パス固有指示ファイルを使用することにより、以下に示すメリットが得られる。<br>
ファイルを使用することにより、以下に示すメリットが得られる。<br>
* コンテキストの最適化
* コンテキストの最適化
*: 作業中のファイルに関連する指示のみが適用される。
*: 作業中のファイルに関連する指示のみが適用される。
38行目: 38行目:
*: プロジェクト全体の共通原則、組織全体のポリシー、一般的なコーディング規約
*: プロジェクト全体の共通原則、組織全体のポリシー、一般的なコーディング規約
<br>
<br>
==== パス固有指示ファイル (*.instructions.md) ====
==== パス固有カスタム指示ファイル (*.instructions.md) ====
<u>.github/instructions/*.instructions.md</u> は、特定のパスやファイルパターンに適用される指示である。<br>
<u>.github/instructions/*.instructions.md</u> は、特定のパスやファイルパターンに適用される指示である。<br>
<br>
<br>
79行目: 79行目:
<center>
<center>
{| class="wikitable"
{| class="wikitable"
|+ GitHub Copilot パス固有カスタム指示 と Claude Codeの比較
|+ GitHub Copilot / GitHub Copilot CLI パス固有カスタム指示 と Claude Codeの比較
! 項目 !! GitHub Copilot !! Claude Code
! 項目 !! GitHub Copilot !! GitHub Copilot CLI !! Claude Code
|-
|-
| ファイル名 || <u>*.instructions.md</u> || <u>CLAUDE.md</u> (ネスト配置)
| ファイル名 || <u>*.instructions.md</u> || <u>*.instructions.md</u> || <u>*.md</u> (ネスト配置も可)
|-
|-
| 配置場所 || <u>.github/instructions/</u> || 任意のディレクトリ (プロジェクトルートまたはサブディレクトリ)
| 配置場所 || <u>.github/instructions/</u> || <u>.github/instructions/</u> || <u>.claude/rules/</u>
|-
|-
| 適用範囲の指定方法 || <u>applyTo</u>プロパティでglobパターン指定 || ディレクトリ階層による暗黙的適用<br>(そのディレクトリ以下に適用)
| 適用範囲の指定方法 || <code>applyTo</code> プロパティでglobパターン指定 || <code>applyTo</code> プロパティでglobパターン指定 || フロントマターの <code>paths</code> フィールドでglobパターン指定
|-
|-
| globパターン対応 || 対応<br>例: <u>**/*.ts</u>, <u>src/**/*.py</u> || 非対応
| globパターン対応 || 対応<br>例: <u>**/*.ts</u>, <u>src/**/*.py</u> || 対応<br>例: <u>**/*.ts</u>, <u>src/**/*.py</u> || 対応<br>例: <u>**/*.ts</u>, <u>src/api/**/*.ts</u>
|-
|-
| 複数ファイルの作成 || 可能 (用途別に複数ファイル) || ディレクトリごとに1ファイル
| 複数ファイルの作成 || 可能<br>(用途別に複数ファイル) || 可能<br>(用途別に複数ファイル) || 可能<br>(用途別に複数ファイル、サブディレクトリでの整理も可)
|-
|-
| フロントマター || YAML形式で設定<br><code>applyTo</code>, <code>excludeAgent</code> || なし
| フロントマター || YAML形式で設定<br><code>applyTo</code>, <code>excludeAgent</code> || YAML形式で設定<br><code>applyTo</code>, <code>excludeAgent</code> || YAML形式で設定<br><code>paths</code>
|-
|-
| エージェント除外設定 || <code>excludeAgent</code>プロパティで指定可能 || 非対応
| エージェント除外設定 || <code>excludeAgent</code> プロパティで指定可能 || <code>excludeAgent</code> プロパティで指定可能 || 非対応
|-
|-
| 継承・マージ || 親ディレクトリの指示と併用 || 親ディレクトリのCLAUDE.mdと自動マージ
| 継承・マージ || 親ディレクトリの指示と併用 || 親ディレクトリの指示と併用 || 親ディレクトリのCLAUDE.mdと自動マージ
|-
|-
| 対応環境 ||  
| 対応環境 ||
* VS Code
* VS Code
* Visual Studio
* Visual Studio
* JetBrains
* JetBrains
* GitHub.com
* GitHub.com
|  
| ターミナル (<code>gh copilot</code> コマンド) ||
* Claude Code CLI
* ターミナル (<code>claude</code> コマンド)
* 各種IDE拡張
* VS Code拡張
* JetBrains拡張
|}
|}
</center>
</center>
111行目: 112行目:


== ファイルの配置 ==
== ファイルの配置 ==
パス固有指示ファイルは、<u>.github/instructions/</u> ディレクトリに配置する。<br>
ファイルは、<u>.github/instructions/</u> ディレクトリに配置する。<br>
<br>
<br>
* 配置場所
* 配置場所
127行目: 128行目:
  ├── .github/
  ├── .github/
  │  ├── copilot-instructions.md      # 全体的な指示
  │  ├── copilot-instructions.md      # 全体的な指示
  │  └── instructions/                # パス固有指示ディレクトリ
  │  └── instructions/                # パス固有カスタム指示ディレクトリ
  │      ├── frontend.instructions.md  # フロントエンド向け
  │      ├── frontend.instructions.md  # フロントエンド向け
  │      ├── backend.instructions.md  # バックエンド向け
  │      ├── backend.instructions.md  # バックエンド向け
148行目: 149行目:


== YAMLフロントマターの設定 ==
== YAMLフロントマターの設定 ==
パス固有指示ファイルには、YAMLフロントマターによる設定が必須である。<br>
ファイルには、YAMLフロントマターによる設定が必須である。<br>
<br>
<br>
==== 基本的な構造 ====
==== 基本的な構造 ====
156行目: 157行目:
  <syntaxhighlight lang="md">
  <syntaxhighlight lang="md">
  ---
  ---
  applyTo: "glob_pattern"
  applyTo: "globパターン"
  excludeAgent: "agent_name"
  excludeAgent: "エージェント名"
  ---
  ---
   
   
215行目: 216行目:


== 対応環境 ==
== 対応環境 ==
パス固有指示ファイルは、複数のIDEとプラットフォームで対応している。<br>
パス固有カスタム指示ファイルは、複数のIDEとプラットフォームで対応している。<br>
対応環境を以下に示す。<br>
対応環境を以下に示す。<br>
<br>
<br>
225行目: 226行目:
* 適用範囲
* 適用範囲
*: ワークスペース内の全てのチャットリクエストに自動適用される。
*: ワークスペース内の全てのチャットリクエストに自動適用される。
* パス固有指示
* パス固有カスタム指示
*: 対応している。
*: 対応している。
<br>
<br>
235行目: 236行目:
* 適用範囲
* 適用範囲
*: 全てのチャットリクエストに自動適用
*: 全てのチャットリクエストに自動適用
* パス固有指示
* パス固有カスタム指示
*: 対応している。
*: 対応している。
<br>
<br>
256行目: 257行目:
* 適用範囲
* 適用範囲
*: 全てのチャットリクエストに自動適用される。
*: 全てのチャットリクエストに自動適用される。
* パス固有指示
* パス固有カスタム指示
*: 対応している。
*: 対応している。
<br>
<br>
==== Copilot Code Review ====
==== GitHub Copilot CLI ====
Copilot Code Reviewでは、パス固有指示ファイルを使用できる。<br>
Copilot Code Reviewでは、パス固有カスタム指示ファイルを使用できる。<br>
<br>
<br>
* 対応ファイル
* 対応ファイル
282行目: 283行目:
  ## ファイル構成
  ## ファイル構成
   
   
  - コンポーネント毎のディレクトリ構成を使用
  - コンポーネント毎のディレクトリ構成を使用する
  - ファイル名はPascalCase (例: UserProfile.tsx)
  - ファイル名はPascalCaseとする (例: UserProfile.tsx)
   
   
  ## ネーミング規則
  ## ネーミング規則
301行目: 302行目:
  ## React規約
  ## React規約
   
   
  - 関数コンポーネントのみを使用
  - 関数コンポーネントのみを使用する
  - Propsには必ずTypeScript型定義を記述
  - Propsには必ずTypeScript型定義を記述する
  - useEffectの依存配列を必ず記述
  - useEffectの依存配列を必ず記述する
  - カスタムフックは use で始まる名前
  - カスタムフックはuseで始まる名前にする
  </syntaxhighlight>
  </syntaxhighlight>
<br>
<br>
320行目: 321行目:
  ## ファイル構成
  ## ファイル構成
   
   
  - モジュール毎のディレクトリ構成を使用
  - モジュール毎のディレクトリ構成を使用する
  - ファイル名はsnake_case (例: user_service.py)
  - ファイル名はsnake_caseとする (例: user_service.py)
   
   
  ## ネーミング規則
  ## ネーミング規則
332行目: 333行目:
  ## コードスタイル
  ## コードスタイル
   
   
  - PEP 8に準拠
  - PEP 8に準拠する
  - インデント: 4スペース
  - インデント: 4スペース
  - 最大行長: 88文字 (Black準拠)
  - 最大行長: 88文字 (Black準拠)
339行目: 340行目:
  ## エラーハンドリング
  ## エラーハンドリング
   
   
  - 全てのAPI関数はtry-exceptブロックを使用
  - 全てのAPI関数はtry-exceptブロックを使用する
  - カスタム例外クラスを定義
  - カスタム例外クラスを定義する
  - エラーログは適切なレベルで記録
  - エラーログは適切なレベルで記録する
   
   
  ## データベース
  ## データベース
   
   
  - SQLインジェクション対策としてプリペアドステートメントを使用
  - SQLインジェクション対策としてプリペアドステートメントを使用する
  - トランザクションは明示的に管理
  - トランザクションは明示的に管理する
  </syntaxhighlight>
  </syntaxhighlight>
<br>
<br>
363行目: 364行目:
   
   
  - RESTful APIの原則に従う
  - RESTful APIの原則に従う
  - エンドポイントはリソース名を複数形で表現 (例: /users, /products)
  - エンドポイントはリソース名を複数形で表現する (例: /users, /products)
  - HTTP動詞を正しく使用 (GET, POST, PUT, DELETE)
  - HTTP動詞を正しく使用する (GET, POST, PUT, DELETE)
   
   
  ## バリデーション
  ## バリデーション
   
   
  - 全てのエンドポイントで入力バリデーションを実施
  - 全てのエンドポイントで入力バリデーションを実施する
  - リクエストボディのスキーマを定義
  - リクエストボディのスキーマを定義する
  - バリデーションエラーは400 Bad Requestで返す
  - バリデーションエラーは400 Bad Requestで返す
   
   
  ## レスポンス形式
  ## レスポンス形式
   
   
  - 一貫したエラーレスポンス形式を使用
  - 一貫したエラーレスポンス形式を使用する
  - HTTPステータスコードを正しく使用
  - HTTPステータスコードを正しく使用する
  - JSON形式で返す
  - JSON形式で返す
   
   
  ## ドキュメント
  ## ドキュメント
   
   
  - 全てのエンドポイントにOpenAPIコメントを記述
  - 全てのエンドポイントにOpenAPIコメントを記述する
  - リクエスト・レスポンスの例を含める
  - リクエスト・レスポンスの例を含める
  </syntaxhighlight>
  </syntaxhighlight>
398行目: 399行目:
  ## 認証・認可
  ## 認証・認可
   
   
  - JWT、OAuth2等の標準認証方式を使用
  - JWT、OAuth2等の標準認証方式を使用する
  - パスワードはハッシュ化して保存 (bcrypt、Argon2等)
  - パスワードはハッシュ化して保存する (bcrypt、Argon2等)
  - アクセストークンの有効期限を設定
  - アクセストークンの有効期限を設定する
  - リフレッシュトークンの適切な管理
  - リフレッシュトークンを適切に管理する
   
   
  ## データ保護
  ## データ保護
407行目: 408行目:
  - 機密情報はログに記録しない
  - 機密情報はログに記録しない
  - 外部通信はHTTPS必須
  - 外部通信はHTTPS必須
  - SQLインジェクション対策 (プリペアドステートメント)
  - SQLインジェクション対策を行う (プリペアドステートメント)
  - XSS対策 (入力のサニタイズ)
  - XSS対策を行う (入力のサニタイズ)
  - CSRF対策 (CSRFトークン)
  - CSRF対策を行う (CSRFトークン)
   
   
  ## 入力検証
  ## 入力検証
   
   
  - 全てのユーザ入力を検証
  - 全てのユーザ入力を検証する
  - ホワイトリスト方式で検証
  - ホワイトリスト方式で検証する
  - ファイルアップロードは拡張子とMIMEタイプを検証
  - ファイルアップロードは拡張子とMIMEタイプを検証する
   
   
  ## アクセス制御
  ## アクセス制御
   
   
  - 最小権限の原則を適用
  - 最小権限の原則を適用する
  - ロールベースアクセス制御 (RBAC) を使用
  - ロールベースアクセス制御 (RBAC) を使用する
  - センシティブな操作はログに記録
  - センシティブな操作はログに記録する
  </syntaxhighlight>
  </syntaxhighlight>
<br><br>
<br><br>


== 指示ファイルの分割戦略 ==
== 指示ファイルの分割戦略 ==
パス固有指示ファイルを効果的に分割するための戦略を以下に示す。<br>
ファイルを効果的に分割するための戦略を以下に示す。<br>
<br>
<br>
==== 言語別分割 ====
==== 言語別分割 ====
490行目: 491行目:


== 記述のベストプラクティス ==
== 記述のベストプラクティス ==
効果的なパス固有指示ファイルを作成するためのベストプラクティスを以下に示す。<br>
効果的なパス固有カスタム指示ファイルを作成するためのベストプラクティスを以下に示す。<br>
<br>
<br>
==== 簡潔性を保つ ====
==== 簡潔性を保つ ====
512行目: 513行目:
<br>
<br>
良い例を以下に示す。<br>
良い例を以下に示す。<br>
* <u>Use TypeScript for all new code.</u>
* <u>全ての新規コードにTypeScriptを使用すること</u>
* <u>All functions must have JSDoc comments.</u>
* <u>全ての関数にJSDocコメントを記述すること</u>
* <u>Prefer composition over inheritance.</u>
* <u>継承よりコンポジションを優先すること</u>
<br>
<br>
悪い例を以下に示す。<br>
悪い例を以下に示す。<br>
* <u>It would be nice to use TypeScript.</u>
* <u>TypeScriptを使用するのが好ましい</u>
* <u>Consider adding comments.</u>
* <u>コメントの追加を検討すること</u>
* <u>Inheritance might not be the best choice.</u>
* <u>継承は最良の選択肢ではないかもしれない</u>
<br>
<br>
==== コード例を含める ====
==== コード例を含める ====
530行目: 531行目:
  関数名はcamelCaseを使用する。
  関数名はcamelCaseを使用する。
   
   
  良い例:
  ## 良い例
  ```typescript
  ```typescript
  function getUserById(id: string): User {
  function getUserById(id: string): User {
  // 実装
    // 実装
  }
  }
  ```
  ```
   
   
  悪い例:
  ## 悪い例
  ```typescript
  ```typescript
  function GetUserById(id: string): User {
  function GetUserById(id: string): User {
  // 実装
    // 実装
  }
  }
  ```
  ```
547行目: 550行目:


== 避けるべき内容 ==
== 避けるべき内容 ==
パス固有指示ファイルに記述すべきでない内容を以下に示す。<br>
ファイルに記述すべきでない内容を以下に示す。<br>
<br>
<br>
* UI / UXの変更要求
* UI / UXの変更要求
575行目: 578行目:
   
   
  - 関数は50行以内に抑える
  - 関数は50行以内に抑える
  - 変数名はcamelCaseを使用
  - 変数名はcamelCaseを使用する
  - 全ての公開APIにJSDocコメントを記述
  - 全ての公開APIにJSDocコメントを記述する
  - エラーハンドリングにはtry-catchブロックを使用
  - エラーハンドリングにはtry-catchブロックを使用する
  </syntaxhighlight>
  </syntaxhighlight>
<br><br>
<br><br>
594行目: 597行目:
|title={{PAGENAME}} : Exploring Electronics and SUSE Linux | MochiuWiki
|title={{PAGENAME}} : Exploring Electronics and SUSE Linux | MochiuWiki
|keywords=MochiuWiki,Mochiu,Wiki,Mochiu Wiki,GitHub,Copilot,instructions,Path-specific,Custom Instructions,AI,Configuration,Settings,Programming,Development,SUSE,Linux
|keywords=MochiuWiki,Mochiu,Wiki,Mochiu Wiki,GitHub,Copilot,instructions,Path-specific,Custom Instructions,AI,Configuration,Settings,Programming,Development,SUSE,Linux
|description={{PAGENAME}} - GitHub Copilotの.github/instructions/ディレクトリとパス固有指示ファイルに関する包括的なガイド
|description={{PAGENAME}} - GitHub Copilotの.github/instructions/ディレクトリとパス固有カスタム指示ファイルに関する包括的なガイド
|image=/resources/assets/MochiuLogo_Single_Blue.png
|image=/resources/assets/MochiuLogo_Single_Blue.png
}}
}}