GeminiのURL context toolを解説。スクレイピングなしでWebコンテンツを取得

記事タイトルとURLをコピーする

G-genの杉村です。Vertex AI の API 経由で Gemini を呼び出す際に、URL context tool を使って、明示的にスクレイピングをしなくても Web サイトの内容を取得してコンテキストとして利用する方法について解説します。

概要

URL context tool とは

URL context tool とは、Vertex AI の API 経由で Gemini を呼び出す際に、Web サイトの内容を取得してコンテキストとして利用できるようになるツールです。

本来、外部 Web サイトの内容を生成 AI のコンテキストとして使うためには、Web スクレイピング(プログラムでウェブサイトからデータを取得すること)を行うソースコードを記述して、Web サイトの内容を取得してから、プロンプトとしてモデルに読み込ませる必要があります。

URL context tool を使うと、そのようなスクレイピングプログラムを記述しなくても、Gemini が自動的に Web サイトのコンテンツを取得して、コンテキストとして利用してくれます。

同機能は、2025年8月現在で試験運用版(Experimental)の扱いです。一般提供(GA)されている機能ではないため、公式のサポート対象外であるほか、予告なく仕様が変更されたり廃止になる可能性があります。

また当記事の検証結果は、2025年8月現在の試験運用版(Experimental)の API を使用した結果であり、機能改善により結果や特性が変化する場合があることにご留意ください。

ユースケース

URL context tool は、以下のようなユースケースに適しています。

  • Web 上の記事から重要なポイントを抽出する
  • 複数のリンク間で情報を比較したり、統合する
  • 特定のページの内容に基づいて質問に答える
  • 特定の目的(職務記述書の作成やテスト問題の作成など)のためにコンテンツを分析する

サポートされているモデル

URL context tool は、以下のモデルで使用できます。

  • Gemini 2.0 Flash
  • Gemini 2.5 Flash-Lite
  • Gemini 2.5 Flash
  • Gemini 2.5 Pro

使用方法

URL context tool は、以下の Python サンプルコードのように、tools として UrlContext を指定することで使用できます。

from google import genai
from google.genai.types import Tool, GenerateContentConfig, HttpOptions, UrlContext
  
client = genai.Client(
    http_options=HttpOptions(api_version="v1"),
    vertexai=True,
    project="sugimura",
    location="global",
)
model_id = "gemini-2.5-flash"
  
url_context_tool = Tool(
    url_context = UrlContext
)
  
url_1 = "https://www.city.shinjuku.lg.jp/seikatsu/seiso01_001025.html" # 新宿区のごみ分別辞典 
url_2 = "https://www.city.shinjuku.lg.jp/seikatsu/file09_01_00001.html" # 新宿区の町名別のごみ収集日一覧
  
contents = f"""
パソコンのキーボードをゴミとして出したいです。
居住地域は、新宿区の揚場町です。
ゴミの区分は何で、収集日はいつですか?
  
以下の URL を参考にしてください。
  
* 新宿区のごみ分別辞典: {url_1}
* 新宿区の町名別のごみ収集日一覧: {url_2}
"""
  
response = client.models.generate_content(
    model=model_id,
    contents=contents,
    config=GenerateContentConfig(
        tools=[url_context_tool],
        response_modalities=["TEXT"],
    )
)
  
# Generated contents
print("===== content.parts  =====")
for each in response.candidates[0].content.parts:
    print(each.text)
  
# URLs retrieved for context
print("\n===== url_context_metadata =====")
print(response.candidates[0].url_context_metadata)

URL context tool の検証

前述の Python コードを実行すると、以下のような結果になりました。

===== content.parts  =====
新宿区揚場町にお住まいの場合、パソコンのキーボードは**金属・陶器・ガラスごみ**として出すことができます。
  
収集日は、その月の**第2・第4水曜日**です。
  
===== url_context_metadata =====
url_metadata=[UrlMetadata(
  retrieved_url='https://www.city.shinjuku.lg.jp/seikatsu/seiso01_001025.html',
  url_retrieval_status=<UrlRetrievalStatus.URL_RETRIEVAL_STATUS_SUCCESS: 'URL_RETRIEVAL_STATUS_SUCCESS'>
), UrlMetadata(
  retrieved_url='https://www.city.shinjuku.lg.jp/seikatsu/file09_01_00001.html',
  url_retrieval_status=<UrlRetrievalStatus.URL_RETRIEVAL_STATUS_SUCCESS: 'URL_RETRIEVAL_STATUS_SUCCESS'>
)]

この生成結果は、実際に2025年8月現在の新宿区の Web サイトの記載内容と一致しています。

url_metadata として、実際にどの Web サイトからデータを取得してコンテキストとして利用したかが記録されています。

tools 不使用時との比較

Tools を使わない場合の実行結果と比較してみます。

(略)
    config=GenerateContentConfig(
        # tools=[url_context_tool],
        response_modalities=["TEXT"],
    )
(略)

上記のように、コードから tools の指定をコメントアウトして実行すると、以下のような結果になりました。

===== content.parts  =====
パソコンのキーボードを新宿区揚場町でゴミとして出す場合、以下のようになります。
  
1.  **ゴミの区分:**
    パソコンのキーボードは、通常「**不燃ごみ(燃えないごみ)**」として出すことができます。
  
    *   **注意点:** ただし、縦・横・高さの合計が30センチメートルを超える場合は「粗大ごみ」扱いとなります。一般的なサイズのキーボードであれば、不燃ごみで問題ありません。
  
2.  **収集日:**
    揚場町の不燃ごみの収集日は「**第2・第4火曜日**」です。
  
---
  
**まとめ:**
  
*   **区分:** **不燃ごみ**
*   **収集日:** **第2・第4火曜日**
  
===== url_context_metadata =====
None

上記は、事実とは異なる結果となっています。Web サイトがコンテキストとして与えられていないため、ハルシネーションが発生していることがわかります。

Google Search tool との比較

次に、比較のために Tools として Google Search tool(Google 検索でグラウンディングするツール)を指定して実行してみます。

from google import genai
from google.genai.types import Tool, GenerateContentConfig, HttpOptions, UrlContext, GoogleSearch # GoogleSearch を追加で import
  
(略)
  
# Google Search tool を定義
google_search_tool = Tool(
    google_search=GoogleSearch
)
  
(略)

   config=GenerateContentConfig(
        # tools=[url_context_tool],
        tools=[google_search_tool], # Google Search tool を使うよう指定
        response_modalities=["TEXT"],
    )
(略)

Google Search tool が優位だったケース

まずは、同じプロンプト(ごみの出し方に関する質問)で実行します。結果は、以下の通りでした。

===== content.parts  =====
新宿区揚場町にお住まいの場合、パソコンのキーボードのゴミの区分と収集日は、キーボードのサイズによって異なります。
  
**1. ゴミの区分**
パソコンのキーボードは、その大きさによって以下のいずれかに分類されます。
  
*   **粗大ごみ**:
    キーボードの一辺の長さが30cmを超える場合、粗大ごみとなります。一般的なパソコンのキーボードは、この粗大ごみに該当することが多いです。粗大ごみとして出す場合、事前申し込みと手数料が必要です。
  
*   **金属・陶器・ガラスごみ**:
    キーボードの一辺の長さが30cm以下の場合は、「金属・陶器・ガラスごみ」に分類されます。ただし、「硬質で厚さが5㎜以上のもの、30cm角 以上の大きさのものは対象外」という規定もあるため、小型のキーボードであっても形状によっては注意が必要です。
  
**2. 収集日**
  
*   **粗大ごみとして出す場合(一辺の長さが30cm超)**
    粗大ごみは事前申し込み制で有料です。収集日は申し込み時に決定されます。
    *   **手数料**: パソコン用キーボードは1点につき400円です。
    *   **申し込み方法**:
        *   **インターネット**: 新宿区粗大ごみ受付センターのウェブサイト(https://www.shinjuku-sodai.com)から24時間申し込み可能です。
        *   **電話**: 粗大ごみ受付センター(電話番号: 03-5304-8080)へ連絡してください。受付時間は月曜日から土曜日の午前8時から午後7時までです(年末年始を除く)。
  
*   **金属・陶器・ガラスごみとして出す場合(一辺の長さが30cm以下)**
    揚場町における「金属・陶器・ガラスごみ」の収集日は、**毎月第2・第4水曜日**です。
    収集日の朝8時までに、決められた集積所に出してください。
  
===== url_context_metadata =====
None

これは、実際の Web サイトの掲載内容と同じ結果が返りました。むしろ、Google Search tool を使ったほうが詳細な結果が得られました。新宿区の Web サイトは、Google 検索でも容易に発見できる内容であったためと考えられます。

URL context tool が優位だったケース

次に、URL context tool の優位性が出るケースを検証するため、もう少し Google で検索しづらい複雑な内容を生成させてみます。

(略)
# G-gen Tech Blog の Google Agentspace 解説記事
url_1 = "https://blog.g-gen.co.jp/entry/google-agentspace-explained"
  
contents = f"""
Google Agentspace において、Agentspace Enterprise ライセンスでは、ノーコードエージェントを開発することはできますか?
以下の URL を参考にしてください。
  
{url_1}
"""
(略)

まずは、URL context tool ではなく、Google Search tool を使った実行結果を見てみます。

===== content.parts  =====
はい、Google Agentspace の Enterprise ライセンスでは、ノーコードエージェントを開発できます。
  
Google Agentspace は、企業がAIエージェントを構築、管理、導入するための単一かつ安全なプラットフォームを提供しており、個人、チーム、そして企業全体の可能性を解き放つことを目指しています。Enterprise エディションは月額25ドルから利用可能です。
  
特に、**Agent Designer** というノーコードツールが提供されており、技術的な専門知識がなくてもカスタムAIエージェントを作成できます。このツールは、日常業務を自動化するエージェントを構築するために、直感的な会話型インターフェースを使用します。
  
検索結果では、**Agent DesignerはAgentspace Enterprise Plusエディションで利用可能である**と明記されています。Agent Designerを使用すると、プログラミングを必要としない自然言語の記述を使って、カスタムAIエージェントを作成できます。これらのノーコードエージェントは、Agentspace環境内で設定されたすべてのデータソースやツールと連携してワークフローを自動化します。
  
Google Cloud Next 2025で発表されたAgentspaceのAgent Designerは、ノーコードツールであり、ユーザーが繰り返し発生するタスクを支援するエージェントを構築できます。
  
したがって、Google AgentspaceのEnterpriseライセンス、特にEnterprise Plusエディションでは、ノーコードツールであるAgent Designerを使用してノーコードエージェントを開発することが可能です。
  
===== url_context_metadata =====
None

上記の生成結果は、ハルシネーションを起こしています。実際には Enterprise ライセンスではノーコードエージェントの開発を行うことはできません。また、最後の文では Enterprise ライセンスと Enterprise Plus ライセンスは別々のものであるのにも関わらず、混同しています。

次に、同じプロンプトで URL context tool を使った結果を見てみます。

===== content.parts  =====
Google Agentspace の Agentspace Enterprise ライセンスでは、ノーコードエージェントを開発することはできません。
  
参照した記事の「ライセンス体系」の項目にある表によると、Agentspace Enterprise ライセンスには「ノーコードエージェント」の機能が含まれていないと明記されています。
  
ノーコードエージェントの作成機能を含むのは、最上位プランである Agentspace Enterprise Plus ライセンスです。 Agentspace Frontline ライセンスでは、ノーコードエージェントは配布物の利用のみに制限されます。
  
===== url_context_metadata =====
url_metadata=[UrlMetadata(
  retrieved_url='https://blog.g-gen.co.jp/entry/google-agentspace-explained',
  url_retrieval_status=<UrlRetrievalStatus.URL_RETRIEVAL_STATUS_SUCCESS: 'URL_RETRIEVAL_STATUS_SUCCESS'>
)]

今回は、解説記事の内容を正確に参照して、正しい答えが生成されました。特定の Web サイトのコンテンツのみに基づいて生成させたい場合は、URL context tool が優位であると考えられます。

Google Search tool との併用

URL context tool は、Google Search tool と併用することが可能です。これにより、特定の URL に加えて、インターネットから広く情報を収集してコンテンツを生成できます。

Python の場合、ソースコードは以下のようになります。

from google import genai
from google.genai.types import Tool, GenerateContentConfig, HttpOptions, UrlContext, GoogleSearch
  
client = genai.Client(
    http_options=HttpOptions(api_version="v1beta1"),
    vertexai=True,
    project="sugimura",
    location="global",
)
model_id = "gemini-2.5-flash"
  
tools = []
tools.append(Tool(url_context=UrlContext))
tools.append(Tool(google_search=GoogleSearch))
  
url_1 = "https://www.serverworks.co.jp/corporate/about.html" # 株式会社サーバーワークスの会社概要ページ
  
contents = f"""
株式会社 G-gen と、株式会社サーバーワークスの関係性を教えてください。
また、両社のビジョンを比較してください。
以下の URL を参考にしてください。
  
{url_1}
"""
  
response = client.models.generate_content(
    model=model_id,
    contents=contents,
    config=GenerateContentConfig(
        tools=tools,
        response_modalities=["TEXT"],
    )
)
  
# Generated contents
print("===== content.parts  =====")
for each in response.candidates[0].content.parts:
    print(each.text)
  
# URLs retrieved for context
print("\n===== url_context_metadata =====")
print(response.candidates[0].url_context_metadata)

ポイントは、tools に辞書型で URL context tool と Google Search tool の両方を格納している点と、Client 生成時に api_version として v1beta1 を指定している点です。これらのツールの併用は、ベータ版の API でのみ提供されている点に注意してください。

今回はプロンプトとして、株式会社サーバーワークスと株式会社 G-gen の関係性やビジョンについて質問します。参考 URL として、株式会社サーバーワークスの会社概要ページのみを与えました。

出力結果は以下のようになりました。

===== content.parts  =====
株式会社G-genと株式会社サーバーワークスの関係性、および両社のビジョンの比較は以下の通りです。
  
**株式会社G-genと株式会社サーバーワークスの関係性**
  
株式会社G-genは、株式会社サーバーワークスがGoogle Cloud™事業へ本格参入するために、2021年8月に設立した合弁会社です。サーバーワークスはG-genの親会社にあたります。
  
G-genは、サーバーワークスと、アジアトップクラスのクラウドベンダーであるBespin Global Inc.とのジョイントベンチャーとして設立されました。
  
2024年7月1日には、株式会社G-genと株式会社トップゲート(これもサーバーワークスのグループ会社でGoogle Cloudパートナー)が合併し、新生G-genとして事業を拡大しています。
  
**両社のビジョンの比較**
  
両社は全く同じビジョンを掲げています。
  
*   **株式会社サーバーワークス**: 「クラウドで、世界を、もっと、はたらきやすく」
*   **株式会社G-gen**: 「クラウドで、世界を、もっと、はたらきやすく」
  
この共通のビジョンは、「より多くの企業がクラウドによって競争力を高め、そこで働く従業員が『働きやすい環境になった』と思えるような社会にすること」を目指しています。
  
ただし、このビジョンを実現するための主要な手段と焦点が異なります。
  
*   **株式会社サーバーワークス**は、主に**AWS(Amazon Web Services)**に特化したインテグレーション事業とサービスの提供を通じて、このビジョンの実現を目指しています。オンプレミス環境の運用負荷やコストを軽減し、企業の働き方をクラウドで進化させることを重視しています.
*   **株式会社G-gen**は、主に**Google Cloud™**および**Google Workspace**を専門とするクラウドインテグレーターとして、このビジョンの実現に取り組んでいます。Google Cloudが持つ生成AIやデータ分析などのユニークな技術を活用し、場所にとらわれない、高セキュリティでアジリティの高いITシステムの提供を通じて、顧客のDX(デジタルトランスフォーメーション)とビジネス成功を支援することを目指しています。また、サーバーワークスのAWSノウハウと連携し、マルチクラウド環境でのカスタマーサクセスも提供しています。
  
===== url_context_metadata =====
url_metadata=[UrlMetadata(
  retrieved_url='https://www.serverworks.co.jp/corporate/about.html',
  url_retrieval_status=<UrlRetrievalStatus.URL_RETRIEVAL_STATUS_SUCCESS: 'URL_RETRIEVAL_STATUS_SUCCESS'>
)]

上記の結果には、コンテキストとして与えていない株式会社 G-gen のビジョンや沿革についての情報が含まれています。

この結果から、コンテキストとして与えた URL の情報と、Google 検索から得た情報の両方をコンテキストとして結果が生成されたことがわかります。

ここに全文は掲載しませんが、response の全文を確認すると、URL context tool と Google Search tool の両方が使用されたことが確認できました。

杉村 勇馬 (記事一覧)

執行役員 CTO / クラウドソリューション部 部長

元警察官という経歴を持つ現 IT エンジニア。クラウド管理・運用やネットワークに知見。AWS 認定資格および Google Cloud 認定資格はすべて取得。X(旧 Twitter)では Google Cloud や Google Workspace のアップデート情報をつぶやいています。