ブログ一覧に戻る🤖AI Lab
開発者のためのプロンプトエンジニアリング完全マスター
ChatGPT、Claude、GitHub Copilotを最大限活用するためのプロンプト設計テクニック。実践的な例とテンプレートで、AI活用スキルを次のレベルへ。
12 min read
AIプロンプトエンジニアリングChatGPTClaude開発効率化
シェア:
目次0% 完了
プロンプトエンジニアリングとは
プロンプトエンジニアリングは、AIから最適な出力を得るための「質問の技術」です。適切なプロンプトにより、AIの回答品質は10倍以上向上します。本記事では、開発者向けの実践的なテクニックを体系的に解説します。
1. 基礎編:効果的なプロンプトの構造
1.1 CRISP フレームワーク
優れたプロンプトは以下の要素を含みます:
- Context(文脈): 背景情報の提供
- Role(役割): AIに期待する役割
- Instruction(指示): 具体的なタスク
- Specification(仕様): 出力形式や制約
- Prompt(促し): 追加の指示や例
1.2 実例:基本から応用まで
❌ 悪い例:
"Flutterでログイン画面を作って"
✅ 良い例:
"あなたはFlutter開発のエキスパートです。
以下の要件でログイン画面を実装してください:
要件:
- EmailとPasswordの入力フィールド
- バリデーション機能(Email形式、パスワード8文字以上)
- ローディング状態の表示
- エラーメッセージの表示
- Material Design 3準拠
技術スタック:
- Flutter 3.x
- Riverpod for state management
- go_router for navigation
コード規約:
- 関数は30行以内
- 意味のある変数名
- エラーハンドリング必須
実装してください。"
2. 実践編:タスク別プロンプトテンプレート
2.1 バグ修正プロンプト
## バグ修正依頼テンプレート
### 現象
[エラーメッセージや症状を具体的に記載]
### 環境
- OS: [例: macOS 14.0]
- 言語/フレームワーク: [例: Flutter 3.16]
- 関連ライブラリ: [バージョン含む]
### 再現手順
1. [ステップ1]
2. [ステップ2]
3. [エラー発生]
### 現在のコード
```[言語]
[問題のあるコード]
```
試したこと
- [試した解決策1と結果]
- [試した解決策2と結果]
期待する結果
[正常な動作の説明]
このバグを修正する方法を、段階的に説明してください。
### 2.2 アーキテクチャ設計プロンプト
```markdown
## システム設計依頼テンプレート
### プロジェクト概要
アプリ種別: [例: ECモバイルアプリ]
ユーザー規模: [例: MAU 10万人想定]
主要機能: [箇条書きで列挙]
### 技術的要件
- パフォーマンス: [例: 画面遷移 < 300ms]
- スケーラビリティ: [例: 将来的に100万ユーザー対応]
- セキュリティ: [例: PCI DSS準拠]
### 制約条件
- 予算: [例: 月額クラウド費用 $1000以内]
- 期限: [例: 3ヶ月でMVP]
- チーム: [例: 開発者3名]
### 成果物
以下を含むアーキテクチャ設計を提供してください:
1. システム構成図(mermaid形式)
2. 技術スタックの選定理由
3. データフロー図
4. API設計概要
5. セキュリティ考慮事項
2.3 コードレビュープロンプト
## コードレビュー依頼テンプレート
以下のコードをレビューしてください:
```[言語]
[レビュー対象のコード]
```
レビュー観点
- パフォーマンス(計算量、メモリ使用量)
- 可読性(命名、構造、コメント)
- 保守性(DRY原則、SOLID原則)
- セキュリティ(脆弱性、入力検証)
- エラーハンドリング
- テスタビリティ
出力形式
- 重要度別の問題点リスト
- 各問題の改善案とコード例
- 良い点の指摘
- 総合評価(5段階)
## 3. 上級編:チェーンプロンプティング
### 3.1 段階的詳細化テクニック
複雑なタスクを小さなステップに分解し、段階的に詳細化します:
```markdown
Step 1: "Flutter MVVMアーキテクチャの基本構造を説明"
↓
Step 2: "その構造でユーザー認証機能を設計"
↓
Step 3: "設計に基づいてViewModelを実装"
↓
Step 4: "ユニットテストを作成"
3.2 実例:複雑なシステムの段階的実装
# プロンプトチェーンの自動化例
class PromptChain:
def __init__(self, ai_client):
self.ai = ai_client
self.context = []
def add_step(self, prompt, use_previous_context=True):
if use_previous_context:
full_prompt = self._build_context() + "\n\n" + prompt
else:
full_prompt = prompt
response = self.ai.query(full_prompt)
self.context.append({
'prompt': prompt,
'response': response
})
return response
def _build_context(self):
return "\n".join([
f"Previous: {item['response'][:200]}..."
for item in self.context[-3:] # 直近3つのコンテキスト
])
# 使用例
chain = PromptChain(ai_client)
chain.add_step("Flutterアプリのフォルダ構造を提案")
chain.add_step("その構造でuser認証機能のファイル配置を詳細に")
chain.add_step("認証Serviceクラスを実装")
chain.add_step("対応するテストコードを生成")
4. プロンプトパターンカタログ
4.1 ペルソナパターン
パターン: "あなたは[専門性]を持つ[役割]です"
例:
- "あなたはセキュリティ専門家です。このコードの脆弱性を指摘してください"
- "あなたは10年経験のiOSエンジニアです。SwiftUIのベストプラクティスを教えてください"
- "あなたはUXデザイナーです。このUIの改善点を提案してください"
4.2 制約パターン
パターン: "以下の制約の下で[タスク]を実行"
例:
"以下の制約でAPIを設計してください:
- RESTful原則の遵守
- レスポンス時間 < 200ms
- 1リクエストあたり最大100KBのペイロード
- JWT認証の使用
- rate limiting: 100req/min"
4.3 例示パターン
パターン: "以下の例を参考に[タスク]を実行"
例:
"以下の命名規則に従って、新しい関数を実装してください:
良い例:
- getUserById()
- validateEmailFormat()
- calculateTotalPrice()
悪い例:
- getData()
- check()
- doStuff()
タスク: 在庫確認機能の実装"
5. AIツール別最適化テクニック
5.1 ChatGPT最適化
// ChatGPT向け最適プロンプト構造
const chatGPTPrompt = {
systemMessage: 'あなたはTypeScriptのエキスパートです',
userMessage: `
タスク: 型安全なAPIクライアントの実装
要件:
- Zodでスキーマ定義
- 自動リトライ機能
- エラーハンドリング
コード例を提供してください。
`,
temperature: 0.7, // 創造性と正確性のバランス
max_tokens: 2000,
};
5.2 Claude最適化
# Claude向け最適プロンプト構造
claude_prompt = """
<task>
Pythonで効率的なデータ処理パイプラインを設計
</task>
<requirements>
- 100GBのCSVファイル処理
- メモリ効率的な実装
- 並列処理対応
</requirements>
<constraints>
- メモリ使用量: 最大8GB
- 処理時間: 1時間以内
- Python 3.10+
</constraints>
<output_format>
1. アーキテクチャ概要
2. 実装コード
3. パフォーマンステスト方法
</output_format>
"""
5.3 GitHub Copilot最適化
// GitHub Copilot向けコメント駆動開発
/**
* ユーザー認証を管理するカスタムフック
*
* 機能:
* - ログイン/ログアウト
* - トークンの自動更新
* - 認証状態の永続化
*
* 使用例:
* const { user, login, logout, isLoading } = useAuth();
*
* 依存:
* - axios for API calls
* - zustand for state management
* - jwt-decode for token parsing
*/
function useAuth() {
// Copilotがここから自動生成
}
6. メトリクスと改善
6.1 プロンプト品質の測定
interface PromptMetrics {
clarity: number; // 明確性 (0-10)
specificity: number; // 具体性 (0-10)
completeness: number; // 完全性 (0-10)
relevance: number; // 関連性 (0-10)
outputQuality: number; // 出力品質 (0-10)
}
function evaluatePrompt(prompt: string, output: string): PromptMetrics {
return {
clarity: assessClarity(prompt),
specificity: countSpecificRequirements(prompt),
completeness: checkCompleteness(prompt),
relevance: measureRelevance(output, prompt),
outputQuality: rateOutputQuality(output),
};
}
6.2 改善サイクル
graph TD
A[初期プロンプト] --> B[AI応答]
B --> C{満足度評価}
C -->|低| D[プロンプト改善]
D --> E[要素追加/修正]
E --> A
C -->|高| F[テンプレート化]
F --> G[チーム共有]
G --> H[標準化]
7. アンチパターンと対策
7.1 避けるべきプロンプト
| アンチパターン | 問題点 | 改善例 |
|---|---|---|
| 曖昧な指示 | "良いコードを書いて" | "SOLID原則に従ったコードを書いて" |
| 過度に長い | 1000行以上のプロンプト | 段階的に分割 |
| コンテキスト不足 | "エラーを直して" | エラーメッセージと環境情報を含める |
| 矛盾する要求 | "シンプルで高機能" | 優先順位を明確化 |
7.2 トラブルシューティング
問題: AIが的外れな回答をする
対策:
1. コンテキストを追加
2. 具体例を提供
3. 制約条件を明確化
4. 段階的に質問
問題: コードが動かない
対策:
1. 環境情報を詳細に提供
2. エラーメッセージを含める
3. 依存関係を明記
4. 最小再現コードを提供
8. 実践演習
8.1 練習問題
以下のタスクに対して、効果的なプロンプトを作成してください:
- 初級: Reactコンポーネントのユニットテスト作成
- 中級: マイクロサービス間の通信設計
- 上級: レガシーシステムのリファクタリング計画
8.2 模範解答例(上級)
## レガシーシステムリファクタリング計画の策定
### 現状分析
システム概要: 10年前のPHPモノリスアプリケーション
コード規模: 50万行
技術スタック: PHP 5.6, MySQL 5.7, jQuery
問題点:
- テストカバレッジ: 5%
- 密結合なアーキテクチャ
- セキュリティ脆弱性多数
- パフォーマンス劣化
### 目標
- マイクロサービス化
- テストカバレッジ80%
- モダンな技術スタックへ移行
- 段階的移行(ビジネス継続性確保)
### 制約
- 予算: 6ヶ月間、エンジニア5名
- ダウンタイム: 最大月1時間
- 既存機能の完全互換性
### 成果物要求
1. フェーズ別移行計画(ガントチャート含む)
2. 技術選定と根拠
3. リスク分析と対策
4. 各フェーズの成功指標
5. ロールバック計画
詳細な計画を策定してください。
まとめ
プロンプトエンジニアリングは、AI時代の開発者にとって必須スキルです。重要なポイント:
- 構造化: CRISPフレームワークで体系的に
- 具体性: 曖昧さを排除し、明確な指示を
- 段階的: 複雑なタスクは分割して
- 改善: メトリクスを測定し、継続的に最適化
- 共有: チームでベストプラクティスを蓄積
これらのテクニックを習得することで、AIを真のペアプログラマーとして活用し、開発生産性を飛躍的に向上させることができます。
次のアクション
- 本記事のテンプレートを使って実際にプロンプトを作成
- チーム内でプロンプトライブラリを構築
- 定期的なプロンプト改善セッションの実施
- AIツールの最新機能を追跡し、プロンプトを最適化
AIとの対話スキルを磨き、次世代の開発者として一歩先を行きましょう。
