MF Blogs 便利ツール
依頼文をタグで構造化して情報を区切る抽象イメージ図

記事

Claude CodeでXML風タグを使うべき場面とプロンプト例

Claude Codeの依頼文でXML風タグを使うべき場面と、使わないほうがいい場面を整理します。Anthropic公式が推奨するタグ構造の原則、コピペできるテンプレート、過剰設計を避ける判断基準まで、複雑な依頼を構造化したい人向けの実務ガイドです。

0:00 0:00

Claude Codeの依頼文が長くなり、指示と前提と参考コードが混ざって誤読されるようになったら、XML風タグで区切る出番です。本記事は、タグを使うべき場面と使わないほうがいい場面、コピペできるテンプレート、過剰設計を避ける基準を整理します。

結論:情報の種類が混ざるときだけタグで区切る

Anthropic公式のプロンプトエンジニアリングガイドは、XMLタグについて「指示・コンテキスト・例・可変入力が混ざる複雑なプロンプトを、Claudeが曖昧さなく解釈する助けになる」と説明しています(Prompting best practices)。逆に言えば、短い依頼や1種類の情報しかない依頼にタグは不要です。

要点は3つです。

  1. 使う場面:1つの依頼に「指示」「前提」「参考コード」「期待出力」など複数種類の情報が混在するとき
  2. 使わない場面:1〜2行の短い依頼、情報が1種類だけの依頼
  3. 過剰設計の禁止:タグの数を増やすこと自体が目的化したら、依頼が大きすぎるサイン

タグはMarkdownの見出しでも代替できます。重要なのは「種類ごとに区切る」ことであり、XMLである必要は必ずしもありません。

なぜタグで区切ると精度が上がるのか

Claude Codeは依頼文・読み込んだファイル・コマンド出力をすべて1つのコンテキストで扱います。地の文だけで「これは前提、これは指示、これは参考にするだけのコード」と書くと、参考コードを仕様と誤認したり、前提を指示と取り違えたりします。

タグで囲むと、どこからどこまでが何の情報かが構造的に明示されます。公式ガイドのベストプラクティスは次の2点です。

  • タグ名はプロンプト全体で一貫した、内容を表す名前にする
  • 自然な階層があるときはタグを入れ子にする(例:複数文書なら<documents>の中に各<document>

タグ名に決まりはありません。<instructions><context>のように中身が分かる名前を、自分のプロンプト全体で揃えて使えば十分です。

使うべき場面の判断基準

次のどれかに当てはまるときだけタグを使います。

状況タグの要否理由
1〜2行の短い修正依頼不要区切る情報がない
参考コードを「真似る用」で渡す必要仕様と誤認させない
長い仕様+制約+期待出力が同居必要種類ごとに分離する
エラーログやデータを大量に貼る必要指示と入力を分ける
ファイルは@参照だけで足りる不要構造化済み

短い依頼にタグを付けるのはむしろノイズです。タグは「情報が混ざって誤読が起きたとき」の対処であり、最初から全部に付けるものではありません。

コピペできるテンプレート

複数種類の情報が混ざる依頼の基本形です。タグ名は中身が分かる名前で揃えます。

<instructions>
src/api/invoice.ts に消費税計算を追加する。既存の計算関数を壊さない。
</instructions>

<context>
税率は外部設定から読む。端数処理は切り捨て。既存テストは tests/invoice.test.ts。
</context>

<reference>
既存の似た実装。これは真似る対象であって、変更対象ではない。
@src/api/shipping.ts
</reference>

<acceptance>
- 既存テストが全て緑のまま
- 新規に境界値テスト(0円・端数あり・上限)を追加し緑
- npm test が通る
</acceptance>

<forbidden>
- 依頼スコープ外のリファクタやファイル新規作成
- 新しい依存の追加
</forbidden>

参考データを大量に渡すときは、入力部分だけ囲んで指示と分離します。

<task>
次のアクセスログから、5xxエラーが集中している時間帯と上位エンドポイントを表にして。
</task>

<logdata>
(ここにログを貼る、または cat access.log | claude で流し込む)
</logdata>

長い入力を扱うときは、公式ガイドのとおり長文データを上部、指示と質問を下部に置くと精度が上がります。

XML風タグと7ブロック構造の関係

このシリーズの「Claude Codeに伝わるプロンプトの基本構造」で扱った7ブロック(目的・背景・入力・制約・出力・完了条件・禁止事項)は、Markdown見出しでもXML風タグでも表現できます。使い分けの目安は次のとおりです。

  • 見出し(## 目的:人間も読む依頼文、CLAUDE.md、テンプレート配布
  • XML風タグ:参考コードやログなど「囲んで他と切り離したい塊」がある依頼

完了条件と禁止事項の中身の書き方は「Claude Codeの成功率を上げる制約条件と受け入れ条件の作り方」に詳しくあります。本記事は「どう区切るか」に集中します。

過剰設計を避ける

タグは便利ですが、増やしすぎると逆効果です。次がアンチパターンです。

  • 1行の依頼に5個のタグを付ける(情報がないのに枠だけ作る)
  • 同じ意味で<context><background>を混在させる(一貫性がない)
  • 巨大なログ全文を<logdata>で囲んで貼る(コンテキスト圧迫)
  • 毎回タグ構造を変える(Claudeが構造を学習できない)

タグが3〜4種類を超えて膨らんだら、たいてい依頼が大きすぎます。その場合はタグを足すのではなく依頼を分割します。コンテキストを圧迫しない情報の渡し方は「Claude Codeに必要な情報だけ渡すコンテキスト設計」にまとめています。

チェックリスト

  • その依頼に複数種類の情報が混ざっているか確認した
  • 1〜2行の短い依頼にはタグを付けていない
  • タグ名は中身が分かる名前で、プロンプト全体で統一した
  • 参考コードは「変更対象でない」と明示して別タグにした
  • 長い入力は上部、指示は下部に置いた
  • タグ種類が増えすぎていない(増えたら依頼を分割した)
  • 巨大ログを丸ごと囲んでコンテキストを圧迫していない

次に読むおすすめ記事: