Skip to content

Copilot Chat のプロンプトエンジニアリング

学習目標

効果的なプロンプトを作成し、GitHub Copilot から最適な応答を得るためのテクニックを習得します。

学習内容

1. プロンプトエンジニアリングの基本原則

4つの重要な要素

  1. 明確性 (Clarity)
  2. 曖昧さを排除
  3. 具体的な要求事項を記述

  4. コンテキスト (Context)

  5. 背景情報の提供
  6. 関連ファイルやコードの参照

  7. 具体性 (Specificity)

  8. 期待する出力形式の指定
  9. 技術的な制約の明示

  10. 例示 (Examples)

  11. 入力と出力の例を提供
  12. パターンの明示

2. 効果的なプロンプトの構造

演習1: プロンプトの改善

  1. 改善前のプロンプト

    ❌ 悪い例:
    "ユーザー管理を作って"
    

  2. 改善後のプロンプト

    ✅ 良い例:
    "ASP.NET Core Web APIでユーザー管理機能を実装してください。
    以下を含めてください:
    - User エンティティ(Id, Name, Email, CreatedAt)
    - CRUD操作のRESTful API
    - 入力検証
    - 適切なHTTPステータスコードの返却"
    

3. コンテキストの効果的な活用

演習2: #-mentionによるコンテキスト強化

  1. ファイル参照を使った具体的な指示
    // 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

  1. コードベース全体を考慮した実装
    プロンプト:
    #codebase 既存のアーキテクチャパターンに従って、
    新しい商品管理機能を追加してください。
    既存のユーザー管理機能と同じ構造を使用してください。
    

4. タスク別プロンプトパターン

演習3: 目的に応じたプロンプト作成

  1. コード生成

    パターン: [アクション] + [対象] + [詳細仕様] + [制約]
    
    例: "実装してください + 在庫管理サービス + 
    在庫の追加・削除・確認機能を含む + 
    スレッドセーフで非同期処理を使用"
    

  2. リファクタリング

    パターン: [現状の問題] + [改善目標] + [維持すべき機能]
    
    例: "このメソッドは200行を超えています。
    単一責任の原則に従って、5つ以下のメソッドに分割してください。
    既存の機能はすべて維持してください。"
    

  3. デバッグ支援

    パターン: [症状] + [再現条件] + [期待する動作]
    
    例: "ユーザー登録時にNullReferenceExceptionが発生します。
    メールアドレスが既に存在する場合に発生します。
    適切なバリデーションエラーを返すようにしてください。"
    

5. 高度なプロンプトテクニック

演習4: チェーンプロンプティング

  1. 段階的な実装指示

    Step 1: "商品エンティティクラスを作成してください"
    Step 2: "作成したエンティティに対するバリデーションルールを追加"
    Step 3: "バリデーションの単体テストを作成"
    

  2. 条件付きプロンプト

    プロンプト:
    "認証機能を実装してください。
    もしJWT認証が既に実装されている場合は、それを使用してください。
    実装されていない場合は、クッキー認証を使用してください。"
    

6. ロールベースプロンプト

演習5: AIに役割を与える

  1. アーキテクトとしての視点

    プロンプト:
    "ソフトウェアアーキテクトとして、このマイクロサービスの
    設計をレビューしてください。スケーラビリティ、保守性、
    テスタビリティの観点から改善点を提案してください。"
    

  2. セキュリティ専門家としての視点

    プロンプト:
    "セキュリティ専門家として、このAPIエンドポイントの
    潜在的な脆弱性を指摘し、修正方法を提案してください。"
    

実践プロジェクト

シナリオ: ECサイトの決済システム

プロンプトエンジニアリングを活用して、複雑なシステムを構築します:

  1. 要件定義プロンプト

    プロンプト:
    "ECサイトの決済システムの要件定義を作成してください。
    以下を考慮してください:
    - 複数の決済方法(クレジットカード、PayPal、銀行振込)
    - トランザクション管理
    - エラーハンドリング
    - PCI DSS準拠のセキュリティ要件"
    

  2. 設計プロンプト

    プロンプト:
    "#requirements.md の要件に基づいて、
    決済システムのクラス図とシーケンス図を
    PlantUML形式で作成してください。"
    

  3. 実装プロンプト

    プロンプト:
    "#PaymentDesign.puml の設計に基づいて、
    決済処理の実装を開始してください。
    まず、IPaymentProcessorインターフェースと
    基本的な例外クラスを作成してください。"
    

プロンプトの最適化

反復的な改善プロセス

  1. 初回プロンプト

    "ログイン機能を作成"
    

  2. 改善版1

    "ASP.NET Core MVCでログイン機能を作成。
    ユーザー名とパスワードで認証"
    

  3. 改善版2

    "ASP.NET Core MVCでログイン機能を実装してください。
    要件:
    - ユーザー名/メールアドレスとパスワードで認証
    - パスワードはbcryptでハッシュ化
    - 失敗時は5回まで試行可能
    - Remember Me機能
    - CSRF対策を含む"
    

プロンプトテンプレート集

1. 新機能開発

[機能名]を実装してください。

要件:
- [要件1]
- [要件2]

技術仕様:
- 言語/フレームワーク: [指定]
- デザインパターン: [指定]

参考:#[関連ファイル]

2. バグ修正

問題:[症状の説明]
再現手順:[ステップ]
期待される動作:[説明]
現在の動作:[説明]

#[関連ファイル] を修正してください。

3. コードレビュー

#[ファイル名] をコードレビューしてください。

以下の観点で評価:
- 可読性
- パフォーマンス
- セキュリティ
- ベストプラクティスの遵守

改善提案も含めてください。

ベストプラクティス

Do's

  • ✅ 明確で具体的な指示を使用
  • ✅ 適切なコンテキストを提供
  • ✅ 期待する出力形式を指定
  • ✅ 段階的なアプローチを採用
  • ✅ フィードバックループを活用

Don'ts

  • ❌ 曖昧で抽象的な表現
  • ❌ 過度に長いプロンプト
  • ❌ 矛盾する要求
  • ❌ コンテキストなしの複雑な要求
  • ❌ 一度にすべてを要求

まとめ

学習した内容: - プロンプトエンジニアリングの基本原則 - 効果的なプロンプトの構造 - タスク別のプロンプトパターン - 高度なテクニックとベストプラクティス - 実践的なプロンプトテンプレート

次のステップ

次は「GitHub Copilot Chat チートシート」で、すべての機能のクイックリファレンスを確認しましょう。