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-03-27初級

Gemini API で PDF を解析・要約する — Python で始めるドキュメント AI

Gemini API を使って PDF ファイルのテキスト抽出・要約・質問応答を Python で実装する方法を解説。File API のアップロードからマルチモーダル処理まで、初心者にもわかりやすいステップバイステップガイドです。

gemini-api279pdf6python103multimodal24document-ai2file-api6summarization3

PDF 解析がこれほど簡単になった理由

業務で大量の PDF を扱う場面は少なくありません。契約書のレビュー、論文のサマリー作成、請求書からのデータ抽出など、手作業では時間がかかるタスクばかりです。

Gemini API のマルチモーダル機能を使えば、PDF ファイルをそのまま入力として渡し、テキスト抽出・要約・質問応答を数行の Python コードで実行できます。OCR や外部ライブラリを別途用意する必要はありません。Gemini がページの画像とテキストレイヤーの両方を理解し、コンテキストに基づいた正確な応答を返してくれます。

Gemini API の File API を使った PDF アップロードから、要約・情報抽出・Q&A まで、実際に動くコード例とともに順を追って進めます。

前提知識と環境準備

必要なもの

  • Python 3.10 以上がインストール済みであること
  • Google AI Studio の API キーaistudio.google.com で無料取得可能)
  • 解析したい PDF ファイル(サンプルとして任意の PDF を用意してください)

SDK のインストール

pip install google-genai

API キーの設定

import os
from google import genai
 
# 環境変数から API キーを読み込む(推奨)
client = genai.Client(api_key=os.environ["GEMINI_API_KEY"])
 
# 確認
print("Gemini API クライアントの初期化に成功しました")

環境変数は事前にターミナルで設定しておきます。

export GEMINI_API_KEY="YOUR_API_KEY"

API キーの取得方法や初期設定について詳しく知りたい方は、Gemini API クイックスタートガイドを参照してください。

PDF ファイルを Gemini API にアップロードする

Gemini API で PDF を扱うには、まず File API を使ってファイルをアップロードします。アップロードされたファイルは一時的にサーバーに保存され、その後のプロンプトで参照できるようになります。

import os
from google import genai
 
client = genai.Client(api_key=os.environ["GEMINI_API_KEY"])
 
# PDF ファイルをアップロード
pdf_file = client.files.upload(
    file="report.pdf",  # ローカルのPDFファイルパス
    config={"display_name": "分析対象レポート"}
)
 
print(f"アップロード完了: {pdf_file.name}")
print(f"URI: {pdf_file.uri}")
print(f"状態: {pdf_file.state}")
 
# 期待する出力:
# アップロード完了: files/xxxxxxxxxxxx
# URI: https://generativelanguage.googleapis.com/v1beta/files/xxxxxxxxxxxx
# 状態: State.ACTIVE

アップロードしたファイルは最大 48 時間サーバーに保持されます。保持期間を過ぎると自動的に削除されるため、必要に応じて再アップロードしてください。

大きな PDF を扱う場合のポイント

Gemini API は最大 2GB のファイルアップロードに対応しています。ただし、ページ数が多い PDF の場合はトークン消費量が増えるため、以下の点に注意してください。

  • 100 ページ以下: そのままアップロードして問題ありません
  • 100〜300 ページ: 必要なページ範囲を指定するプロンプトが効果的です
  • 300 ページ超: PDF を分割してから処理することを推奨します

File API の詳細な使い方については、File API の完全ガイドも併せてご覧ください。

PDF の内容を要約する

アップロードした PDF を使って、最もよくある「要約」タスクを実行してみましょう。

import os
from google import genai
 
client = genai.Client(api_key=os.environ["GEMINI_API_KEY"])
 
# PDF をアップロード
pdf_file = client.files.upload(file="report.pdf")
 
# 要約を生成
response = client.models.generate_content(
    model="gemini-2.5-flash",
    contents=[
        pdf_file,  # アップロード済みの PDF
        "この PDF の内容を以下の形式で要約してください:\n"
        "1. 概要(3行以内)\n"
        "2. 主要なポイント(箇条書き5つ以内)\n"
        "3. 結論\n"
        "日本語で回答してください。"
    ]
)
 
print(response.text)
 
# 期待する出力(例):
# ## 概要
# 本レポートは2026年度のAI市場動向を分析し...
#
# ## 主要なポイント
# - 生成AI市場は前年比45%の成長...
# - マルチモーダルAIの採用が急速に拡大...
# ...

プロンプトで出力形式を指定することで、毎回一貫した構造の要約を得られます。業務で繰り返し使う場合は、テンプレートとして保存しておくと便利です。

モデルの選び方

PDF 解析に適した Gemini モデルは用途によって異なります。

  • Gemini 2.5 Flash: 処理速度が速く、コストも低い。日常的な要約や情報抽出に最適
  • Gemini 2.5 Pro: より複雑な分析や長文 PDF の処理に適しています。契約書の条項比較など高精度が求められる場面向け
  • Gemini 3.1 Pro: 最新のモデルで推論能力が大幅に向上。ARC-AGI-2 ベンチマークで 77.1% を達成しており、複雑なドキュメント分析に強い

PDF から特定の情報を抽出する

要約だけでなく、PDF から特定のデータを構造化して抽出することも可能です。請求書や報告書からのデータ抽出に特に威力を発揮します。

import os
import json
from google import genai
 
client = genai.Client(api_key=os.environ["GEMINI_API_KEY"])
 
pdf_file = client.files.upload(file="invoice.pdf")
 
# 構造化データとして抽出
response = client.models.generate_content(
    model="gemini-2.5-flash",
    contents=[
        pdf_file,
        "この請求書から以下の情報を JSON 形式で抽出してください:\n"
        "- company_name: 発行元の会社名\n"
        "- invoice_number: 請求書番号\n"
        "- date: 発行日\n"
        "- total_amount: 合計金額\n"
        "- items: 明細(品名、数量、単価、小計の配列)\n"
        "JSON のみを返してください。"
    ],
    config={
        "response_mime_type": "application/json"
    }
)
 
# JSON としてパース
data = json.loads(response.text)
print(json.dumps(data, ensure_ascii=False, indent=2))
 
# 期待する出力:
# {
#   "company_name": "株式会社サンプル",
#   "invoice_number": "INV-2026-0342",
#   "date": "2026-03-15",
#   "total_amount": "¥158,400",
#   "items": [
#     {
#       "name": "コンサルティング費用",
#       "quantity": 1,
#       "unit_price": "¥120,000",
#       "subtotal": "¥120,000"
#     }
#   ]
# }

response_mime_typeapplication/json を指定すると、Gemini は必ず有効な JSON を返します。後続の処理でパースエラーが発生するリスクを大幅に減らせる、実務で非常に重宝するテクニックです。

PDF に対して質問応答(Q&A)を行う

PDF の内容について自然言語で質問し、回答を得ることもできます。マニュアルや仕様書の内容を素早く確認したいときに便利です。

import os
from google import genai
 
client = genai.Client(api_key=os.environ["GEMINI_API_KEY"])
 
pdf_file = client.files.upload(file="user_manual.pdf")
 
# 質問を投げる
questions = [
    "このマニュアルに記載されている対応OSは何ですか?",
    "初期設定の手順を簡潔に教えてください。",
    "トラブルシューティングで最も多い問題は何ですか?"
]
 
for q in questions:
    response = client.models.generate_content(
        model="gemini-2.5-flash",
        contents=[pdf_file, q]
    )
    print(f"Q: {q}")
    print(f"A: {response.text}\n")
 
# 期待する出力:
# Q: このマニュアルに記載されている対応OSは何ですか?
# A: 本マニュアルに記載されている対応OSは、Windows 11、macOS 14以降、
#    Ubuntu 22.04 LTS です。
#
# Q: 初期設定の手順を簡潔に教えてください。
# A: 1. アプリケーションをダウンロード...

一度アップロードした PDF は同じセッション内で繰り返し参照できるため、複数の質問を効率よく処理できます。

複数の PDF を一括で処理する

実務では複数の PDF を一括処理するケースも多いでしょう。以下は、フォルダ内の PDF をまとめて要約するスクリプトの例です。

import os
import glob
from google import genai
 
client = genai.Client(api_key=os.environ["GEMINI_API_KEY"])
 
# フォルダ内の PDF を一括アップロード
pdf_dir = "./documents/"
pdf_paths = glob.glob(os.path.join(pdf_dir, "*.pdf"))
 
results = []
 
for path in pdf_paths:
    filename = os.path.basename(path)
    print(f"処理中: {filename}")
 
    # アップロード
    pdf_file = client.files.upload(file=path)
 
    # 要約を生成
    response = client.models.generate_content(
        model="gemini-2.5-flash",
        contents=[
            pdf_file,
            "この PDF の内容を100文字以内で要約してください。日本語で回答してください。"
        ]
    )
 
    results.append({
        "filename": filename,
        "summary": response.text
    })
    print(f"  → {response.text[:80]}...\n")
 
# 結果を表示
print("=" * 60)
print(f"合計 {len(results)} 件の PDF を処理しました")
for r in results:
    print(f"\n📄 {r['filename']}")
    print(f"   {r['summary']}")

大量のファイルを処理する場合は、API のレート制限に注意してください。1 分あたりのリクエスト数には上限があるため、time.sleep() で適切な間隔を設けるとよいでしょう。大規模なバッチ処理には Gemini Batch Processing API の活用も検討してみてください。

よくあるエラーと対処法

ファイルサイズに関するエラー

File API のアップロード上限は 2GB ですが、処理可能なトークン数にも制限があります。ページ数が非常に多い PDF では「トークン上限超過」のエラーが返ることがあります。その場合は PDF を分割するか、処理対象のページを絞りましょう。

スキャン PDF(画像のみ)の扱い

テキストレイヤーがないスキャン PDF でも、Gemini はマルチモーダル機能で画像として解析できます。ただし、解像度が低い画像や手書き文字の認識精度は下がる場合があります。スキャン品質が低い場合は、事前に画像の解像度を上げる前処理を行うと精度が向上します。

「File not found」エラー

アップロード後 48 時間を過ぎるとファイルが自動削除されます。長時間実行するバッチ処理では、処理直前に再アップロードする設計にしておくと安心です。

まとめ

Gemini API を使った PDF 解析は、File API にファイルをアップロードし、プロンプトを送るだけというシンプルな手順で始められます。OCR ライブラリや複雑な前処理は不要で、テキスト抽出・要約・構造化データの抽出・Q&A まで幅広いタスクに対応できます。

まずは手元にある PDF で試してみてください。数行のコードで得られる結果に驚くはずです。さらに実践的なテクニック(表の高精度抽出、契約書の自動審査、複数ドキュメントの横断分析など)を学びたい方には、Gemini マルチモーダルドキュメント処理 高度ガイドもおすすめです。

シェア

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

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

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

もしこの記事がお役に立ちましたら、チップ(¥150)で応援いただけると大変励みになります。広告なしでの運営を続けるため、皆さまのご支援が大きな力になっています。

関連記事

API / SDK2026-07-12
長尺PDFの章ごと要約で、まる一章が要約から消えていたとき — 被覆率を計測して取りこぼしを塞ぐ運用メモ
章ごと要約→全体再結合は長尺PDFに効きますが、抽出漏れや再結合で一章がまるごと消えても要約は素知らぬ顔で完走します。被覆率という一つの数字で取りこぼしを検知し、消えた章だけ再実行する監査つきパイプラインを実装で示します。
API / SDK2026-05-31
Gemini APIで「Unsupported MIME type」エラーが出るときの原因と対処
画像や音声をGemini APIに渡したときに発生する『Unsupported MIME type』エラーを、MIMEタイプの綴り間違い・octet-stream問題・非対応フォーマットの3つの観点から切り分けて、確実に動くコードで解決します。
API / SDK2026-05-18
Gemini Vision で壁紙アプリの自動カテゴリ分類を実装した話
個人開発の壁紙アプリで Gemini Vision API を使い、画像の自動カテゴリ分類を実装した実体験です。精度改善のプロセスと、公式ドキュメントには載っていない落とし穴、GPT-4o Vision とのコスト比較までまとめました。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →