ClaudeへのプロンプトをXMLタグで構造化する書き方
instructions・context・exampleをXMLタグで分けて渡す書き方と、複数文書をネストする設計を実例つきでまとめます。
指示・文脈・例・入力データが1つの塊になったプロンプトは、Claudeにとっても読み解きにくい入力です。XMLタグでそれぞれを区切ると、Claudeがどの文が指示でどの文が資料なのかを取り違えにくくなります。この記事では、タグの分け方の基本形と、Anthropic自身のシステムプロンプトで実際に使われている構造を並べて確認します。
ClaudeへのプロンプトをXMLタグで構造化するとは
XMLタグによる構造化とは、プロンプト内の指示・文脈・例・入力データをそれぞれ専用のタグで囲み、Claudeが役割を混同しないようにする書き方です。これらが混在するプロンプトほど、XMLタグの効果は大きくなります。<instructions>のように内容の種類ごとにタグを分けるだけで、誤読の可能性は下がります。
タグの命名に厳密な規格はありません。押さえるべき点は2つだけです。1つはプロンプト全体で一貫した分かりやすいタグ名を使うこと、もう1つは内容に階層があるときはタグを入れ子にすることです。後者の具体例が、複数の文書を<documents>タグでまとめ、各文書を<document index="n">で区切る構成です。
instructions・context・exampleを分ける基本形
プロンプト全般のコツはClaudeプロンプトの書き方にまとめてあります。ここではXMLタグによる構造化の分け方に絞って説明します。
最初に押さえるべきパターンは、指示・文脈・入力の3種類をタグで分けることです。<instructions>・<context>・<input>という3つのタグ名がこの型の代表例です。名前は固定ではありませんが、同じ意味のタグはプロンプトやプロジェクトの中で使い回します。
<instructions>
アップロードした議事録から決定事項だけを抽出し、担当者ごとに箇条書きでまとめてください。
</instructions>
<context>
この議事録は週次の進行管理ミーティングのものです。読み手はプロジェクトマネージャーです。
</context>
<input>
{{MEETING_TRANSCRIPT}}
</input>この形にしておくと、<context>の中身を差し替えるだけで別のミーティング用に転用できます。指示文と入力データが1つの段落に混在していると、Claudeが「これは指示なのか、それとも抽出対象の本文なのか」を判断する負荷が上がります。タグで区切ることは、その負荷をプロンプトの書き手側で先に取り除く作業だといえます。
例(example)は複数形のタグで束ねる
3〜5個ほどの具体例を渡す少数事例プロンプト(few-shot prompting)は、出力の形式・トーン・構造を安定させる手法です。ここでもタグの使い分けが決まっています。1つの例は<example>タグで囲み、複数の例をまとめるときは外側を<examples>タグで囲みます。
<examples>
<example>
入力: 会議で予算超過が報告された
出力: [警告] 予算超過が報告されました
</example>
<example>
入力: 新機能のリリース日が確定した
出力: [情報] リリース日が確定しました
</example>
</examples>
上記の例と同じ形式で、次の入力を分類してください。例が指示文と地続きに並んでいると、Claudeが例の一部を新しい指示だと誤読することがあります。<example>で囲んでおけば、それが「参考として提示された過去の入出力」であることが構造として伝わります。
複数文書をタグでネストする設計
指示・文脈・例の3分割だけでは対応しきれないのが、複数の文書を同時に渡す場面です。2万トークンを超えるような長文入力を扱うときは、長文データをプロンプトの先頭、指示や質問より前に置きます。クエリを末尾に置くことで、複数文書を含む複雑な入力での応答品質が最大30%改善したという検証結果があります。
複数文書を渡すときのタグ構成は、外側を<documents>、各文書を<document index="n">で区切り、その中に<source>と<document_content>を置く形です。
<documents>
<document index="1">
<source>annual_report_2023.pdf</source>
<document_content>
{{ANNUAL_REPORT}}
</document_content>
</document>
<document index="2">
<source>competitor_analysis_q2.xlsx</source>
<document_content>
{{COMPETITOR_ANALYSIS}}
</document_content>
</document>
</documents>
年次報告書と競合分析を比較し、戦略上の強みとQ3の重点領域を提案してください。文書が増えるほど、どの発言がどの資料に基づくかを機械的に追いやすくする設計が効いてきます。長文タスクでは、Claudeに該当箇所を<quotes>タグへ先に引用させ、そのうえで結論を<info>タグに書かせる2段構成も使われています。引用を先に出させることで、Claudeは関連する内容に集中しやすくなり、文書の余計な部分に惑わされにくくなります。
出力フォーマットの指定にもXMLタグを使う
XMLタグは入力側だけでなく、Claudeに書いてほしい出力の形式を指定するときにも使えます。「マークダウンを使わないでください」のような禁止形の指示は狙った効果を得にくく、代わりに「地の文だけの段落で構成してください」のように、してほしいことを直接指示する方が安定します。
そのうえでタグを使う場合は、出力してほしいブロックの名前をタグとして指定します。たとえば「応答の地の文部分を<smoothly_flowing_prose_paragraphs>タグの中に書いてください」のように書きます。プロンプト自体の書き方を出力の書き方に近づけることも効果があり、プロンプト側からマークダウン記法を減らすと出力側のマークダウンの量も減る傾向があります。
指示のまとまりごとに固有のタグ名をつける
<instructions>や<context>のような汎用タグだけでなく、1つの指示のまとまり全体に固有のタグ名をつける書き方もあります。Claudeにツール呼び出しを積極的に行わせたい場面では、システムプロンプトに次のようなブロックを追加する例があります。
<default_to_action>
By default, implement changes rather than only suggesting them. If the user's intent is
unclear, infer the most useful likely action and proceed, using tools to discover any
missing details instead of guessing.
</default_to_action>反対に、ユーザーの指示がはっきりするまで実装に踏み込ませたくない場合は、<do_not_act_before_instructions>のように意図が逆のタグ名をつけたブロックを使います。同じ考え方は、コード調査で推測に頼らせたくないときの<investigate_before_answering>ブロックにも使われています。タグ名がそのまま「このブロックが何を守らせる指示か」を表しているため、複数のルールを1つのシステムプロンプトに並べても、どの指示がどの効果を持つのかを見分けやすくなります。こうしたブロックは英語で書かれることが多く、タグ内の指示文を日本語と英語のどちらで書くべきか迷う場面もあります。Claudeは日本語と英語プロンプトで出力の長さに差が出るかで挙動の違いを確認できます。
拒否判定に絞った言い回しの実例はClaude Fable 5.1のrefusal誤検知を防ぐプロンプトの書き方にまとめています。
タグで指示を分けるのと合わせて、システムプロンプトの先頭でClaudeに役割を与える書き方もよく使われます。「あなたはPythonに詳しいコーディングアシスタントです」のような一文をシステムプロンプトに置くだけで、Claudeの振る舞いとトーンはその役割に沿ったものに変わります。役割の指定とタグによる構造化は別々の技術なので、両方を組み合わせて使えます。
Anthropic自身のシステムプロンプトでも同じ構造が使われている
XMLタグによる構造化は、Anthropicが自社のシステムプロンプトを書くときにも使っている型です。2026年9月22日更新のClaude Opus 5.5システムプロンプトでは、<claude_behavior>という最上位タグの中に大分類のタグが並びます。具体的には<product_information>・<refusal_handling>・<tone_and_formatting>・<user_wellbeing>・<anthropic_reminders>で、それぞれの中に本文が入れ子になっています。
拒否判断のふるまいを説明する<refusal_handling>の中では、さらに<example>タグで具体的なやり取りを示します。その中は<user>(ユーザーの発言)・<response>(Claudeの応答)・<rationale>(その判断の理由)の3つに分かれています。1つの例につき「入力・出力・理由」の3点が同じタグ構造で繰り返される形です。この構造は、開発者が自分のプロンプトに複数の判断例を持たせたいときにそのまま応用できます。
システムプロンプトの<product_information>には、プロンプトの書き方を助言する際に具体的なXMLタグを求める手法を挙げる一文が含まれています。
タグの使い分け早見表
ここまでに出てきたタグを、渡したい内容の種類ごとに一覧にまとめました。新しくプロンプトを書くときは、まずこの表のどの行に当たるかを決めてからタグ名を選ぶと、タグ名がプロンプトやプロジェクトの間でぶれにくくなります。会計や法務など専門領域の背景情報を<context>に書き込む具体例はClaudeでJ-GAAPとIFRS差分チェックを行うプロンプト設計で確認できます。
| 渡したい内容 | 使うタグの例 | ポイント |
|---|---|---|
| 作業の指示 | 使うタグの例<instructions> | ポイント入力データと混在させない |
| 背景・前提情報 | 使うタグの例<context> | ポイント読み手の立場やタスクの目的を書く |
| 差し替え可能な入力本文 | 使うタグの例<input> | ポイント変数として繰り返し使う想定なら名前を固定する |
| 少数事例(few-shot) | 使うタグの例<example> / <examples> | ポイント複数例は外側を複数形タグで束ねる |
| 複数の参照文書 | 使うタグの例<documents> / <document index="n"> | ポイント<source>と<document_content>を子タグにする |
| 根拠の引用と結論の分離 | 使うタグの例<quotes> / <info> | ポイント長文タスクで関連部分に集中し、無関係な記述に惑わされにくくする |
| 出力してほしいブロックの指定 | 使うタグの例<smoothly_flowing_prose_paragraphs>等 | ポイントタグ名そのものを出力形式の説明にする |
| 1つの指示ブロック全体への命名 | 使うタグの例<default_to_action>等 | ポイントルールの効果をタグ名で表す |
よくあるつまずき
XMLタグの運用でつまずく点は、タグの命名とネストの深さに集中しています。特に多いのは次の4つです。
- タグ名を毎回変えてしまうと、同じ意味のタグ名(
<context>と<background>など)がプロンプトや運用ごとに揺れ、社内で再利用するプロンプトの一貫性が失われます。プロジェクト単位で語彙を統一します。 - 例と指示を同じタグに入れると、
<instructions>の中に例が混在し、区別すべき「指示」と「例」の境界がプロンプト上で消えます。例は<example>に分離します。 - ネストを深くしすぎると、階層を持たせる必要がない内容まで無理に入れ子にしてしまい、タグの開閉を書き手が管理しきれなくなります。入れ子にする目安は、文書のように実際に階層構造がある内容だけです。
- thinkingを無効化した状態でタグ運用を組むと、Claude Opus 5では内部処理用のXMLタグが応答の見える部分に混入することがあると注記されています。手動の
<thinking>タグで代替する前に、まずthinking機能を低い強度で有効にしたまま使う構成を検討します。
まとめ
XMLタグによる構造化は、<instructions>・<context>・<example>のようにプロンプトの構成要素を役割ごとに分けることが基本形です。複数文書を扱うときは<documents>と<document index="n">でネストし、長文は指示より前に置きます。出力側の形式指定や、指示ブロック全体への命名にも同じ考え方が使えます。Anthropic自身のシステムプロンプトも同じ型でタグを使っており、判断例を<user>・<response>・<rationale>に分ける構造はそのまま応用できます。まずは自分がよく使うプロンプトの指示文と入力データをタグで分けるところから試してください。