効果的なプロンプトパターン
ストーリー
「基本原則はわかったと思う。でも、毎回ゼロから考えるのは大変だろ?」
中島先輩がスマホのメモアプリを見せた。そこにはプロンプトのテンプレート集があった。
「俺はよく使うパターンをストックしてるんだ。パターンを知ってれば、 どんな場面でもすぐに高品質なプロンプトが書ける」
「デザインパターンみたいなものですか?」
「まさにそうだ。プロンプトにもパターンがある。今日はそれを伝授しよう」
パターン1: ロール設定パターン
AIに特定の役割を与えることで、回答の専門性と品質を向上させます。
基本構文
あなたは[専門家の役割]です。
[経験年数]年の経験があり、[特定のスキル]に精通しています。
実践例
あなたはTypeScriptのシニアエンジニアです。
10年の開発経験があり、特にクリーンアーキテクチャと
テスト駆動開発に精通しています。
以下のコードをレビューしてください。
可読性、パフォーマンス、テスタビリティの観点から
改善点を指摘してください。
[コードを貼り付け]
ロール設定のバリエーション
| ロール | 使いどころ |
|---|---|
| シニアエンジニア | コードレビュー、設計相談 |
| セキュリティエキスパート | セキュリティ監査、脆弱性チェック |
| テクニカルライター | ドキュメント作成、README |
| コードレビュアー | PR レビューの下書き |
| 初心者向け講師 | 技術概念の説明 |
| DBAスペシャリスト | クエリ最適化、スキーマ設計 |
パターン2: コンテキスト設定パターン
背景情報を明確に伝えることで、状況に合った回答を引き出します。
基本構文
背景:
- プロジェクト: [プロジェクトの説明]
- 技術スタック: [使用技術]
- チーム: [チームの状況]
- 制約: [ビジネス/技術的制約]
実践例
背景:
- プロジェクト: 社内の勤怠管理システムのリプレース
- 技術スタック: Next.js 14, TypeScript, Prisma, PostgreSQL
- チーム: フロントエンド2名、バックエンド1名の小規模チーム
- 制約: 3ヶ月以内にリリース、既存データの移行が必要
この背景を踏まえて、ユーザー認証機能の実装方針を提案してください。
選択肢ごとのメリット・デメリットを表形式で示してください。
パターン3: 出力形式指定パターン
出力の形式を明確に指定することで、使い やすい回答を得られます。
よく使う出力形式
■ コード形式
「TypeScriptのコードで出力してください。JSDocコメント付きで。」
■ 表形式
「以下の列を持つ表で比較してください:
| 項目 | 方法A | 方法B | 推奨 |」
■ リスト形式
「箇条書きで5つ以内にまとめてください」
■ ステップ形式
「手順を番号付きリストで説明してください」
■ JSON形式
「以下のJSON構造で出力してください:
{
"summary": "概要",
"details": ["詳細1", "詳細2"],
"recommendation": "推奨事項"
}」
実践例:表形式の出力
Node.jsのWebフレームワークを比較してください。
以下の表形式で出力してください:
| フレームワーク | 学習コスト | パフォーマンス | エコシステム | TypeScript対応 | 推奨ケース |
パターン4: 制約条件パターン
やってほしいことだけでなく、やってほしくないことも明示します。
基本構文
以下の制約を守ってください:
- してほしいこと: [DO]
- してほしくないこと: [DON'T]
実践例
Reactコンポーネントを作成してください。
してほしいこと:
- 関数コンポーネントで書く
- TypeScriptの型を厳密に定義する
- React Hooks を使用する
- エラーバウンダリを考慮する
してほしくないこと:
- クラスコンポーネントは使わない
- anyは使わない
- useEffectの中で直接fetchしない
- インラインスタイルは使わない
パターン5: 段階的指示パターン
複雑なタスクを段階的に指示することで、各段階の品質を確保します。
基本構文
以下のステップで作業を進めてください。
各ステップの結果を確認してから次に進みます。
Step 1: [最初のタスク]
Step 2: [次のタスク]
Step 3: [最終タスク]
まずStep 1から始めてください。
実践例
ユーザー管理機能を段階的に実装していきます。
Step 1: データモデルの定義
- Prismaスキーマでユーザーテーブルを定義し てください
- フィールド: id, email, name, role, createdAt, updatedAt
まずStep 1を実装してください。
確認後にStep 2(リポジトリ層)に進みます。
パターン6: Before/After パターン
変換の入力と期待する出力を示して、変換ルールを理解させます。
実践例
以下のJavaScriptコードをTypeScriptに変換してください。
Before (JavaScript):
function fetchUser(id) {
return fetch(`/api/users/${id}`)
.then(res => res.json())
.then(data => data.user);
}
After (TypeScript) の期待する形式:
- async/await を使用
- 戻り値の型を定義
- エラーハンドリングを追加
- 引数の型を明示
パターンの組み合わせ
実務では複数のパターンを組み合わせて使います。
組み合わせ例:本格的なコードレビュー依頼
[ロール設定]
あなたはセキュリティに詳しいシニアTypeScriptエンジニアです。
[コンテキスト]
背景: ECサイトの決済処理のコードレビューです。
技術スタック: Node.js, Express, TypeScript, Stripe API
[タスク]
以下のコードをレビューしてください。
[制約]
レビュー観点:
1. セキュ リティ(入力バリデーション、認証、OWASP Top 10)
2. エラーハンドリング(例外処理、リトライ戦略)
3. コード品質(型安全性、可読性)
レビューしないこと:
- コードスタイル(フォーマッタで管理しているため)
[出力形式]
以下の形式で指摘してください:
| 重要度 | 行番号 | カテゴリ | 指摘内容 | 修正案 |
重要度は Critical / Warning / Info の3段階で。
[入力データ]
// --- コードここから ---
[コードを貼り付け]
// --- コードここまで ---
まとめ
| パターン | 用途 | ポイント |
|---|---|---|
| ロール設定 | 専門的な回答を得たい | 具体的な専門性を指定 |
| コンテキスト設定 | 状況に合った回答を得たい | 背景情報を構造化して伝える |
| 出力形式指定 | 使いやすい形式で回答を得たい | 表、コード、JSONなど明示 |
| 制約条件 | やってほしくないことを防ぐ | DO/DON'T を明確に |
| 段階的指示 | 複雑なタスクを正確に進めたい | ステップに分割 |
| Before/After | 変換ルールを伝えたい | 入出力の具体例を提示 |
チェックリスト
- 6つのプロンプトパターンの用途を理解した
- ロール設定パターンを実践できる
- 出力形式を指定して期待通りの回答を得られる
- 複数パターンを組み合わせた高品質なプロンプトを書ける
次のステップへ
プロンプトパターンをマスターしたら、次はさらに高度なテクニック「Few-shot」と「Chain-of-Thought」を学びます。
これらを使うと、AIの推論能力を最大限に引き出せます。
推定読了時間: 30分