カテゴリー / MCP・スキル・プラグイン

Claude Code Web検索の仕組みと権限設定・200回上限の対処法

この記事の目次

Claude Code Web検索は、検索してタイトルとURLを返す「WebSearch」と、指定したURLの中身を読む「WebFetch」という2つの組み込みツールで動いています。どちらも承認が必要なツールで、WebFetch は事前承認済みのドキュメントドメインなどでは確認を省きます。settings.json の権限ルールでは両ツールを許可・拒否でき、WebFetch はドメインごとのルールも書けます。

注意点は3つです。WebSearch は対話型セッション1つにつき200回の上限があること、Amazon Bedrock 経由では WebSearch が使えないこと、WebFetch は多くの場合ページを抽出してから渡すため、Claude が原文をそのまま読むとは限らないことです。

Claude Code Web検索の WebSearch と WebFetch は何が違うのか

役割がはっきり分かれています。

WebSearch は Anthropic の検索バックエンドにクエリを投げ、結果のタイトルとURLを返すだけのツールです。検索結果のページ本文は取りに行きません。Claude が結果の中身を読みたいときは、続けて WebFetch を呼びます。1回の WebSearch 呼び出しの中では、結果を返す前に最大8回まで内部で検索を繰り返して絞り込みます。Claude は allowed_domains で特定のホストだけに絞ったり、blocked_domains で除外したりできますが、この2つは同じ呼び出しで併用できません。

WebFetch は「URL」と「何を抜き出すかの指示」を受け取ります。ページを取得し、HTMLならMarkdownに変換したうえで、多くの場合は別のモデル呼び出しで指示に沿った抽出を行い、Claude はその抽出結果を受け取ります。つまり多くの場合、Claude が見ているのはページの原文ではなく、抽出指示を通した結果です。この性質は後の「切り分け」の節で効いてきます。

WebSearch WebFetch
入力 検索クエリ URLと抽出の指示
返すもの 結果のタイトルとURL 多くの場合、指示に沿って抽出したページ内容
権限ルールの書き方 素の WebSearch のみ WebFetch または WebFetch(domain:...)

Web検索のバックエンドは変更できません。別の検索サービスを使いたい場合は、検索ツールを持つMCPサーバーを追加するのが公式の案内です。MCPの追加手順はClaude Code MCPの解説にまとめています。

検索や取得の前に、何がどこまで確認されるのか

公式の権限表では、WebSearch も WebFetch も「承認が必要」なツールに分類されています。違いは、確認の免除範囲と「今後は聞かない」を選んだときの保存単位です。

  • WebSearch: 承認が必要。継続して許可すると、その許可はリポジトリ単位で永続的に保存されます。
  • WebFetch: 承認が必要。ただし組み込みの「事前承認済みドキュメントドメイン」は確認なしで取得します。「今後は聞かない」はリポジトリとドメインの組み合わせ単位で保存されます。

WebFetch の権限確認が出るのは Manual モードと acceptEdits モードです。確認画面の選択肢は次の3つです。

  1. Yes: 今回の取得だけ許可。同じドメインでも次回はまた確認が出ます。
  2. Yes, and don’t ask again for <ドメイン>: 取得を許可し、そのドメインの WebFetch(domain:...) 許可ルールをリポジトリの .claude/settings.local.json に保存します。
  3. No, and tell Claude what to do differently: 取得を拒否します。

auto モードと bypassPermissions モードでは、WebFetch の確認は出ません。例外は、明示的な ask ルールに一致したドメインです。モードごとの違いはClaude Code 権限モードの解説を参照してください。

settings.json で許可・拒否はどう書くのか

確認を毎回出さずに済ませたいなら、settings.json の permissions にルールを書きます。公式ドキュメントにある最小の例は、WebFetch を確認なしで許可する次の書き方です。

{
  "permissions": {
    "allow": ["WebFetch"]
  }
}

ルールの形と効き方は以下のとおりです。

ルール allow に入れた場合 deny に入れた場合
WebSearch 確認なしで検索 検索を拒否
WebFetch 確認なしで取得。サンドボックスの許可ホストは変わらない WebFetch ツール自体が消え、取得できなくなる
WebFetch(domain:*) 確認なしで取得し、サンドボックス内のコマンドも全ホストに届く ツールは残り、取得のたびに拒否。サンドボックス内のコマンドもどのホストにも届かない
WebFetch(domain:example.com) example.com だけ確認なしで取得 example.com への取得を拒否

ドメイン指定で迷いやすい点を3つ挙げます。

  • WebFetch(domain:example.com) は example.com にしか一致しません。api.example.com なども含めるなら WebFetch(domain:*.example.com) を別に足します。
  • WebFetch(domain:*.example.com) はどの深さのサブドメインにも一致しますが、example.com 自身には一致しません。両方を書く必要があります。
  • 明示的に書いた WebFetch(domain:...) ルールは、deny・ask・allow のどれでも事前承認セットより優先されます。事前承認されているドメインを止めたい、確認を出したいときに使えます。

WebSearch は指定子を取りません。「このドメインだけ検索してよい」というルールは書けず、allow か deny に素の WebSearch を入れるだけです。設定ファイルの置き場所と優先順位はClaude Code settings.json の解説で扱っています。

WebFetch だけを止めたい場合は、権限ルールの代わりに環境変数 CLAUDE_CODE_DISABLE_WEB_FETCH を 1 にする方法もあります。

社内で使うとき、外部アクセスをどこまで絞れるのか

WebFetch のルールを絞っただけでは、外部への通信は止まりません。公式は、Bash が許可されていれば Claude は curl や wget などで任意のURLに到達できると明記しています。確実に絞るための公式の組み合わせは次のとおりです。

  • deny ルールで curl・wget などを止め、許可したいドメインだけ WebFetch(domain:github.com) のように WebFetch で開ける
  • deny ルールはパス指定や sh -c の中の同じプログラムには一致しないため、制限を確実に効かせたい場合はサンドボックスのネットワーク許可リストと併用する

逆向きの落とし穴もあります。サンドボックスの allowedDomains は WebFetch を制限しません。WebFetch と WebSearch は、サンドボックス設定ではなく権限ルールに従います。サンドボックスの設定はClaude Code サンドボックスの解説を参照してください。

もう1つ、WebFetch には「ドメイン安全性チェック」があります。取得の前に、リクエスト先のホスト名を api.anthropic.com に送り、Anthropic が管理するブロックリストと照合します。送られるのはホスト名だけで、URL全体やパス、ページ内容は送られません。このチェックはどのモデル提供経路でも動き、CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC の影響も受けません。チェックを無効にする設定は skipWebFetchPreflight: true ですが、その場合はブロックリストを参照せずに取得するため、公式は WebFetch の権限ルールと組み合わせるよう案内しています。

Team または Enterprise の claude.ai アカウントでサインインしている場合(LLMゲートウェイ経由を除く)、WebFetch は組織のポリシーにも左右されます。Claude Code はセッション開始時にこのポリシーを api.anthropic.com から取得します。情報漏えい対策全体の考え方はClaude Code 情報漏洩の解説にまとめています。

1セッション200回の検索上限に達したらどうなるのか

対話型のターミナルセッションには、WebSearch を200回までという上限があります。メインの会話からの検索と、並列リサーチなどで動かしたサブエージェントからの検索は、同じ200回にまとめて数えられます。調査をサブエージェントに分散すると、上限に早く届く点に注意してください。サブエージェントの使い方はClaude Code サブエージェントの解説で扱っています。

上限に達している間、検索は「何もしなかった呼び出し」として会話に表示されます。Claude には、集めた情報で作業を続け、さらに検索が必要なら上限の引き上げをあなたに頼むよう通知が届きます。検索結果が急に返らなくなったときは、まずこの状態を疑ってください。

追加でWeb検索する方法は3つです。

  • 上限を上げる: 環境変数 CLAUDE_CODE_MAX_WEB_SEARCHES_PER_SESSION に正の整数(例: 500)を設定します。引き上げはできますが、上限そのものを無効にはできません。
  • 回復を待つ: 上限回復は1時間あたり約100回のペースで進みます。回復の速さは CLAUDE_CODE_WEB_SEARCH_REFILLS_PER_HOUR で変えられます。
  • 検索再開のため新しい会話を始める

Bedrock や Google Cloud 経由でも Web検索は使えるのか

WebSearch は、使っている提供経路で可否が分かれます。

提供経路 WebSearch
Claude のサブスクリプション 使える
Anthropic Console 使える
Claude Platform on AWS 使える
Microsoft Foundry 使える
Google Cloud’s Agent Platform Opus 4・Sonnet 4・Haiku 4.5 以降のモデルで使える
Amazon Bedrock 使えない(サーバー側の検索ツールを提供していない)

Bedrock での代替として公式が挙げているのは、具体的なURLを指定して WebFetch を使う方法です。Web検索はできなくても、読ませたいページのURLが分かっていれば取得はできます。

なお、Bedrock や Google Cloud を使っていても、WebFetch のドメイン安全性チェックは api.anthropic.com を呼びます。社内ネットワークで api.anthropic.com を遮断していると WebFetch が失敗するので、次の節の手順で確認してください。経路ごとの初期設定はClaude Code Bedrock の解説とClaude Code Vertex AI の解説にあります。

WebFetch が失敗する・結果が期待と違うときの切り分け

症状ごとに、公式に書かれている原因を順に当てていきます。

1. WebFetch ツール自体が見当たらない セッション内で /status を実行し、Organization policy の行を確認します。ポリシーが読み込めず、待機中の機能に web fetch が挙がっていれば、組織が許可しているか確認できるまで Claude Code が WebFetch を保留している状態です。セッションの外では claude doctor で同じ行を確認できます。許可するポリシーが読み込まれれば、再起動なしでツールが戻ります。deny に素の WebFetch を書いた場合や、CLAUDE_CODE_DISABLE_WEB_FETCH=1 を設定した場合もツールは使えなくなるので、あわせて確認してください。

2. 社内ネットワークで取得がすべて失敗する api.anthropic.com がブロックされていると、安全性チェックが通らず WebFetch は失敗します。対処は、このドメインを許可リストに入れるか、skipWebFetchPreflight: true を設定するかです。プロキシや証明書の問題はClaude Code ネットワークエラーの解説を参照してください。

3. ローカルの開発サーバーや社内ホストが読めない WebFetch は localhost と、ドットを含まないホスト名(社内の短いホスト名など)を、リクエスト前に拒否します。このとき WebFetch が返すエラーは、ローカルのサーバーには Bash の curl を使うよう Claude に伝えます。

4. 「そのページには書かれていない」と言われたが、実際は書いてある WebFetch は設計上ロッシー(情報が落ちる)です。抽出指示が尋ねていなかったことは結果に出てこないため、「書いていない」は「聞いていなかった」だけの可能性があります。より具体的な指示で取得し直してもらうか、加工前のページが必要なら Bash の curl を使います。

5. 長いページの後半が反映されない WebFetch が1回に読むのは最大100,000文字です。v2.1.290 以降では、長いページの結果に未読の量が示され、Claude は続きを取得できます。

6. 別のURLの内容が返ってきた、または2回取得している 別ホストへのリダイレクトは自動では追いかけず、元のURLと転送先を示す結果を返します。Claude はその後、転送先を2回目の WebFetch で取得します。

7. 更新したはずのページが古いまま WebFetch は応答を既定で15分キャッシュします。同じURLを直後に取得すると、前回の結果が返ります。

8. 取得が途中でエラーになる リダイレクトを含めて5分以内にダウンロードが終わらないページは、期限切れエラーになります。

この他のエラー全般の見方はClaude Code エラーの解説で扱っています。ブラウザで実際にページを操作させたい場合は WebFetch ではなく、Claude Code の Chrome 連携が向いています。

バージョンによって変わる点はどこか

ここまでの挙動の一部は、Claude Code のバージョン差によって有無が分かれます。公式ドキュメントに明記されている境目は次のとおりです。

挙動 必要なバージョン
WebSearch の200回上限 v2.1.212 以降
上限の時間回復(約100回/時) v2.1.290 以降
CLAUDE_CODE_DISABLE_WEB_FETCH による WebFetch の無効化 v2.1.285 以降
WebFetch ルールのワイルドカード一致 v2.1.172 以降

手元のバージョンがこれより古い場合、上限が効かない、ワイルドカードのルールが一致しないといった差が出ます。記載内容は2026年10月18日時点の公式ドキュメントに基づいています。

Web検索や取得を業務の流れにどう組み込むか、権限をどこまで開けるかは、チームの使い方によって答えが変わります。手を動かしながら自分の運用に落とし込みたい場合は、月額1,980円から参加できる学習コミュニティ「AI駆動ラボ」で権限設計やプロンプトの組み立てを一緒に学べます。