Gemini API による文書要約の魅力
日々の業務で膨大なドキュメントに目を通し、会議の議事録を作成する作業は、多くのビジネスパーソンにとって大きな負担です。Gemini API の長大なコンテキストウィンドウ(最大 100 万トークン)を活用すれば、こうした作業を高精度に自動化できます。
テキストだけでなく PDF や音声ファイルの要約にも対応する、実用的なアプローチを紹介します。
環境準備と API キーの取得
まずは Gemini API を使うための環境を整えましょう。Google AI Studio でアカウントを作成し、API キーを発行します。
必要なライブラリをインストールします。
pip install google-genai python-dotenv環境変数に API キーを設定します。
# .env ファイル
GEMINI_API_KEY=YOUR_API_KEY基本的なクライアントの初期化コードは以下のとおりです。
import os
from dotenv import load_dotenv
from google import genai
load_dotenv()
client = genai.Client(api_key=os.getenv("GEMINI_API_KEY"))Gemini API の基本的なセットアップについて詳しくは、Gemini API クイックスタートガイドも参考にしてください。
テキスト文書の要約を実装する
もっとも基本的なユースケースとして、長文テキストの要約から始めましょう。Gemini 3 Flash は高速かつコスト効率に優れたモデルで、要約タスクに最適です。
def summarize_text(text: str, style: str = "bullet") -> str:
"""テキストを要約する
Args:
text: 要約対象のテキスト
style: "bullet"(箇条書き)または "paragraph"(段落形式)
Returns:
要約されたテキスト
"""
if style == "bullet":
prompt = f"""以下のテキストを、重要なポイントを箇条書きで要約してください。
各ポイントは1〜2文で簡潔にまとめてください。
テキスト:
{text}"""
else:
prompt = f"""以下のテキストを300文字以内の段落形式で要約してください。
核心となる情報を漏らさず、読みやすい文章にしてください。
テキスト:
{text}"""
response = client.models.generate_content(
model="gemini-3-flash",
contents=prompt
)
return response.text
# 使用例
long_document = """
(ここに要約したい長文テキストを入れます)
"""
# 箇条書き形式で要約
summary = summarize_text(long_document, style="bullet")
print(summary)
# 出力例:
# - ポイント1: ...
# - ポイント2: ...
# - ポイント3: ...ポイントは、プロンプトで出力形式を明確に指定することです。「箇条書き」「段落形式」「表形式」など、用途に応じたフォーマットを指示することで、後続の処理が格段に楽になります。
PDF ファイルの要約を実装する
Gemini API はマルチモーダル対応のため、PDF ファイルを直接アップロードして内容を要約できます。OCR 処理を別途行う必要がないのは大きな利点です。
import pathlib
def summarize_pdf(pdf_path: str) -> str:
"""PDFファイルを要約する
Args:
pdf_path: PDFファイルのパス
Returns:
PDFの要約テキスト
"""
# PDFファイルをアップロード
pdf_file = client.files.upload(
file=pathlib.Path(pdf_path)
)
response = client.models.generate_content(
model="gemini-3-flash",
contents=[
"以下のPDF文書の内容を要約してください。"
"主要なトピック、結論、アクションアイテムを"
"それぞれ分けて整理してください。",
pdf_file
]
)
return response.text
# 使用例
summary = summarize_pdf("quarterly_report.pdf")
print(summary)
# 出力例:
# 【主要トピック】
# - 第4四半期の売上は前年比15%増
# - 新製品ラインの市場投入が完了
#
# 【結論】
# - 年間目標を達成し...
#
# 【アクションアイテム】
# - 来期の予算案を4月までに策定PDF の解析精度をさらに高めたい場合は、Gemini API PDF 解析ガイドで詳しいテクニックを紹介しています。
音声ファイルから議事録を自動生成する
会議の録音データから議事録を自動生成する機能は、実務でとくに需要が高いユースケースです。Gemini API は音声ファイルを直接処理できるため、別途文字起こしサービスを使う必要がありません。
def generate_meeting_notes(audio_path: str) -> str:
"""音声ファイルから議事録を生成する
Args:
audio_path: 音声ファイルのパス(mp3, wav, m4a 等)
Returns:
構造化された議事録テキスト
"""
audio_file = client.files.upload(
file=pathlib.Path(audio_path)
)
prompt = """この音声は会議の録音です。以下の形式で議事録を作成してください。
【会議の概要】
(1〜2文で全体の概要を記述)
【議題と決定事項】
- 議題1: (内容と決定事項)
- 議題2: (内容と決定事項)
【アクションアイテム】
- 担当者名: タスク内容(期限)
【次回の予定】
(次回の会議日時やアジェンダがあれば記載)"""
response = client.models.generate_content(
model="gemini-3-flash",
contents=[prompt, audio_file]
)
return response.text
# 使用例
notes = generate_meeting_notes("team_meeting_20260328.m4a")
print(notes)
# 出力例:
# 【会議の概要】
# プロダクトチームの週次定例。新機能のリリーススケジュールと
# QAプロセスの改善について議論した。
#
# 【議題と決定事項】
# - リリース日程: 4月15日に確定
# - QA自動化: Seleniumテストの導入を承認
#
# 【アクションアイテム】
# - 田中: テスト計画書の作成(4/3まで)
# - 鈴木: CI/CDパイプラインの更新(4/5まで)音声ファイルのサイズが大きい場合は、File API を使ったアップロードが必要です。詳しくは Gemini API ファイルアップロードガイドをご覧ください。
複数文書の横断要約を実装する
プロジェクトに関連する複数の文書をまとめて分析し、横断的な要約を生成するケースも考えてみましょう。Gemini の長大なコンテキストウィンドウが真価を発揮する場面です。
def cross_document_summary(documents: list[dict]) -> str:
"""複数文書を横断的に要約する
Args:
documents: [{"title": "文書名", "content": "本文"}, ...] のリスト
Returns:
横断的な要約テキスト
"""
docs_text = ""
for i, doc in enumerate(documents, 1):
docs_text += f"\n--- 文書{i}: {doc['title']} ---\n{doc['content']}\n"
prompt = f"""以下の{len(documents)}件の文書を分析し、横断的に要約してください。
求める出力:
1. 全文書に共通するテーマや結論
2. 文書間で矛盾する情報や異なる見解(あれば)
3. 全体を通じた重要なインサイト3つ
{docs_text}"""
response = client.models.generate_content(
model="gemini-3-pro", # 複雑な分析には Pro モデルを使用
contents=prompt
)
return response.text
# 使用例
documents = [
{"title": "市場調査レポート", "content": "..."},
{"title": "競合分析資料", "content": "..."},
{"title": "顧客フィードバック集計", "content": "..."},
]
insight = cross_document_summary(documents)
print(insight)複数の大容量文書を処理する場合、API コストが気になるかもしれません。同じ文書セットを繰り返し分析するなら、Gemini API コンテキストキャッシュ完全ガイドで解説しているキャッシュ機能を使うことで、コストを大幅に削減できます。
要約結果を構造化データとして取得する
要約の結果を後続のシステムで処理しやすいように、JSON 形式で取得する方法も紹介します。Gemini API の構造化出力機能を使えば、型安全な出力が得られます。
from google.genai import types
# レスポンスのスキーマを定義
summary_schema = types.Schema(
type="object",
properties={
"title": types.Schema(type="string", description="要約のタイトル"),
"key_points": types.Schema(
type="array",
items=types.Schema(type="string"),
description="重要ポイントのリスト"
),
"action_items": types.Schema(
type="array",
items=types.Schema(
type="object",
properties={
"task": types.Schema(type="string"),
"assignee": types.Schema(type="string"),
"deadline": types.Schema(type="string"),
},
),
description="アクションアイテム"
),
"sentiment": types.Schema(
type="string",
enum=["positive", "neutral", "negative"],
description="文書全体のトーン"
),
},
)
def summarize_structured(text: str) -> dict:
"""構造化された要約を返す"""
response = client.models.generate_content(
model="gemini-3-flash",
contents=f"以下の文書を要約してください:\n\n{text}",
config=types.GenerateContentConfig(
response_mime_type="application/json",
response_schema=summary_schema
)
)
import json
return json.loads(response.text)
# 使用例
result = summarize_structured(long_document)
print(result)
# 出力例:
# {
# "title": "Q4営業レポート要約",
# "key_points": [
# "売上目標を12%上回って達成",
# "新規顧客獲得数が過去最高を記録"
# ],
# "action_items": [
# {"task": "来期計画の策定", "assignee": "営業部長", "deadline": "2026-04-15"}
# ],
# "sentiment": "positive"
# }全体を振り返って
Gemini API を使った文書要約・議事録生成の自動化について、基本的なテキスト要約から PDF 処理、音声ファイルの議事録生成、複数文書の横断分析、構造化出力まで幅広く紹介しました。
Gemini の大きなコンテキストウィンドウとマルチモーダル対応により、従来は複数のツールを組み合わせる必要があった処理を、1 つの API で完結できるようになっています。まずは簡単なテキスト要約から試して、徐々に PDF や音声ファイルの処理にも挑戦してみてください。