編集の要約なし |
|||
| (同じ利用者による、間の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> | |||
* 特定のファイルパターンやディレクトリに適用される指示 | * 特定のファイルパターンやディレクトリに適用される指示 | ||
* YAMLフロントマターによるglobパターン指定 | * YAMLフロントマターによるglobパターン指定 | ||
| 12行目: | 12行目: | ||
* エージェント別の除外設定が可能 | * エージェント別の除外設定が可能 | ||
<br> | <br> | ||
ファイルを使用することにより、以下に示すメリットが得られる。<br> | |||
* コンテキストの最適化 | * コンテキストの最適化 | ||
*: 作業中のファイルに関連する指示のみが適用される。 | *: 作業中のファイルに関連する指示のみが適用される。 | ||
| 38行目: | 38行目: | ||
*: プロジェクト全体の共通原則、組織全体のポリシー、一般的なコーディング規約 | *: プロジェクト全体の共通原則、組織全体のポリシー、一般的なコーディング規約 | ||
<br> | <br> | ||
==== | ==== パス固有カスタム指示ファイル (*.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> | | ファイル名 || <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> | ||
|- | |- | ||
| 適用範囲の指定方法 || < | | 適用範囲の指定方法 || <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> | ||
|- | |- | ||
| 複数ファイルの作成 || 可能 (用途別に複数ファイル) || | | 複数ファイルの作成 || 可能<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> コマンド) || | ||
* | * ターミナル (<code>claude</code> コマンド) | ||
* | * VS Code拡張 | ||
* JetBrains拡張 | |||
|} | |} | ||
</center> | </center> | ||
| 111行目: | 112行目: | ||
== ファイルの配置 == | == ファイルの配置 == | ||
ファイルは、<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> | |||
<br> | <br> | ||
==== 基本的な構造 ==== | ==== 基本的な構造 ==== | ||
| 156行目: | 157行目: | ||
<syntaxhighlight lang="md"> | <syntaxhighlight lang="md"> | ||
--- | --- | ||
applyTo: " | applyTo: "globパターン" | ||
excludeAgent: " | excludeAgent: "エージェント名" | ||
--- | --- | ||
| 215行目: | 216行目: | ||
== 対応環境 == | == 対応環境 == | ||
パス固有カスタム指示ファイルは、複数のIDEとプラットフォームで対応している。<br> | |||
対応環境を以下に示す。<br> | 対応環境を以下に示す。<br> | ||
<br> | <br> | ||
| 225行目: | 226行目: | ||
* 適用範囲 | * 適用範囲 | ||
*: ワークスペース内の全てのチャットリクエストに自動適用される。 | *: ワークスペース内の全てのチャットリクエストに自動適用される。 | ||
* | * パス固有カスタム指示 | ||
*: 対応している。 | *: 対応している。 | ||
<br> | <br> | ||
| 235行目: | 236行目: | ||
* 適用範囲 | * 適用範囲 | ||
*: 全てのチャットリクエストに自動適用 | *: 全てのチャットリクエストに自動適用 | ||
* | * パス固有カスタム指示 | ||
*: 対応している。 | *: 対応している。 | ||
<br> | <br> | ||
| 256行目: | 257行目: | ||
* 適用範囲 | * 適用範囲 | ||
*: 全てのチャットリクエストに自動適用される。 | *: 全てのチャットリクエストに自動適用される。 | ||
* | * パス固有カスタム指示 | ||
*: 対応している。 | *: 対応している。 | ||
<br> | <br> | ||
==== Copilot | ==== GitHub Copilot CLI ==== | ||
Copilot Code | Copilot Code Reviewでは、パス固有カスタム指示ファイルを使用できる。<br> | ||
<br> | <br> | ||
* 対応ファイル | * 対応ファイル | ||
| 282行目: | 283行目: | ||
## ファイル構成 | ## ファイル構成 | ||
- | - コンポーネント毎のディレクトリ構成を使用する | ||
- | - ファイル名はPascalCaseとする (例: UserProfile.tsx) | ||
## ネーミング規則 | ## ネーミング規則 | ||
| 301行目: | 302行目: | ||
## React規約 | ## React規約 | ||
- | - 関数コンポーネントのみを使用する | ||
- | - Propsには必ずTypeScript型定義を記述する | ||
- | - useEffectの依存配列を必ず記述する | ||
- | - カスタムフックはuseで始まる名前にする | ||
</syntaxhighlight> | </syntaxhighlight> | ||
<br> | <br> | ||
| 320行目: | 321行目: | ||
## ファイル構成 | ## ファイル構成 | ||
- | - モジュール毎のディレクトリ構成を使用する | ||
- | - ファイル名はsnake_caseとする (例: user_service.py) | ||
## ネーミング規則 | ## ネーミング規則 | ||
| 332行目: | 333行目: | ||
## コードスタイル | ## コードスタイル | ||
- PEP | - PEP 8に準拠する | ||
- インデント: 4スペース | - インデント: 4スペース | ||
- 最大行長: 88文字 (Black準拠) | - 最大行長: 88文字 (Black準拠) | ||
| 339行目: | 340行目: | ||
## エラーハンドリング | ## エラーハンドリング | ||
- 全てのAPI関数はtry- | - 全てのAPI関数はtry-exceptブロックを使用する | ||
- | - カスタム例外クラスを定義する | ||
- | - エラーログは適切なレベルで記録する | ||
## データベース | ## データベース | ||
- | - SQLインジェクション対策としてプリペアドステートメントを使用する | ||
- | - トランザクションは明示的に管理する | ||
</syntaxhighlight> | </syntaxhighlight> | ||
<br> | <br> | ||
| 363行目: | 364行目: | ||
- RESTful APIの原則に従う | - RESTful APIの原則に従う | ||
- | - エンドポイントはリソース名を複数形で表現する (例: /users, /products) | ||
- | - HTTP動詞を正しく使用する (GET, POST, PUT, DELETE) | ||
## バリデーション | ## バリデーション | ||
- | - 全てのエンドポイントで入力バリデーションを実施する | ||
- | - リクエストボディのスキーマを定義する | ||
- バリデーションエラーは400 Bad Requestで返す | - バリデーションエラーは400 Bad Requestで返す | ||
## レスポンス形式 | ## レスポンス形式 | ||
- | - 一貫したエラーレスポンス形式を使用する | ||
- | - HTTPステータスコードを正しく使用する | ||
- JSON形式で返す | - JSON形式で返す | ||
## ドキュメント | ## ドキュメント | ||
- | - 全てのエンドポイントにOpenAPIコメントを記述する | ||
- リクエスト・レスポンスの例を含める | - リクエスト・レスポンスの例を含める | ||
</syntaxhighlight> | </syntaxhighlight> | ||
| 398行目: | 399行目: | ||
## 認証・認可 | ## 認証・認可 | ||
- | - JWT、OAuth2等の標準認証方式を使用する | ||
- | - パスワードはハッシュ化して保存する (bcrypt、Argon2等) | ||
- | - アクセストークンの有効期限を設定する | ||
- | - リフレッシュトークンを適切に管理する | ||
## データ保護 | ## データ保護 | ||
| 407行目: | 408行目: | ||
- 機密情報はログに記録しない | - 機密情報はログに記録しない | ||
- 外部通信はHTTPS必須 | - 外部通信はHTTPS必須 | ||
- | - SQLインジェクション対策を行う (プリペアドステートメント) | ||
- | - XSS対策を行う (入力のサニタイズ) | ||
- | - CSRF対策を行う (CSRFトークン) | ||
## 入力検証 | ## 入力検証 | ||
- | - 全てのユーザ入力を検証する | ||
- | - ホワイトリスト方式で検証する | ||
- | - ファイルアップロードは拡張子とMIMEタイプを検証する | ||
## アクセス制御 | ## アクセス制御 | ||
- | - 最小権限の原則を適用する | ||
- ロールベースアクセス制御 (RBAC) | - ロールベースアクセス制御 (RBAC) を使用する | ||
- | - センシティブな操作はログに記録する | ||
</syntaxhighlight> | </syntaxhighlight> | ||
<br><br> | <br><br> | ||
== 指示ファイルの分割戦略 == | == 指示ファイルの分割戦略 == | ||
ファイルを効果的に分割するための戦略を以下に示す。<br> | |||
<br> | <br> | ||
==== 言語別分割 ==== | ==== 言語別分割 ==== | ||
| 490行目: | 491行目: | ||
== 記述のベストプラクティス == | == 記述のベストプラクティス == | ||
効果的なパス固有カスタム指示ファイルを作成するためのベストプラクティスを以下に示す。<br> | |||
<br> | <br> | ||
==== 簡潔性を保つ ==== | ==== 簡潔性を保つ ==== | ||
| 512行目: | 513行目: | ||
<br> | <br> | ||
良い例を以下に示す。<br> | 良い例を以下に示す。<br> | ||
* <u> | * <u>全ての新規コードにTypeScriptを使用すること</u> | ||
* <u> | * <u>全ての関数にJSDocコメントを記述すること</u> | ||
* <u> | * <u>継承よりコンポジションを優先すること</u> | ||
<br> | <br> | ||
悪い例を以下に示す。<br> | 悪い例を以下に示す。<br> | ||
* <u> | * <u>TypeScriptを使用するのが好ましい</u> | ||
* <u> | * <u>コメントの追加を検討すること</u> | ||
* <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> | ||
* UI / UXの変更要求 | * UI / UXの変更要求 | ||
| 575行目: | 578行目: | ||
- 関数は50行以内に抑える | - 関数は50行以内に抑える | ||
- | - 変数名はcamelCaseを使用する | ||
- | - 全ての公開APIにJSDocコメントを記述する | ||
- エラーハンドリングにはtry- | - エラーハンドリングには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 | ||
}} | }} | ||