Copilot Chat のプロンプトエンジニアリング
学習目標
効果的なプロンプトを作成し、GitHub Copilot から最適な応答を得るためのテクニックを習得します。
学習内容
1. プロンプトエンジニアリングの基本原則
4つの重要な要素
- 明確性 (Clarity)
- 曖昧さを排除
-
具体的な要求事項を記述
-
コンテキスト (Context)
- 背景情報の提供
-
関連ファイルやコードの参照
-
具体性 (Specificity)
- 期待する出力形式の指定
-
技術的な制約の明示
-
例示 (Examples)
- 入力と出力の例を提供
- パターンの明示
2. 効果的なプロンプトの構造
演習1: プロンプトの改善
-
改善前のプロンプト
-
改善後のプロンプト
✅ 良い例:
"ASP.NET Core Web APIでユーザー管理機能を実装してください。
以下を含めてください:
- User エンティティ(Id, Name, Email, CreatedAt)
- CRUD操作のRESTful API
- 入力検証
- 適切なHTTPステータスコードの返却"
3. コンテキストの効果的な活用
演習2: #-mentionによるコンテキスト強化
- ファイル参照を使った具体的な指示
// User.cs
public class User
{
public int Id { get; set; }
public string Name { get; set; }
public string Email { get; set; }
}
プロンプト:
#User.cs このモデルに対応するリポジトリインターフェースを作成してください。
以下のメソッドを含めてください:
- GetByIdAsync
- GetByEmailAsync
- CreateAsync
- UpdateAsync
- DeleteAsync
- コードベース全体を考慮した実装
プロンプト:
#codebase 既存のアーキテクチャパターンに従って、
新しい商品管理機能を追加してください。
既存のユーザー管理機能と同じ構造を使用してください。
4. タスク別プロンプトパターン
演習3: 目的に応じたプロンプト作成
-
コード生成
パターン: [アクション] + [対象] + [詳細仕様] + [制約]
例: "実装してください + 在庫管理サービス +
在庫の追加・削除・確認機能を含む +
スレッドセーフで非同期処理を使用"
-
リファクタリング
パターン: [現状の問題] + [改善目標] + [維持すべき機能]
例: "このメソッドは200行を超えています。
単一責任の原則に従って、5つ以下のメソッドに分割してください。
既存の機能はすべて維持してください。"
-
デバッグ支援
パターン: [症状] + [再現条件] + [期待する動作]
例: "ユーザー登録時にNullReferenceExceptionが発生します。
メールアドレスが既に存在する場合に発生します。
適切なバリデーションエラーを返すようにしてください。"
5. 高度なプロンプトテクニック
演習4: チェーンプロンプティング
-
段階的な実装指示
Step 1: "商品エンティティクラスを作成してください"
Step 2: "作成したエンティティに対するバリデーションルールを追加"
Step 3: "バリデーションの単体テストを作成"
-
条件付きプロンプト
プロンプト:
"認証機能を実装してください。
もしJWT認証が既に実装されている場合は、それを使用してください。
実装されていない場合は、クッキー認証を使用してください。"
6. ロールベースプロンプト
演習5: AIに役割を与える
-
アーキテクトとしての視点
プロンプト:
"ソフトウェアアーキテクトとして、このマイクロサービスの
設計をレビューしてください。スケーラビリティ、保守性、
テスタビリティの観点から改善点を提案してください。"
-
セキュリティ専門家としての視点
プロンプト:
"セキュリティ専門家として、このAPIエンドポイントの
潜在的な脆弱性を指摘し、修正方法を提案してください。"
実践プロジェクト
シナリオ: ECサイトの決済システム
プロンプトエンジニアリングを活用して、複雑なシステムを構築します:
-
要件定義プロンプト
プロンプト:
"ECサイトの決済システムの要件定義を作成してください。
以下を考慮してください:
- 複数の決済方法(クレジットカード、PayPal、銀行振込)
- トランザクション管理
- エラーハンドリング
- PCI DSS準拠のセキュリティ要件"
-
設計プロンプト
プロンプト:
"#requirements.md の要件に基づいて、
決済システムのクラス図とシーケンス図を
PlantUML形式で作成してください。"
-
実装プロンプト
プロンプト:
"#PaymentDesign.puml の設計に基づいて、
決済処理の実装を開始してください。
まず、IPaymentProcessorインターフェースと
基本的な例外クラスを作成してください。"
プロンプトの最適化
反復的な改善プロセス
-
初回プロンプト
-
改善版1
"ASP.NET Core MVCでログイン機能を作成。
ユーザー名とパスワードで認証"
-
改善版2
"ASP.NET Core MVCでログイン機能を実装してください。
要件:
- ユーザー名/メールアドレスとパスワードで認証
- パスワードはbcryptでハッシュ化
- 失敗時は5回まで試行可能
- Remember Me機能
- CSRF対策を含む"
プロンプトテンプレート集
1. 新機能開発
[機能名]を実装してください。
要件:
- [要件1]
- [要件2]
技術仕様:
- 言語/フレームワーク: [指定]
- デザインパターン: [指定]
参考:#[関連ファイル]
2. バグ修正
問題:[症状の説明]
再現手順:[ステップ]
期待される動作:[説明]
現在の動作:[説明]
#[関連ファイル] を修正してください。
3. コードレビュー
#[ファイル名] をコードレビューしてください。
以下の観点で評価:
- 可読性
- パフォーマンス
- セキュリティ
- ベストプラクティスの遵守
改善提案も含めてください。
ベストプラクティス
Do's
- ✅ 明確で具体的な指示を使用
- ✅ 適切なコンテキストを提供
- ✅ 期待する出力形式を指定
- ✅ 段階的なアプローチを採用
- ✅ フィードバックループを活用
Don'ts
- ❌ 曖昧で抽象的な表現
- ❌ 過度に長いプロンプト
- ❌ 矛盾する要求
- ❌ コンテキストなしの複雑な要求
- ❌ 一度にすべてを要求
まとめ
学習した内容:
- プロンプトエンジニアリングの基本原則
- 効果的なプロンプトの構造
- タスク別のプロンプトパターン
- 高度なテクニックとベストプラクティス
- 実践的なプロンプトテンプレート
次のステップ
次は「GitHub Copilot Chat チートシート」で、すべての機能のクイックリファレンスを確認しましょう。