LLMに対して、意図した出力を引き出すための入力(プロンプト)を設計・改善する技術。モデルの重みは変えない。
【位置づけ】
あなた → [プロンプト] → LLM → [レスポンス]
↑
ここを設計・改善する技術
ファインチューニング → モデルの重みを書き換える・コスト高
プロンプトエンジニアリング → 入力の工夫のみ・今日から始められる
APIの引数設計と同じ発想で考えると分かりやすい。渡す情報が具体的なほど、期待通りのレスポンスが返る。
❌ fetch('/api/data')
✅ fetch('/api/users?role=admin&status=active&limit=10')
💡 ポイント: ファインチューニングはモデル自体を変えるが、プロンプトエンジニアリングは入力だけで勝負する。まずここから始めるのが正解。
| 用語 | 説明 |
|---|---|
| プロンプト | LLMへの入力テキスト全体 |
| ファインチューニング | モデルの重みを追加学習で書き換えること |
| Zero-shot | 例なしで指示だけ与えるプロンプト |
| Few-shot | 例を2〜5個添えて出力を制御するプロンプト |
P - Persona → 誰として答えるか(例:「Next.js専門のシニアエンジニア」)
T - Task → 何をしてほしいか ← 唯一の必須要素
C - Context → 背景・前提条件(バージョン・チーム規模・現状の課題)
F - Format → 出力の構造・長さ(Markdown・表・コード・文字数)
E - Examples → 期待する入出力の見本(Few-shotと組み合わせる)
R - Restrictions → やってはいけないこと(否定形指示はここに集約)
# P
あなたはNext.js専門のシニアエンジニアです。
# T
App RouterのServer Actionsにおけるエラーハンドリングのベストプラクティスを説明してください。
# C
- Next.js 14 + Supabase使用
- チーム3人・Next.js歴1年未満
# F
- Markdown形式・TypeScriptのコードブロック付き・500字以内
# E
悪い例と良い例をそれぞれ1つずつ示してください。
# R
- Pages Routerの内容は含めない
- 外部ライブラリ導入前提の解決策は除外
💡 ポイント: TだけのプロンプトはZero-shot。C・F・Eを足すほど出力が安定する。否定形指示はRに集約する。
| 用語 | 説明 |
|---|---|
| Persona | LLMに演じさせる役割・専門家像 |
| Restrictions | 禁止事項。否定形の指示はすべてここに集約 |
【通常のプロンプト】
問い → 即答 ← 複雑な問題だと精度が落ちやすい
【CoTプロンプト】
問い → ステップ1 → ステップ2 → ステップ3 → 答え ← 精度が上がる
# Zero-shot CoT(最もよく使う)
以下の要件でSupabaseのRLSポリシーを設計してください。
ステップバイステップで考えてから、最終的なSQLを出力してください。
要件:
- usersテーブルへのSELECTは本人のみ許可
- INSERTは認証済みユーザーなら誰でも可
- DELETEは管理者ロールのみ許可
# Few-shot CoT(出力形式を揃えたいとき)
バグの原因を以下の形式で分析してください。
例)
コード: const data = res.json()
分析:
- 観察: awaitがない
- 原因: res.json()はPromiseを返すが解決前に使っている
- 修正: const data = await res.json()
本題)
コード: const { data } = supabase.from('posts').select('*')
| CoT向き | CoT不要 |
|---|---|
| 複雑な推論・設計 | 翻訳・フォーマット変換 |
| バグ原因分析 | 箇条書きへの整形 |
| RLSポリシー設計 | 単純な分類タスク |
💡 ポイント: 単純タスクにCoTを使うと回答が冗長になるだけ。「複雑な推論が必要か?」を判断基準にする。
【CoT:1本道】
問い → ステップ1 → ステップ2 → ステップ3 → 答え
【ToT:木構造】
┌→ 経路A → A1 → A2 → ✅ 採用
問い → 起点 ├→ 経路B → B1 → ❌ 行き詰まり → 枝刈り
└→ 経路C → C1 → C2 → C3 → 比較対象
Next.js + Supabaseの認証方式を設計してください。
# Step1:候補を3つ出す
# Step2:各候補を実装コスト・セキュリティ・UXで評価する
# Step3:最良案を選んで実装方針を示す
前提:Google OAuth必須・管理者/一般ユーザーの権限分離が必要
| CoTを使う場面 | ToTを使う場面 |
|---|---|
| 答えが1つに収束する問題 | 複数の選択肢を比較したい |
| バグの原因分析 | アーキテクチャ・DB設計 |
| 順序立てた推論が必要 | トレードオフの意思決定 |
💡 ポイント: ToT → CoT の順で使うのがプロの流れ。「ToTで選択肢を絞ってからCoTで深掘り」が最強の組み合わせ。
Zero-shot:例なし → 指示だけで判断させる
One-shot :例1つ → なんとなく形式が伝わる
Few-shot :例2〜5つ → 形式・粒度・トーンが安定する
以下の形式でエラーログを分類してください。
例1)
入力: "JWT expired at 2026-03-31T10:00:00Z"
出力: { "category": "認証エラー", "severity": "medium", "action": "再ログインを促す" }
例2)
入力: "relation 'users' does not exist"
出力: { "category": "DBエラー", "severity": "high", "action": "マイグレーションを確認" }
例3)
入力: "new row violates row-level security policy"
出力: { "category": "権限エラー", "severity": "high", "action": "RLSポリシーを見直す" }
本題)
入力: "invalid input syntax for type uuid"
出力:
| 良い例の条件 | 悪い例の条件 |
|---|---|
| エッジケースをカバー | 全部似たようなケース |
| 形式が完全に統一 | 微妙に形式がバラバラ |
| 2〜5個(多すぎない) | 1個だけ(不安定) |
💡 ポイント: Few-shotは「例の質」が命。曖昧な例を入れると曖昧な出力が返ってくる。PTCFE/RのE(Examples)と実質同じ概念。
【通常のフロー】
あなた → プロンプトを書く → LLM → 出力
【Meta-promptingのフロー】
あなた → 「プロンプトを作って」→ LLM → プロンプト生成
↓
あなた → 生成されたプロンプトを微調整 → LLM → 出力
# Step1:プロンプトを作らせる
以下のタスクに対して、PTCFE/Rフレームワークに従った最適なプロンプトを作成してください。
タスク:Supabaseのテーブル設計をレビューして正規化の問題点とRLSの抜け漏れを指摘してほしい
状況:Next.js 14・チーム3人・テーブル数8個
# Step2:生成されたプロンプトを自分でレビュー・微調整する
# Step3:実際のテーブル設計を貼って使う
| Meta-prompting向き | 向いていない |
|---|---|
| プロンプト設計に慣れていない | 1回限りの単純な質問 |
| 繰り返し使うテンプレートを整備したい | 急いでいるとき(2段階になる) |
| チームで標準プロンプトを共有したい | — |
💡 ポイント: 生成されたプロンプトはそのまま使わず、必ず自分でレビューして微調整する。LLMが作ったプロンプトにも抜け漏れはある。
コンサル的な調査タスクは「情報が散らかっている状態から、構造化された示唆を出す」プロセス。LLMはこのプロセスの各ステップを加速できる。
① 情報の構造化(インプット整理)
# P
あなたはマッキンゼー出身のストラテジストです。
# T
以下の情報を構造化して、MECE(漏れなくダブりなく)に整理してください。
# C
[調査メモや議事録などのテキストをここに貼る]
# F
- 大項目3〜5個、各項目に小項目2〜3個
- Markdownの見出しと箇条書きで出力
- 1000字以内
# R
- 解釈・示唆は含めない(事実の整理のみ)
② 競合・市場調査の要約
# T
以下の競合他社の情報を比較分析してください。
# C
[各社の情報をここに貼る]
# F
| 企業名 | 強み | 弱み | 差別化ポイント | 脅威度(高/中/低) |
の表形式で出力。最後に「総評(3行以内)」を追記。
# R
- 推測に基づく情報には「※推定」と明記
- 公開情報の範囲を超えた断定をしない
③ 示唆・提言の生成(ToT + CoT の組み合わせ)
# T
以下の調査結果をもとに、戦略提言を3案作成し、最良案を推薦してください。
# C
[調査結果サマリー]
制約:予算500万・期間6ヶ月・チーム3人
# F
Step1: 提言候補を3案出す(各案:タイトル+根拠+リスク)
Step2: 実現可能性・インパクト・リスクで評価
Step3: 推奨案を選び、実行ステップを3つ示す
④ レポート・スライド構成の生成
# T
以下の調査内容をもとに、経営陣向けの報告スライドの構成案を作成してください。
# F
- スライド枚数:10枚以内
- 各スライドに「タイトル」「伝えたいメッセージ1文」「コンテンツ概要」を記載
- エグゼクティブサマリー(1枚目)から始める
# R
- 詳細データの羅列はしない
- 各スライドのメッセージは結論から始める(BLUF形式)
💡 ポイント: コンサル調査での最大の失敗は「出力形式を指定しないこと」。表・MECE構造・スライド構成など、形式を先に決めると情報密度が劇的に上がる。
| 用語 | 説明 |
|---|---|
| MECE | Mutually Exclusive, Collectively Exhaustive(漏れなくダブりなく) |
| BLUF | Bottom Line Up Front(結論から先に述べる文書スタイル) |
| エグゼクティブサマリー | 報告書の冒頭に置く全体要約(意思決定者向け) |
コーディングタスクのプロンプトは「仕様書」として書く意識が重要。曖昧な依頼は曖昧なコードを生む。
① 新規実装(仕様から生成)
# P
あなたはNext.js 14とTypeScriptに精通したシニアエンジニアです。
# T
以下の仕様でSupabaseのRLSポリシーとServer Actionを実装してください。
# C
- Next.js 14 App Router / TypeScript / Supabase
- postsテーブル:id, user_id, title, content, is_published
- 要件:
- 一般ユーザー:自分のpostのみCRUD可、published=trueのpostはSELECT可
- 管理者:全post操作可
# F
- RLS SQLと Server Action(TypeScript)を別々のコードブロックで出力
- 各コードにインラインコメントを付ける
- 最後に「ハマりやすいポイント」を箇条書きで追記
# R
- Pagesルーターの書き方は使わない
- any型の使用禁止
② バグ修正(CoT + Few-shot)
# T
以下のエラーの原因を分析し、修正済みコードを出力してください。
# C
- 環境:Next.js 14 App Router / Supabase Auth
- エラー:[エラーメッセージをそのまま貼る]
- 発生箇所:[該当コードを貼る]
# F
Step1: エラーの原因を1文で説明
Step2: 根本原因を3行以内で説明
Step3: 修正済みコードを出力(変更箇所に // FIXED コメント付き)
Step4: 再発防止のために注意すべき点を1つ挙げる
③ コードレビュー(観点を指定する)
# T
以下のコードをレビューしてください。
# C
[コードをここに貼る]
技術スタック:Next.js 14 / TypeScript / Supabase
# F
以下の観点ごとに問題点を列挙してください:
1. セキュリティ(RLS・認証・XSSなど)
2. 型安全性(any使用・型推論の漏れ)
3. パフォーマンス(不要なre-render・N+1など)
4. 可読性・保守性
深刻度(🔴高 / 🟡中 / 🟢低)を各指摘に付けてください。
# R
- 問題がない観点は「問題なし」とだけ記載
- 修正方法の提案は指摘の後に1つだけ示す
④ テストコード生成
# T
以下の関数に対するユニットテストを生成してください。
# C
[テスト対象の関数コードを貼る]
テストフレームワーク:Vitest / Testing Library
# F
- 正常系・異常系・エッジケースをそれぞれ最低1つずつ
- describe / it のネスト構造で出力
- モックが必要な場合はvi.mock()を使用
# E
正常系の例:
it('should return user data when valid id is provided', async () => {
...
})
⑤ リファクタリング(制約を明示する)
# T
以下のコードを1関数1責務の原則でリファクタリングしてください。
# C
[リファクタリング対象コードを貼る]
# F
- Before / After の形式で出力
- 変更した理由を各関数の上にコメントで追記
- 型定義(interface / type)も整理する
# R
- 外部ライブラリを新たに導入しない
- 既存のAPIレスポンス形式を変えない
- any型を使わない
💡 ポイント: コーディングプロンプトで最もよくある失敗は「環境情報の省略」。Next.jsのバージョン・ルーターの種類(App/Pages)・使用ライブラリを書くだけで、的外れなコードが激減する。
| 用語 | 説明 |
|---|---|
| FIXED コメント | 修正箇所を明示するインラインコメント慣習 |
| N+1問題 | ループ内でDBクエリが発行され続けるパフォーマンス問題 |
| 1関数1責務 | Single Responsibility Principle。1つの関数は1つのことだけをする |
| ミス | 原因 | 改善策 |
|---|---|---|
| 指示が曖昧(「良い感じに」) | 成果物のイメージが自分の中にない | 具体的な形式・成果物を先に決める |
| 否定形だけで指示 | 何をすべきかではなく何をしないかを伝えている | 肯定形で「何をすべきか」を伝え、否定形はRにまとめる |
| 文脈を省きすぎ | 自分には自明だからと書かない | バージョン・チーム規模・現状の課題を明記する |
| 1プロンプトに詰め込みすぎ | 「一発で終わらせたい」心理 | タスクを分割して複数回に分ける |
| 出力形式を指定しない | 形式より内容を重視している | 形式・長さ・構造を先に決めてFに書く |
| 一発で完璧を求める | 完璧主義 | 投げる→評価→修正→再投げ のサイクルを回す |
| CoTを何でも使う | テクニックを使いたい心理 | 複雑な推論タスクにだけ使う |
| Few-shotの例が雑 | 例を「おまけ」だと思っている | 例の形式を完全に統一する・エッジケースを入れる |
| 環境情報を省く(コーディング) | 自明だと思い込んでいる | Next.jsバージョン・Router種別・ライブラリを必ず明記 |
| 調査結果をそのまま貼る(コンサル) | LLMが勝手に整理してくれると期待 | 出力形式(表・MECE構造など)を先に指定する |
ToT → CoT の順 が実務で最も使えるパターン。設計系タスクはまずToTで選択肢を出してからCoTで深掘りする流れを試してみたい。
Meta-prompting は PTCFE/R に慣れるまでの補助輪としても使える。生成されたプロンプトを読むことで「何を指定すべきか」の感覚が身につく。
Few-shotとPTCFE/RのE(Examples)は実質同じもの。フレームワークとテクニックが繋がっている。
コンサル調査での最大の失敗は出力形式の未指定。表・MECE構造・スライド構成など、形式を先に決めると情報密度が劇的に上がる。
コーディングプロンプトは「仕様書」として書く意識が重要。曖昧な依頼は曖昧なコードを生む。Next.jsのバージョンとRouter種別を書くだけで品質が変わる。
コードレビュー観点の指定が重要。「レビューして」だけでは観点がバラバラになる。セキュリティ・型安全性・パフォーマンス・可読性を観点として明示すると網羅性が上がる。
コンサルと開発で共通する原則:「形式を先に決める」「タスクを分割する」「評価サイクルを回す」。PTCFE/Rはどちらのユースケースにもそのまま適用できる。