GEMINI LABEN
NANOLITE — Nano Banana 2 Liteが登場しました。Googleで最も速く、最もコスト効率の高いGemini Imageモデルで、軽量な画像生成を安く回したい用途に向いていますOMNIFLASH — Gemini Omni Flashがpublic previewになりました。ネイティブにマルチモーダルなモデルで、企業や開発者が独自の動的な動画ワークフローを構築できますAGENTS — Managed Agentsが拡張されました。background: trueでサーバー側の非同期実行とポーリング、リモートMCPサーバー連携、対話をまたぐ認証情報のリフレッシュに対応しますMEMORY — Memory BankのIngestEvents APIが一般提供になりました。イベントの取り込みとメモリ生成を分離し、コンテンツを継続的にストリームできますTHROUGHPUT — Provisioned Throughputで、同一モデル・同一リージョンに対して最大7件の保留オーダーを提出できるようになりましたDEPRECATE — 画像生成モデルは8月17日に、Gemini Enterprise Agent PlatformのGrok 4.1系は8月20日に停止される予定ですNANOLITE — Nano Banana 2 Liteが登場しました。Googleで最も速く、最もコスト効率の高いGemini Imageモデルで、軽量な画像生成を安く回したい用途に向いていますOMNIFLASH — Gemini Omni Flashがpublic previewになりました。ネイティブにマルチモーダルなモデルで、企業や開発者が独自の動的な動画ワークフローを構築できますAGENTS — Managed Agentsが拡張されました。background: trueでサーバー側の非同期実行とポーリング、リモートMCPサーバー連携、対話をまたぐ認証情報のリフレッシュに対応しますMEMORY — Memory BankのIngestEvents APIが一般提供になりました。イベントの取り込みとメモリ生成を分離し、コンテンツを継続的にストリームできますTHROUGHPUT — Provisioned Throughputで、同一モデル・同一リージョンに対して最大7件の保留オーダーを提出できるようになりましたDEPRECATE — 画像生成モデルは8月17日に、Gemini Enterprise Agent PlatformのGrok 4.1系は8月20日に停止される予定です
記事一覧/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 API191Grounding3Structured OutputGoogle Search2JSONリアルタイムデータエージェント14

プレミアム記事

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/月 または ¥1,480 の永久アクセス
メンバーシップを見る →

関連記事

API / SDK2026-07-04
Managed Agents を並列で回すと同じリポジトリを奪い合う ― 隔離サンドボックスに効く外部リースとフェンシング
Managed Agents は実行ごとに隔離サンドボックスが立つため、複数実行が同じリポジトリやレコードに同時に触れてもローカルロックが効きません。外部リースとフェンシングトークンで単一実行を保証する実装をまとめました。
API / SDK2026-06-16
Gemini Managed Agents を自動化に組み込む ― 会話状態と環境状態を分けて扱う実装メモ
Managed Agents は1回の API 呼び出しで Linux サンドボックスを立て、エージェントを走らせて結果を返します。自前ループから移すとき最初につまずく「会話状態と環境状態は別物」という設計を、実際に動かしながら整理しました。
API / SDK2026-05-30
Gemini 3 の thought signatures を保持してマルチターン function calling を壊さない本番設計
Gemini 3 の思考モデルで function calling を組むと、2 ターン目以降に推論が浅くなる現象に当たります。原因は thought signature の欠落です。署名を保持する本番実装と検証手順をまとめました。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →