1万件のプロンプトを半額以下で処理できる——Batch APIは大量データ処理の救世主です。OpenAI・Claude・Geminiの3社を比較しながら使い方を解説します。

AIを知りたい
大量のデータを一度にAIで処理したいんですが、一つずつAPI呼び出しするしかないですか?

AIエンジニア
大量処理ならBatch APIを使いましょう!OpenAI、Claude、Geminiの各社がバッチ処理用のAPIを提供しています。コストも大幅に安くなります。

AIを知りたい
バッチ処理ってどういうことですか?

AIエンジニア
複数のリクエストをまとめて送信し、非同期で一括処理する方法です。リアルタイム性は不要だけど大量処理が必要な場合に最適です。
Batch APIとは
Batch APIとは、複数のAPIリクエストをまとめて非同期で処理するサービスです。通常のAPI呼び出しと比べて50%のコスト削減が可能で、データ分析、コンテンツ生成、評価タスクなど大量処理に適しています。
各社のBatch API比較

AIを知りたい
各社のバッチAPIってどう違うんですか?

AIエンジニア
比較してみましょう。
| 項目 | OpenAI Batch | Claude Batch | Gemini Batch |
|---|---|---|---|
| コスト削減 | 50% | 50% | 50% |
| 処理時間 | 最大24時間 | 最大24時間 | 数分〜数時間 |
| 入力形式 | JSONL | JSON配列 | BigQuery/GCS |
| 最大リクエスト数 | 50,000件 | 10,000件 | 制限なし(クォータ依存) |
| 結果取得 | ファイルダウンロード | API取得 | BigQuery/GCS出力 |
OpenAI Batch APIの使い方

AIを知りたい
まずOpenAIのバッチAPIの使い方を教えてください!

AIエンジニア
JSONLファイルを作成して送信する流れです。
import openai
import json
# 1. バッチ入力ファイルの作成
requests = []
for i, text in enumerate(texts_to_process):
requests.append({
"custom_id": f"request-{i}",
"method": "POST",
"url": "/v1/chat/completions",
"body": {
"model": "gpt-4o",
"messages": [
{"role": "system", "content": "テキストを要約してください"},
{"role": "user", "content": text}
]
}
})
# JSONLファイルとして保存
with open("batch_input.jsonl", "w") as f:
for req in requests:
f.write(json.dumps(req) + "n")
# 2. ファイルをアップロード
client = openai.OpenAI()
batch_file = client.files.create(
file=open("batch_input.jsonl", "rb"),
purpose="batch"
)
# 3. バッチジョブの開始
batch = client.batches.create(
input_file_id=batch_file.id,
endpoint="/v1/chat/completions",
completion_window="24h"
)
print(f"バッチID: {batch.id}")
Claude Message Batches APIの使い方

AIを知りたい
ClaudeのバッチAPIも教えてください!

AIエンジニア
Claude APIでもバッチ処理が可能です。
import anthropic
client = anthropic.Anthropic()
# バッチリクエストの作成
batch = client.messages.batches.create(
requests=[
{
"custom_id": f"item-{i}",
"params": {
"model": "claude-sonnet-4-20250514",
"max_tokens": 1024,
"messages": [
{"role": "user", "content": text}
]
}
}
for i, text in enumerate(texts_to_process)
]
)
# ステータス確認
result = client.messages.batches.retrieve(batch.id)
print(f"ステータス: {result.processing_status}")
# 結果の取得
for result in client.messages.batches.results(batch.id):
print(f"{result.custom_id}: {result.result.message.content}")
バッチ処理の活用シーン

AIを知りたい
どんな場面でバッチAPIを使うべきですか?

AIエンジニア
リアルタイム性が不要な大量処理全般に向いています。
| 活用シーン | 処理内容 | メリット |
|---|---|---|
| データ分類 | 大量テキストのカテゴリ分け | 50%コスト削減 |
| コンテンツ生成 | 商品説明文の一括作成 | 並列処理不要 |
| 翻訳 | 多言語一括翻訳 | API制限回避 |
| 品質評価 | AIモデルのベンチマーク | 大規模評価が安価 |
| データクレンジング | 不正データの検出・修正 | 自動化による効率化 |

AIを知りたい
コスト半分はかなり大きいですね!

AIエンジニア
大量処理でバッチAPIを使わないのは、お金を捨てているようなものです。急がない処理はすべてバッチに回すのが、プロダクション環境での鉄則ですよ!
関連記事
- Claude Prompt Caching入門:APIコストを90%削減する方法
- OpenAI Structured Outputs:JSON出力を確実に得る方法
- GPT-4o mini活用ガイド:最強コスパAIモデルの使いこなし方
OpenAI Batch APIで大量リクエストを一括処理する:JONLファイル作成からステータス確認まで
Batch APIを使い、数百〜数千件のリクエストを一括で送信してコストを50%削減する方法を実装します。JONLファイルの作成、バッチジョブの投入、完了確認、結果取得までの全工程を確認しましょう。
from openai import OpenAI
import json
import time
client = OpenAI()
# ステップ1: バッチリクエスト用のJSONLファイルを作成
requests_data = [
{
"custom_id": f"req-{i}",
"method": "POST",
"url": "/v1/chat/completions",
"body": {
"model": "gpt-4o-mini",
"messages": [
{"role": "system", "content": "技術用語を小学生にもわかるように1文で説明してください。"},
{"role": "user", "content": term}
],
"max_tokens": 200
}
}
for i, term in enumerate([
"ニューラルネットワーク", "勾配降下法", "過学習",
"正則化", "バッチ正規化", "ドロップアウト",
"転移学習", "ファインチューニング", "蒸留",
"アテンション機構"
])
]
jsonl_path = "batch_requests.jsonl"
with open(jsonl_path, "w", encoding="utf-8") as f:
for req in requests_data:
f.write(json.dumps(req, ensure_ascii=False) + "\n")
print(f"JONLファイル作成完了: {len(requests_data)}件")
# ステップ2: ファイルをアップロード
batch_file = client.files.create(
file=open(jsonl_path, "rb"),
purpose="batch"
)
print(f"ファイルアップロード完了: {batch_file.id}")
# ステップ3: バッチジョブを作成
batch_job = client.batches.create(
input_file_id=batch_file.id,
endpoint="/v1/chat/completions",
completion_window="24h",
metadata={"description": "AI用語の簡単説明を一括生成"}
)
print(f"バッチジョブ作成: {batch_job.id} (status={batch_job.status})")
# ステップ4: 完了をポーリングで待機
while batch_job.status in ["validating", "in_progress", "finalizing"]:
time.sleep(30)
batch_job = client.batches.retrieve(batch_job.id)
completed = batch_job.request_counts.completed
total = batch_job.request_counts.total
print(f" status={batch_job.status} ({completed}/{total})")
# ステップ5: 結果を取得
if batch_job.status == "completed":
result_file = client.files.content(batch_job.output_file_id)
results = result_file.text.strip().split("\n")
for line in results:
res = json.loads(line)
custom_id = res["custom_id"]
content = res["response"]["body"]["choices"][0]["message"]["content"]
print(f" {custom_id}: {content}")
print(f"\n合計 {len(results)} 件の結果を取得")
elif batch_job.status == "failed":
print(f"バッチ失敗: {batch_job.errors}")
# エラーファイルがある場合
if batch_job.error_file_id:
errors = client.files.content(batch_job.error_file_id)
print(errors.text)
Batch APIの最大のメリットはコスト削減です。通常のAPI呼び出しと比べて50%安い料金で同じモデル・同じ品質の結果が得られます。ただし、完了まで最大24時間かかるため、リアルタイム性が不要な用途に限定されます。典型的なユースケースは、大量テキストの分類・翻訳、データセットへのラベル付け、コンテンツの一括生成です。JONLファイルの各行が独立したリクエストのため、1件のエラーが他に影響しない点も堅牢性の面で優れています。
