GEMINI LABEN
ROBOTICS — 8月31日に停止した ER 1.6 preview には後継があります。Gemini Robotics ER 2 が公開プレビュー中で、通常版とストリーミング版の2種類が提供されていますVIDEO — ER 2 の成功・失敗判定は静止画ではなく生の映像フィード上で動きます。こぼれ・滑り・位置ずれのような、実行の途中で起きる失敗を捉えられる設計ですDEADLINE — 次の期限は9月30日、gemini-omni-flash-preview の廃止です。移行先は8月27日に GA になった gemini-omni-1.1-flash で、残り4週間を切りましたAPIKEY — 残りの標準 API キーは、制限付きのものも含めて9月中に全面停止します。移行先は Google Cloud サービスアカウントに紐付く auth キー形式ですPRICE — Gemini 3.7 Flash の導入価格 $0.75/$3.75 per 1M は12月31日までです。2027年1月1日から $1.50/$7.50 になるため、年を跨ぐ見積もりは2本立てが要りますAUDIO — Gemini 3.5 Transcribe は85言語以上の言語検出、話者ダイアライゼーション、単語単位タイムスタンプ、最大1,000語のカスタム語彙バイアスに対応していますROBOTICS — 8月31日に停止した ER 1.6 preview には後継があります。Gemini Robotics ER 2 が公開プレビュー中で、通常版とストリーミング版の2種類が提供されていますVIDEO — ER 2 の成功・失敗判定は静止画ではなく生の映像フィード上で動きます。こぼれ・滑り・位置ずれのような、実行の途中で起きる失敗を捉えられる設計ですDEADLINE — 次の期限は9月30日、gemini-omni-flash-preview の廃止です。移行先は8月27日に GA になった gemini-omni-1.1-flash で、残り4週間を切りましたAPIKEY — 残りの標準 API キーは、制限付きのものも含めて9月中に全面停止します。移行先は Google Cloud サービスアカウントに紐付く auth キー形式ですPRICE — Gemini 3.7 Flash の導入価格 $0.75/$3.75 per 1M は12月31日までです。2027年1月1日から $1.50/$7.50 になるため、年を跨ぐ見積もりは2本立てが要りますAUDIO — Gemini 3.5 Transcribe は85言語以上の言語検出、話者ダイアライゼーション、単語単位タイムスタンプ、最大1,000語のカスタム語彙バイアスに対応しています
記事一覧/API / SDK
API / SDK/2026-06-20上級

Gemini API Grounding × Structured Output — Web検索結果をJSON構造化データに変換する

Gemini APIのGrounding with Google SearchとStructured Outputを組み合わせ、リアルタイムWeb情報を型安全なJSONデータとして抽出する実装パターンを解説。

Gemini API228Grounding3Structured OutputGoogle Search2JSONリアルタイムデータエージェント15

プレミアム記事

Gemini APIで外部情報を取得して構造化したい。この2つの要件を同時に満たすのは、つい最近まで不可能でした。Grounding with Google Searchを有効にするとStructured Outputが使えず、逆もまた然り。Gemini 3のAPIアップデートで、ようやくこの制約が解消されました。

Web検索の結果を型定義どおりのJSONで返す。この組み合わせが使えるようになったことで、「最新の為替レートを取得してJSON配列で返す」「競合製品の価格を検索して比較テーブル用のデータにする」といった処理が、1回のAPI呼び出しで完結します。

Grounding × Structured Outputが解決する問題

従来のアプローチでは、2段階のパイプラインが必要でした。

1回目のAPI呼び出しでGroundingを使ってWeb情報を取得し、テキスト応答を受け取ります。2回目の呼び出しで、そのテキストをStructured Outputで構造化します。コストは2倍、レイテンシも2倍、そしてテキスト応答を再入力する際に情報が欠落するリスクがありました。

新しい統合APIでは、toolsにGoogle Searchを指定しつつ、response_mime_typeでJSONスキーマを定義できます。モデルが検索を実行し、結果を理解し、指定した型に変換するまでを1ステップで処理します。

from google import genai
from google.genai import types
import json
 
client = genai.Client()
 
# Grounding + Structured Outputの統合リクエスト
response = client.models.generate_content(
    model="gemini-2.5-pro",
    contents="2026年4月時点のGemini APIの料金体系を調べて、モデルごとに整理してください",
    config=types.GenerateContentConfig(
        tools=[types.Tool(google_search=types.GoogleSearch())],
        response_mime_type="application/json",
        response_schema={
            "type": "object",
            "properties": {
                "pricing_data": {
                    "type": "array",
                    "items": {
                        "type": "object",
                        "properties": {
                            "model_name": {"type": "string"},
                            "input_price_per_million": {"type": "string"},
                            "output_price_per_million": {"type": "string"},
                            "context_window": {"type": "string"},
                        },
                        "required": [
                            "model_name",
                            "input_price_per_million",
                            "output_price_per_million"
                        ]
                    }
                },
                "last_updated": {"type": "string"},
                "source_urls": {
                    "type": "array",
                    "items": {"type": "string"}
                }
            },
            "required": ["pricing_data", "last_updated"]
        }
    )
)
 
# 型安全なJSONが直接返る
data = json.loads(response.text)
for model in data["pricing_data"]:
    print(f"{model['model_name']}: 入力 {model['input_price_per_million']}/1M tokens")
 
# Groundingメタデータで出典を確認
if response.candidates[0].grounding_metadata:
    for chunk in response.candidates[0].grounding_metadata.grounding_chunks:
        print(f"  出典: {chunk.web.title}{chunk.web.uri}")

このコードが返すのは、Google検索で取得した最新情報を元に構造化されたJSON。スキーマに沿わないフィールドは含まれず、必須フィールドが欠けることもありません。

レスポンスの構造を理解する

統合リクエストのレスポンスには、通常のStructured Outputに加えてgrounding_metadataが付与されます。ここに検索クエリ、参照元URL、引用情報が格納されています。

candidate = response.candidates[0]
 
# 1. 構造化されたJSONテキスト
structured_data = json.loads(candidate.content.parts[0].text)
 
# 2. Groundingメタデータ
metadata = candidate.grounding_metadata
 
# 検索に使われたクエリ
print("検索クエリ:", metadata.web_search_queries)
# → ['Gemini API pricing 2026', 'Gemini 2.5 Pro API cost per token']
 
# 参照元のWebページ
for chunk in metadata.grounding_chunks:
    print(f"参照: {chunk.web.title}")
    print(f"  URL: {chunk.web.uri}")
 
# 引用サポート(レスポンスのどの部分がどの出典に基づくか)
for support in metadata.grounding_supports:
    print(f"テキスト: {support.segment.text}")
    print(f"  出典インデックス: {support.grounding_chunk_indices}")
    print(f"  信頼度: {support.confidence_scores}")

注意すべきなのは、grounding_supportsの挙動です。Structured Outputと組み合わせた場合、テキスト応答がJSON形式になるため、grounding_supportssegment.textがJSON断片を指すことがあります。出典の検証にはgrounding_chunksのURL一覧を使うほうが確実です。

ここまでお読みいただきありがとうございます。

この記事の続きを読む

この先には、実装コードやベンチマーク結果など、実務でお役に立てる内容をご用意しています。このサイトは広告を掲載しておらず、サーバーや開発にかかる費用はメンバーの皆様のご支援で成り立っています。もしお役に立てていましたら、ご支援いただけますと大変ありがたいです。

この記事で得られること
Grounding と Structured Output を1回の呼び出しで統合し、Web検索結果を型安全なJSONとして取り出す実装
grounding_metadata の出典有無でレコードを隔離する検証ゲートの動くコードと閾値設計
スキーマ設計・コスト構造・本番運用の落とし穴まで含めた、抽出パイプラインの実運用ノウハウ
Stripe による安全な決済 · いつでもキャンセル可能

この記事を購入する

この先の内容をすべてお読みいただけます。一度のご購入で、いつでも何度でもアクセスできます。このサイトは広告を掲載しておらず、皆さまのご支援がサーバー費用などの運営を支えています。

または
メンバーシップなら全記事が読み放題 →
シェア

お読みいただきありがとうございます

Gemini Lab は広告なしで運営しており、サーバー費用などの運営コストはメンバーシップのご支援で賄っています。実装コード・ベンチマーク・本番設計パターンなど、実務でお役立ていただける記事を毎日更新しています。もし読んでよかったと感じていただけましたら、ぜひご覧ください。

  • コピー&ペーストで使える実装コード付き
  • 毎日新しい上級ガイドを追加
  • ¥580/月 または ¥2,480 の永久アクセス
メンバーシップを見る →

関連記事

API / SDK2026-07-29
出力トークンが17%減ると聞いて、総額はいくら下がるのかを分解した
出力単価16.67%減と出力トークン17%減が重なったとき、総額はいくら下がるのか。Gemini 3.6 Flash への切り替えを単価・数量・交差項に厳密分解し、エージェントループでは削減率がむしろ下がった実行結果と、請求との突き合わせ方をまとめました。
API / SDK2026-07-04
Managed Agents を並列で回すと同じリポジトリを奪い合う ― 隔離サンドボックスに効く外部リースとフェンシング
Managed Agents は実行ごとに隔離サンドボックスが立つため、複数実行が同じリポジトリやレコードに同時に触れてもローカルロックが効きません。外部リースとフェンシングトークンで単一実行を保証する実装をまとめました。
API / SDK2026-06-16
Gemini Managed Agents を自動化に組み込む ― 会話状態と環境状態を分けて扱う実装メモ
Managed Agents は1回の API 呼び出しで Linux サンドボックスを立て、エージェントを走らせて結果を返します。自前ループから移すとき最初につまずく「会話状態と環境状態は別物」という設計を、実際に動かしながら整理しました。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →