プロンプトエンジニアリングとは
プロンプトエンジニアリングは、Claude からより正確で高品質な回答を引き出すためにプロンプトを設計・改良する技術です。質問の言い回しをわずかに変えるだけで、まったく異なる結果が得られることがあります。Claude の能力と制限を理解することで、一貫して高品質な出力を生成するプロンプトを作成できます。
システムプロンプト
システムプロンプトは会話全体のコンテキストと動作を設定します。実際のクエリの前に処理され、Claude の回答をガイドする見えない指示として機能します。
システムプロンプトの使用方法
システムプロンプト:
あなたはソフトウェアドキュメンテーション専門の技術ライターです。
常に明確な見出しと簡潔な説明で回答を構成してください。
複雑な概念を説明するために例を使用してください。
専門用語は最初に定義してから使用してください。
システムプロンプトは以下の場合に特に効果的です:
- 専門的なトーンやパーソナリティの確立
- アシスタントの役割や専門知識の定義
- 出力形式の要件の指定
- 制約やガイドラインの設定
Claude.ai ではプロジェクト設定でシステムプロンプトを設定できます。API では、リクエストの system パラメータを使用します。
少数ショット例 (コンテキスト内学習)
少数ショット例は、実際の問題を解く前に目的のパターンを示すことで、Claude に応答方法を教えます。この技法は長い説明よりも効果的です。
例: テキスト分類
感情分類の例を以下に示します:
入力: 「この製品は素晴らしい! 大好きです。」
分類: POSITIVE
入力: 「1週間で壊れました。とても失望しました。」
分類: NEGATIVE
入力: 「まあまあですね。特に特別なものではありませんが、機能します。」
分類: NEUTRAL
次のテキストを分類してください: 「カスタマーサービスは役に立たず、失礼でした。」
分類:
少数ショットプロンプトが効果的なのは、Claude が具体的な例からパターンを学ぶからです。特に以下の場合に役立ちます:
- タスクが特定のフォーマット要件を持つ場合
- 多くのアイテム全体で一貫したカテゴリ分けが必要な場合
- カスタムカテゴリやラベルを定義する必要がある場合
- 標準的な指示が目的の形式を生成していない場合
思考の連鎖 (チェーン・オブ・ソート)
思考の連鎖プロンプトは、Claude に最終答を提供する前にステップごとに推論を説明するよう求めます。このテクニックは、複雑な問題解決と推論タスクの精度を向上させます。
思考の連鎖なし
Q: 列車が時速 40 マイルで 120 マイルを移動します。旅行にかかる時間は?
A: 3時間
思考の連鎖あり
Q: 列車が時速 40 マイルで 120 マイルを移動します。旅行にかかる時間は?
ステップごとに考えてください:
1. わかっていることを特定する
2. 関連する公式を書く
3. 計算を実行する
4. 答えを述べる
A:
Claude は自然に各ステップを説明し、より正確で検証可能な結果をもたらします。これは以下の場合に非常に価値があります:
- 複雑な計算と推論
- 意思決定プロセス
- デバッグとトラブルシューティング
- 学問的または技術的な問題
構造化のための XML タグ
XML タグは複雑なプロンプトを整理し、リクエストのさまざまな部分を明確に分離するのに役立ちます。プロンプトを理解しやすく、解析しやすくするビジュアルデリミタとして機能します。
XML タグを使った構造化リクエスト
<task>
ワイヤレスヘッドフォンの製品説明を書く
</task>
<requirements>
- 最大150文字
- ターゲットオーディエンス: プロフェッショナル
- バッテリー駆動時間と音質を強調する
- 主要な技術仕様を1つ含める
</requirements>
<tone>
プロフェッショナルだが親しみやすい
</tone>
<format>
見出しで始めて、その後2つのパラグラフを続ける
</format>
XML タグが効果的な理由:
- リクエストのさまざまなタイプの情報を明確に分離する
- Claude がリクエストの構造を簡単に識別できる
- 複雑なマルチパートリクエストに特に効果的
- 複数のプロンプトで使用する場合の一貫性を向上させる
出力フォーマット仕様
目的の出力形式を明示することで、結果の品質が大幅に向上します。Claude が正しい形式を推測することを期待する代わりに、求めるものを正確に指定してください。
JSON 出力の指定
テック スタートアップのための 5 つのクリエイティブなビジネス名のアイデアを生成します。
このような構造の JSON として返します:
{
"names": [
{
"name": "string",
"reasoning": "string"
}
]
}
Markdown テーブルの指定
Python、JavaScript、Go を 5 つの次元にわたって比較してください。
言語を列、次元を行として markdown テーブルとしてフォーマットします。
リストと箇条書きの指定
リモートワーカーのための 10 大生産性のヒントを列挙します。
簡潔な 1 行の説明付きの番号付きリストとしてフォーマットします。
各アイテムには実践的なアクションステップが含まれている必要があります。
テクニックの組み合わせ: 完全な例
あなたはエキスパートな Python コードレビュアーです。あなたの役割は、バグを特定し、
改善を提案し、改善を明確に説明することです。
コードをレビューする方法は次のとおりです:
1. バグまたは論理エラーがないか確認する
2. パフォーマンスの改善を提案する
3. ベストプラクティスを推奨する
4. 各提案を簡単に説明する
レビューを次のようにフォーマットしてください:
- **見つかったバグ:** [問題の一覧]
- **パフォーマンス:** [最適化の提案]
- **ベストプラクティス:** [推奨事項]
このコードをレビューしてください:
[コード スニペットをここに]
レビューを提供する前に、潜在的な問題をステップごとに考えてください。
この例では以下が組み合わされています:
- システムプロンプト (役割の定義)
- 少数ショット例 (フォーマットのデモンストレーション)
- 出力仕様 (構造化形式)
- 思考の連鎖 (段階的な思考)
テストと反復
プロンプトエンジニアリングはワンショットのプロセスではありません。最良のプロンプトはテストを通じて改善されます:
- シンプルに始める — 明確で基本的なリクエストから始めます
- バリエーションをテストする — さまざまな言い回しと構造を試してみます
- 品質を評価する — 出力はニーズを満たしていますか?
- 反復する — 結果に基づいて改善します
- ドキュメント化する — 再利用するために最適なプロンプトを保存します
一般的なタスクに対して機能するプロンプトのコレクションを保持してください。時間がたつにつれて、Claude で何が機能するかについての直感が発展します。
避けるべき一般的な落とし穴
- 曖昧すぎる: 「AI について何か書いて」は「AI 入門ガイド (300 語) を書いて」ほど効果的ではありません
- 複雑すぎる: 長いプロンプトが常に良いわけではありません。明確さが冗長さに勝ります
- コンテキストを想定する: Claude が特定の用語やバックグラウンドを知っていると想定しないでください
- フォーマットが一貫しない: 構造化された出力を求める場合、形式について正確に指定します
- トーンを無視する: トーンは重要です。「フォーマル」、「フレンドリー」、「テクニカル」など指定してください
次のステップ
- Claude.ai プロジェクトでシステムプロンプトを試す
- 繰り返しカテゴリ分けタスクに少数ショット例を試す
- 複雑な推論に思考の連鎖を使用する
- ワークフロー用の効果的なプロンプトの個人ライブラリを構築する
さらに体系的に学びたい方は、AI・LLM を学ぶためのおすすめ本もご覧ください。プロンプトエンジニアリングに特化した書籍も紹介しています。
プロンプトエンジニアリングとは何か
プロンプトエンジニアリングとは、AIモデルに対して意図した出力を得るために、入力(プロンプト)を最適化する技術です。Claudeは非常に高い言語理解能力を持っていますが、曖昧な指示では期待通りの結果が得られないことがあります。
適切なプロンプト設計により、以下のような改善が期待できます。
- 回答の正確性が向上する
- 出力フォーマットが安定する
- 不要な情報が減り、必要な情報に集中できる
- 複雑なタスクも段階的に処理できる
構造化プロンプトの基本パターン
Claudeに複雑なタスクを依頼する際は、プロンプトを明確に構造化することが効果的です。以下のXMLタグを使った構造化パターンは、Claude AIとの相性が特に優れています。
<context>
あなたはTypeScriptとReactに精通したシニアフロントエンドエンジニアです。
コードレビューを担当しています。
</context>
<task>
以下のReactコンポーネントをレビューし、改善点を指摘してください。
</task>
<requirements>
- パフォーマンスの観点から問題がないか確認する
- アクセシビリティの観点からの改善提案を含める
- TypeScriptの型安全性を確認する
- 各改善点には具体的なコード例を付ける
</requirements>
<code>
function UserList({ users }) {
return (
<div>
{users.map(user => (
<div onClick={() => window.location.href = `/user/${user.id}`}>
{user.name}
</div>
))}
</div>
);
}
</code>このように、コンテキスト・タスク・要件・入力データを明確に分離することで、Claudeは各セクションの役割を正確に理解し、構造化された高品質な回答を生成します。
XMLタグ活用のポイント
Claudeは <tag> 形式のXMLタグを認識し、セクション境界として扱います。タグ名は自由に設定でき、<instructions>、<example>、<output_format> など、目的に応じた名前を付けることで可読性も向上します。
Chain of Thought(思考の連鎖)で推論精度を高める
複雑な問題をClaudeに解かせるとき、いきなり最終回答を求めるよりも、段階的に思考させる方が精度が上がります。これが「Chain of Thought(CoT)」と呼ばれるテクニックです。
以下の売上データを分析してください。
<data>
2025年Q1: ¥12,500,000
2025年Q2: ¥15,800,000
2025年Q3: ¥14,200,000
2025年Q4: ¥18,900,000
2026年Q1: ¥16,100,000
</data>
ステップバイステップで分析してください:
1. まず、四半期ごとの前期比成長率を計算してください
2. 次に、年間トレンドを特定してください
3. 季節性のパターンがあるか検討してください
4. 最後に、2026年Q2の売上予測を根拠とともに示してくださいこのように思考プロセスを明示的に指示することで、Claudeは各ステップを丁寧に処理し、最終的により精度の高い分析結果を出力します。
Extended Thinking(拡張思考)の活用
Claude 3.5 Sonnet以降のモデルでは、APIパラメータとして thinking を有効にすることで、モデル内部の推論プロセスを確認できます。
import anthropic
client = anthropic.Anthropic()
# Extended Thinkingを有効にしたリクエスト
response = client.messages.create(
model="claude-sonnet-4-6",
max_tokens=8000,
thinking={
"type": "enabled",
"budget_tokens": 5000 # 思考に使うトークン予算
},
messages=[{
"role": "user",
"content": "Pythonで効率的なLRUキャッシュを実装してください。時間計算量と空間計算量を分析し、標準ライブラリとの比較も行ってください。"
}]
)
# 思考プロセスと最終回答を表示
for block in response.content:
if block.type == "thinking":
print("【思考プロセス】")
print(block.thinking)
elif block.type == "text":
print("【回答】")
print(block.text)Extended Thinkingを使うと、Claudeがどのような推論過程を経て回答に至ったかを確認でき、プロンプトの改善にも役立ちます。
Few-shot学習で出力フォーマットを安定させる
Claudeに特定のフォーマットで出力させたい場合、具体例を数個示す「Few-shot学習」が非常に効果的です。
<task>
以下の技術記事タイトルに対して、SEO最適化されたmeta descriptionを生成してください。
</task>
<examples>
<example>
<input>Next.js 15でApp Routerを完全マスターする方法</input>
<output>Next.js 15のApp Routerを基礎から実践まで徹底解説。Server Components、レイアウト設計、データフェッチングのベストプラクティスをコード例付きで紹介。初心者から中級者まで対応。</output>
</example>
<example>
<input>Docker Composeで開発環境を一発構築する実践ガイド</input>
<output>Docker Composeを使った開発環境構築の完全ガイド。MySQL、Redis、Nginxの設定からホットリロード対応まで、チーム開発ですぐに使えるテンプレート付きで解説します。</output>
</example>
</examples>
<input>Claude APIでリアルタイムストリーミングチャットを実装する</input>例を2〜3個提示するだけで、Claudeは文体・長さ・キーワードの密度などのパターンを学習し、一貫したフォーマットで出力を生成します。
ロール設定とペルソナの活用
Claudeにロール(役割)を設定すると、その専門分野に特化した回答が得られます。System Promptでロールを定義するのが最も効果的です。
import anthropic
client = anthropic.Anthropic()
response = client.messages.create(
model="claude-sonnet-4-6",
max_tokens=4096,
system="""あなたは10年以上の経験を持つセキュリティエンジニアです。
OWASP Top 10に精通し、ペネトレーションテストの実務経験が豊富です。
コードレビューでは、セキュリティの観点から具体的な脆弱性と修正方法を指摘します。
回答は以下のフォーマットで構造化してください:
1. 脆弱性の概要(CWE番号付き)
2. 影響度(High/Medium/Low)
3. 具体的な攻撃シナリオ
4. 修正コード""",
messages=[{
"role": "user",
"content": "以下のNode.jsコードのセキュリティレビューをお願いします。\n\napp.get('/user', (req, res) => {\n const query = `SELECT * FROM users WHERE id = ${req.query.id}`;\n db.query(query, (err, result) => res.json(result));\n});"
}]
)
print(response.content[0].text)
# 期待される出力:
# 1. SQLインジェクション (CWE-89)
# 2. 影響度: High
# 3. 攻撃シナリオ: /user?id=1 OR 1=1 で全ユーザーデータ漏洩
# 4. 修正: パラメータバインディングを使用全体を振り返って
プロンプトエンジニアリングは、Claude AIの潜在能力を最大限に引き出すための必須スキルです。本記事で紹介した構造化プロンプト、Chain of Thought、Few-shot学習、ロール設定の各テクニックを組み合わせることで、出力品質を大幅に向上させることができます。
まずは普段のタスクにXMLタグによる構造化を取り入れるところから始めてみてください。小さな改善の積み重ねが、Claude AIとの協働の質を確実に高めてくれるはずです。