Notebook
ClaudeのWeb検索ツールを実際に呼び出して整理する
web_search / web_search_fast / web_fetch を使い、モバイルバッテリーの捨て方を題材にClaudeがページを探索する流れと、2つの検索ツールの出力の違いを確認します。
Guide
目次
前回の記事 で ChatGPT のWeb検索機能を確認しましたが、今回は Claude の Web検索機能を検証しました。
今回も「モバイルバッテリーは家庭ごみとして捨ててよい?千葉県の場合を想定して調べて」という依頼を想定して、実際の呼び出し結果を見ながら各ツールの役割を整理します。
ClaudeではWeb関連のツールは次の3つです。
web_search:通常の検索web_search_fast:軽量で低コストな検索web_fetch:URLを指定してページ全文を取得
ChatGPT側の記事にある find(ページ内検索)や click(リンクのクリック)に当たる独立したツールは、今回のセッションにはありません。その代わりの動きがどうなるかも、後半で整理します。
今回の流れ
今回確認できた探索の流れは次の通りです。
web_search web_search_fast
↓ ↓
検索結果(index 1〜9) 検索結果(index 12〜20)
↓ ↓
web_fetch(1回) 結果の傾向を比較
↓
ページ全文(Markdown)
↓
本文中のリンクのURL
↓
web_fetch両方の検索ツールを同じクエリで1回ずつ実行しました。公式ページは web_search の結果から選び、web_search_fast の結果は検索結果の比較に使いました。
ChatGPT側の記事では、turn0search0 のような参照IDを次の操作に渡していました。Claudeの場合は、参照IDではなく URLそのもの を web_fetch に渡します。ただし、渡せるURLには制限があります。この点は後述します。
web_search:通常の検索を行う
web_search は、Web全体から検索結果の候補を取るために使います。入力は query(文字列)だけで、必須です。
今回の呼び出しは次の通りでした。
{ "query": "モバイルバッテリー 捨て方 千葉市 家庭ごみ" }期間やドメインを絞り込む引数はありません。地域や対象を絞りたいときは、今回のように「千葉市」「家庭ごみ」といった語句をクエリに含めて寄せます。
返ってきたのは、最大10件のうち9件の検索結果でした。1件ごとの構造は次の通りです。
index: 1
source: <ページのタイトル>
document_content: <ページの抜粋。文ごとに 1-1, 1-2 … と番号が付く>
metadata:
search_provider: <検索元>
url: <ページのURL>
age: <記事の日付。あるものだけ>今回の9件を種別で分けると、次のようになりました。
| index | 種別 | 内容 |
|---|---|---|
| 1 | 市の公式ページ | 小型家電と充電式電池の回収 |
| 2 | 県の公式ページ | リチウムイオン電池について |
| 3 | 市の公式FAQ | 電池は何ごみですか |
| 4〜9 | 民間サイト | 処分方法の解説や不用品回収業者のブログ(日付は2024年10月〜2026年6月) |
この段階では、まだページ本文を読んだわけではありません。抜粋だけでは判断できないので、次の web_fetch に渡す候補を選んでいる状態です。
実際、今回は公式ページ(index 1)の抜粋が、同じ市サイトの別の取り組みの見出し一覧になっており、電池の出し方は載っていませんでした。index 2 の県のページも、事業所から出る電池の話が中心でした。そのため、抜粋だけで回答を作らず、公式ページの全文を取得することにしました。
検索結果の抜粋には、1-1 や 1-2 のように文ごとの番号が付いています。これは引用に使える形式になっています。
web_search_fast:軽量な検索
web_search_fast は web_search と同じ入力(query のみ)で、返す構造も同じです。ツールの説明では、より軽く低コストな検索とされています。
- 用語や公式ページがはっきりしている調べ物、参照系の単純な検索は
web_search_fast - 出てきた結果が薄い、意図とずれる、古そうなときは
web_search - 見つけにくい情報、直近の出来事、複数ステップの調査は最初から
web_search
という使い分けが想定されています。これはツールの説明に基づく位置づけで、速度やコストの差そのものは今回の出力から確認できませんでした。ChatGPT側の fast と slow の関係に近い位置づけです。
今回も同じクエリ「モバイルバッテリー 捨て方 千葉市 家庭ごみ」を web_search_fast で検索し、9件の結果が返りました。入力と出力の形式はほぼ同じでしたが、結果の中身には差がありました。
入力
| 項目 | web_search | web_search_fast |
|---|---|---|
| 引数 | query(必須、文字列のみ) | query(必須、文字列のみ) |
| 期間・ドメインの絞り込み | なし | なし |
引数はまったく同じで、今回は同一のクエリを渡しました。
出力の構造
どちらも、1件ごとに index、source、document_content(文ごとに番号付き)、metadata(search_provider、url、あれば age)が付く形です。index は会話全体の通し番号で、web_search は1〜9、web_search_fast は12〜20でした。そのため、検索結果と web_fetch の結果で 10-1 のような引用番号が連番になります。
今回の実行で見えた違い
| 観点 | web_search | web_search_fast |
|---|---|---|
| 件数 | 9件 | 9件 |
| 公式ページ | 3件(千葉市2件、千葉県1件) | 0件 |
| 千葉市・千葉県に関する結果 | 多い(公式3件、千葉市を明記した民間記事など) | 少ない(千葉県版の回収キャンペーンの広告記事1件のみ) |
| 結果の傾向 | 千葉市の公式情報と、千葉市を扱う解説記事 | 全国向けの一般解説や、ニュース・広告記事 |
source の内容 | ページのタイトルが中心 | ドメイン名が多く、日付やスラッグのような値も混じる |
| 抜粋の形 | 見出しの羅列や「…」「·」で区切った断片が混じる | ページ冒頭から続く本文が多く、やや長め |
age(日付) | 9件中6件に付いた | 付かなかった |
| 重複 | なし | あり(同じ記事が別URLで2回、PR記事も2回) |
フォーマットは共通なので、どちらの結果も同じ手順で web_fetch や引用につなげられます。
一方で、今回のような自治体固有のルールでは web_search が有利でした。千葉市の公式ページが直接見つかったのに対し、web_search_fast の結果だけでは「家庭ごみには出せない」という一般論は分かっても、千葉市の回収場所や出し方までは分かりませんでした。
日付情報にも差があり、web_search_fast の結果には age が付かなかったため、記事の新しさは本文中の日付から判断する必要があります。「捨て方の一般論」や「危険性」のように、全国共通で公式ページを特定する必要がない簡単な調べ物なら web_search_fast でも足ります。ただし、自治体固有の情報を探す場合は、公式ページを取りこぼす可能性があります。
web_fetch:URLを指定してページを読む
web_fetch は、URLを指定してページを開くためのツールです。
今回は、検索結果 index 1 の公式ページを取得しました。
{ "url": "https://www.city.chiba.jp/kankyo/junkan/haikibutsu/kogatakadenn.html" }入力は url が必須で、次のような任意の引数もあります。今回は url だけを渡しました。
| 引数 | 用途 |
|---|---|
allowed_domains | 取得を許可するドメインを限定する |
blocked_domains | 取得しないドメインを指定する |
text_content_token_limit | 取得するテキストの量を絞る(バイナリには効かない) |
web_fetch_pdf_extract_text | PDFをテキストとして抽出するかどうか(今回は試していない) |
返ってきたのは、HTMLをMarkdownに変換したページ全文でした。メタ情報、メニュー、パンくずリスト、本文、フッターまで含まれています。
document_content:
---
meta-author / meta-description / title など(ページのメタ情報)
---
ナビゲーション、パンくずリスト
更新日:2026年8月7日
# 小型家電とリチウムイオン電池などの充電式電池の回収
## 小型家電の回収
## 充電式電池の回収
### 回収対象 / 回収できない電池 / 出し方 / 回収ボックス
## 回収場所(区ごとの表)
## 民間事業者による小型家電等の回収
## リンク(小型家電に該当しないものの捨て方など)
フッター、関連ページへのリンク一覧
metadata:
content_type: html
mime_type: text/html
destination_url: <指定したURL>
final_url: <リダイレクト後のURL>区ごとの回収場所の表も、Markdownの表としてそのまま取得できました。これにより、拠点ごとの回収品目や利用時間を確認できました。
リンクをたどる:click の代わり
Claudeには、 ChatGPT の click に当たるツールがありません。ただし、リンク先のURLが検索結果、取得済みのページ、またはユーザーのメッセージに出てきていれば、そのURLを web_fetch に渡すことでリンクをたどれます。
web_fetch には次の制約があります。
- 検索結果、取得済みページ、ユーザーのメッセージのいずれかにそのまま出てきたURLしか開けません。
- URLの一部を書き換えたり、それらしいパスを推測して組み立てたりしたURLは拒否されます。
- ログインが必要なページは取得できません。
- ボタン操作や、JavaScriptで動的に切り替わる画面の操作はできません。
目的のページのURLがまだ出てきていないときは、web_search で探し直してから web_fetch に進みます。
ページ内検索:find の代わり
find に当たるツールもありません。web_fetch はページ全文をテキストとして返すので、Claudeがその全文から必要な箇所を読み取ります。
今回も、公式ページの全文から次の箇所を拾いました。
- 回収対象と回収できないもの
- 出し方(電力の使い切り、絶縁)
- 区ごとの回収場所と利用時間
- 充電池を回収していない拠点
長いページで取得量を減らしたいときは、text_content_token_limit で上限を指定できます。
まとめ
今回の実行では、各ツールは次の役割でした。
| Tool | 主な役割 | 入力例 | 主な出力 |
|---|---|---|---|
web_search | 候補を検索する | {"query": "…"} | 検索結果、タイトル、URL、本文抜粋 |
web_search_fast | 軽量に候補を検索する | {"query": "…"} | 検索結果(構造は同じ。今回の検索では公式ページなし) |
web_fetch | ページを開く | {"url": "…"} | HTML/PDFなどの本文(HTMLはMarkdown化)とメタ情報 |
ChatGPT側との主な違いは次の通りです。
| 項目 | ChatGPT(記事) | Claude |
|---|---|---|
| 検索の引数 | クエリに加えて期間とドメインを指定できる | query のみ |
| ページの指定方法 | 参照IDを渡す | URLそのものを渡す(既出のURLのみ) |
| ページ内検索・リンクのクリック | find / click | 専用ツールなし(全文を読む / URLを web_fetch) |
ChatGPTは参照IDでページを渡り歩く open / find / click の構成で、Claudeは「検索」と「URL指定の取得」を組み合わせる構成です。
今回は次の流れで完結しました。
web_search(1回)と web_search_fast(1回)
↓
web_search の結果から公式ページを選ぶ
↓
web_fetch(1回)補足
この記事に載せた実行結果は、2026年9月20日時点のものです。検索結果や利用できる操作、入出力の形式は更新によって変わる可能性があります。この記事で扱った web_search / web_search_fast / web_fetch の入出力は、公開仕様ではなく、実際の呼び出しで観察できた内容です。
Related notes
あわせて読みたいノート
ChatGPTのWeb Searchツールを実際に呼び出して整理する
fast / slow / open / find / click を使い、モバイルバッテリーの捨て方を題材にWeb Searchがページを探索する流れを確認します。
続きを読む
MastraのAgent Approvalでツール実行前に人間の承認を挟む
MastraのAgent Approvalを使って、読み取り系ツールは自動実行し、メール送信のような副作用のあるツールだけ承認後に実行する流れをHono APIから試します。
続きを読む
Amazon Bedrock Guardrailsで入力の一部だけを検査する方法
Amazon Bedrock Guardrails の適用範囲を入力テキストの一部に絞る方法を、InvokeModel の input tags と Converse の guardContent ブロックで整理します。
続きを読む