🏠 ホーム ← Claude Codeの使い方 知識管理 →

title: "プロンプト工学" icon: "edit"

プロンプト工学

プロンプト(Prompt)とは、Claudeに与える「指示文」のことです。同じ内容を聞いても、プロンプトの書き方次第で結果の質が大きく変わります。この章では、高品質な回答を引き出すための実践的なテクニックを説明します。すべての原則が大事ですが、まずは「具体性」と「文脈」の2つを意識すれ十分です。


1. 原則1:具体的に書く(Be Specific)

一番大切な原則は「何をしてほしいかを具体的に伝える」ことです。漠然とした指示ほど、Claudeの回答も漠然としたものになります。

具体性のレベル

漠然度(高)
 │
  │ 「コードを直して」              ← まず回答されない
  │
  │  「Pythonでエラーを直して」        ← どのファイルかわからない
  │
  │  「auth.pyのログイン関数を修正」    ← まだ不够
  │
  低
  │  「auth.pyの authenticate_user() に、空文字チェックと
  │   パスワード長さチェック(8文字以上)を追加し、
  │   エラー時は ValueError を投げてほしい」

具体的であればあるほど、Claudeは意図を正確に理解和実行できます。文件名、行番号、関数名を指定する習慣をつけましょう。

具体性の実例

状况 漠然とした指示 具体的な指示
バグ修正 「コードを直して」 auth.py の25行目〜40行目のログイン関数に空文字チェックを追加して」
関数作成 「排序の関数を作って」 「整数の配列を昇順に排序する関数を作ってください。引数と戻り値の型も教えてください」
エラー対応 「動きません」 pip install requests を実行すると SSLError が出る。原因と解決方法を教えてください」

2. 原則2:文脈を与える(Give Context)

「なぜそれが必要か」「最終的な目標は何か」を伝えることで、Claudeはより適切なアドバイスができます。文脈がない状况では、Claudeは最も一般的な解答しがちです。

文脈があれば的回答が変わる例

# 文脈なし(不利な例)
# 「このコードのエラーを修正して」
def process(data):
    return data.upper()

# 文脈あり(良い例)
# 「Eコマースの注文処理システムで使っています。
#顧客名が空でも処理が進んでしまう問題を修正したい。
#  このコードのエラーを修正してください」
def process(data):
    return data.upper()

文脈を与えることで、Claudeは「空文字チェックが必要」「注文データなのでNULL考慮が必要」など、表面的な修正以上のアドバイスをくれます。

文脈として有効な情報


3. 原則3:複雑な作業は分割する(Break Down Tasks)

大きな任務は、一度に指示せず小さな手順に分割しましょう。Claudeは一度に処理できる情報量(コンテキスト)に制限があります。すべての要素を同時に指示すると、それぞれが浅くなりがちです。

一括指示 vs 分割指示

❌ 一括指示(不利):
「ユーザー登録機能を作って。DB設計も、APIエンドポイントも、
バリデーションも全部やって」

 → Claudeが疲れ果てる(コンテキスト限界)
 → どれも中途半端になる

✅ 分割指示(良い):
「まずDB設計から。ユーザーはID、名前、メールアドレス、パスワード、
 作成日時が必要。設計だけ見せてください」

 → 回答を確認
 → 「次に、この設計に基づいて usersテーブルを作成するSQLを見せてください」

 → 回答を確認
 → 「そのテーブルにデータを挿入するAPIエンドポイントをFlaskで作成して」
分割指示の流れる:

Step 1: 「DB設計を見せてください」 →確認OK
 ↓
Step 2: 「SQLで見せてください」   → 確認OK
      ↓
Step 3: 「APIを作ってください」 → 完成

「まずXを見せてください。それが終わったらYをお願いします」と伝えるだけで、結果の品質が大きく上がります。


4. 原則4:コードだけでなく「説明」も求める

「動くコード」は得られたけど「なぜそうなるのか」がわからないと、次に類似问题时自力で解決できません。常に「なぜ」を尋ねる習慣をつけましょう。

説明を求めるプロンプト例

「この正規表現を説明してください。そして、自分が似た場面で
使えるようになるためのポイントを3つ教えてください」

「このコードなぜ効率的なのか?計算量を説明して ,
 そして他の方法とのトレードオフも教えて」

「この関数の引数设计の意図を教えてください。
 どんな場合にこの设计的优点が活きるのかもお願いします」

「動くけど理解できないコード」は、実質的なスキルにはなりません。説明を求めることで、次に類似问题时自力で解決できるようになります。


5. Chain of Thought(思考の連鎖)

複雑な推論が必要な问题时、think step by step(一歩一歩考えて)と一言添えるだけで、Claudeの回答の質が劇的に向上します。これは Chain of Thought(思考の連鎖)と呼ばれるテクニックです。

通常の回答 vs Chain of Thought

❌ 通常:
「12,345 × 67 を計算して」
→ 826,515 (答えだけ出力。過程が見えない)

✅ Chain of Thought:
「12,345 × 67 を計算して。step by stepで考えて」
→ 12,345 × 67 を計算します。
→まず 12,345 × 60 = 740,700
→ 次に 12,345 × 7 = 86,415
→ 合計: 740,700 + 86,415 = 827,115
→ ※検算: 827,115 ÷ 67 = 12,345 ✓

実用的な Chain of Thought の使い方

「このバグの原因を step by stepで分析してください」

「Pythonでのソートアルゴリズムを選択する基準を step by stepで
 説明して、それに基づいて私のケースに最适合なものを推荐して」

「キャッシュ失效の問題考えられる原因を step by stepで列挙して、
 それぞれの解決策もお願いします」

複雑な问题时、Claudeは途中で思考を間違うこともあります。その場合は「その推論の●手续が理解できません。もう一度お願いします」とフィードバックしましょう。


6. デバッグ:しくない回答が返ってきたとき

Claudeの回答が不正确な場合、責めるのではなくプロンプトを言い換えることを试试。AIは意见すれば変わる生き物なので、同じ失敗を責めるより、視点を変えて再说得効果的です。

デバッグの手引き

状况 尝试する对策
回答が的外れ 文脈を追加する(コード片・目标的を貼り付け)
解決策が動かない エラーメッセージをそのまま貼り付ける
解決策が複雑すぎる 「もっと简单な方法は?""と问う
推論が間違う step by stepを添えて推論过程を見せる
コードが古臭い 「现代的なPythonではどう書きますか?」と问う
欲しい结果と違う 「○○の观点は考虑されていますか?」と补足

具体例

❌ 責める言い方:
「さっきの答え错误でした。やり直して」

✅改善を求める言い方:
「それは试しましたが ‘ModuleNotFoundError’ が出ました。
 エラーメッセージ: [ここに貼り付け]
 原因と修正方法をstep by stepで教えてください」

エラーメッセージをそのまま貼り付けるのは、最もシンプルで効果的なデバッグテクニックです。エラー文には原因の手がかりが必ず含まれているので、Claudeに渡すことで正確な原因を探ってもらえます。


7. ロール・プロンプト(Role Prompting)

「あなたは〇〇の専門家です」と役割を与えると、専門家の知識が激活されて回答の質が上がります。これは Role Prompting(ロール・プロンプト)と呼ばれるテクニックです。

ロール・プロンプトの効果

❌ 役割なし:
「配列から重複を削除する方法を教えて」
→ set()を使う方法などの基本的な回答

✅ 役割あり:
「あなたはPythonのSenior Engineerです。配列から重複を削除する
 方法を教えて。実務での選択基準も教えてください」
→ set()の方法に加え、「辞書の順序維持が必要な場合は dict.fromkeys()」
 「大規模データでは NumPy の unique()」など、実務的な知識が加わる

実用的なロール例

役割 効果
Python Expert 最新のPythonicな書き方で回答
Code Reviewer バグ・改善点を具体的に指摘
Teacher 初心者のレベルに合わせて説明
Debugging Expert システム的なデバッグ手順を提案
Security Engineer セキュリティ上のリスクを指摘

ロールを指定する場合は、「あなたは○○です」加上「〜这样的回答が欲しい」と付け加えると、より望む结果に近づけます。


8. 反復的アプローチ:少しずつ確かめながら進める

Claudeと効率的に作業するには、一度に完璧を求めすぎないことが大事です。小さな一歩ずつ確認しながら進めると、失敗した際のやり直しコストを最小化できます。

反復的アプローチ

❌ 一度に完美を求める(非効率):
「全部作った」→「错误了大量」→「どこが悪いのかわからない」

✅ 小さな一歩ずつ確認(効率的):
「まず設計だけ見せてください」 → OK?
  「次に骨組みを見せてください」 → OK?
    「そこにロジックを追加してください」 → OK?
      「完成!」 → 最初から全部正しい

确认しやすい指示の例

「まず、このログイン処理のフローチャートを見せてください」

「次に、HTMLフォームの雛形を見せてください」

「そのフォームから受け取ったデータを处理する部分を書いてください」

「最後に、错误处理的を追加してください」

こうすることで、最悪の場合でも「やり直す範囲」が一小部分で済みます。最初から全部を作らせると、問題の切り分けが難しくなります。


9. 制約・条件を指定する

Claudeに「こうなってほしい」と期望を伝えるのではなく、「这样的条件を満たす」ことを明確に指定すると、より精确な回答になります。

制約を指定する例

制約の種類 指示例
言語バージョン 「Python 3.10以前的语法で書いてください」
性能制約 「処理时间是100ms以内に収めてください」
ファイル構成 「单一行80文字、importはアルファベット順に並べてください」
既存の风格 「既存のコード同样的风格に合わせてください(例: snake_case)」
外部依存 「追加のライブラリ不使用。標準ライブラリだけ使ってください」
❌ 漠然とした期望:
「シンプルなコードで書いてください」

✅ 明確な制約:
「標準ライブラリだけ使い、行数を20行以内に抑えてください。
 variable名はすべて snake_case で統一してください」

制約を指定することで、Claudeが「最も简单な方法」を選びやすくなります。また、後からコードレビューする際にも、判断基準が明确なので检查がしやすくなります。


10. 出力形式を指定する

Claudeに「这样帮我整理成表格好吗?」のように、出力形式を指定できます。報告や資料作成時に有効です。

出力形式の指定例

「APIエンドポイントを以下の表格で整理してください:
| エンドポイント | HTTPメソッド | 説明 |」

「引数の型とデフォルト値を以下の形式で見せてください:
- arg1: str (必須) —説明
- arg2: int = 10 (任意) — 説明」

「エラーケースを以下の形式で列挙してください:
【ケース名】原因と対策を簡単に」

コードの出力形式も指定可能

「TypeScriptで書かれたReactコンポーネントを、
以下の约束事项を守って書いてください:
- FC<Event> 型をexport
- CSS Modules を使って
- Storybook のストーリーファイルも同時に生成」

出力形式を指定すると、Claudeの回答が後で使いやすくなります。受け取った後に手作業で整形する必要がなくなります。


11. まとめ:良いプロンプトの条件

ここまでの原則を整理します。

原則 やること 効果
具体性 「どのファイルのどの部分」を明確に 正確な回答
文脈 コード・目標・制約を添付 適切なアドバイス
分割 複雑な任務は小步骤に 品質維持
説明を求める 「なぜ」を常に尋ねる 理解の深まり
Chain of Thought step by stepを添える 複雑な推論の正確化
デバッグ プロンプトを言い換える 的外れ回答の修正
ロール指定 専門家役割を付与 専門知識の激活
良いプロンプト = 具体性 + 文脈 + 分割 + 説明要求
      ↓
 「何を」「なぜ」「どの範囲で」
 を明確にした指示文

これらの原則を組み合わせることで、Claude Codeの可能性を最大限度に引き出すことができます。すべてを思い出すのは難しいので、まずは「具体性」と「文脈」の2つを意識してみましょう。この2つだけで、回答の品質は劇的に向上します。

次の章では、実際のプロジェクトでClaude Codeを活用する実践的な方法を学びます。