TL;DR
- Codex API のコスト最適化は「キャッシュ・バッチ・モデル選択・トークン設計」の4軸で体系化できます
- Prompt Caching でキャッシュヒット分のトークンコストが約50%削減(公式値)できます
- Batch API を使うと同等の処理を通常比50%のコストで実行できます(公式値)
- 適切なモデルルーティングで品質を維持しつつ総コストを30〜60%削減できます(経験則)
はじめに:Codex API コストが膨らみやすい理由
Codex API(OpenAI の GPT-4o / o4-mini 系モデルを使ったコード生成・補完)を実務に導入すると、開発初期には意識しなかったコストが月次請求として顕在化することがあります。
主な原因は3つです。
- プロンプトが毎回フルで送信される — システムプロンプトが 2,000〜5,000 トークンある場合、キャッシュなしでは全リクエストで同量の input token を消費します
- 同期型 API への過度な依存 — 即時レスポンスが不要なバッチ処理にも同期 API を使うと割高になります
- 高精度モデルの一律使用 — 全タスクに gpt-4o を使うと、gpt-4o-mini で十分な処理にもフルコストがかかります
コスト構造の理解:token 料金体系
OpenAI の公式 Pricing ページ(2026年5月時点)を基に主要モデルの料金を整理します。
主要モデル料金比較
| モデル | Input(/1M tokens) | Output(/1M tokens) | Cached Input(/1M tokens) |
|---|---|---|---|
| gpt-4o | $2.50 | $10.00 | $1.25(公式値) |
| gpt-4o-mini | $0.15 | $0.60 | $0.075(公式値) |
| o4-mini | $1.10 | $4.40 | $0.275(公式値) |
| codex-1 | $1.50 | $6.00 | $0.75(公式値) |
Cached Input は通常 Input の50%です(公式値)。キャッシュの有無だけで Input コストが半額になります。
トークン計算の基礎
- 英語テキスト:1トークン ≈ 4文字(公式推定値)
- 日本語テキスト:1トークン ≈ 1〜2文字(公式推定値)
- コードブロック:1トークン ≈ 3〜4文字(公式推定値)
5,000文字の日本語システムプロンプトは約3,000〜5,000 input tokens に相当します。
施策①:Prompt Caching の有効化と効果測定
OpenAI のPrompt Caching 公式ガイドによると、キャッシュは1,024トークン以上のプロンプトが対象で、5分間キャッシュされます(公式値)。
有効化の方法
Prompt Caching は追加設定不要で自動適用されます。ただしキャッシュが有効に機能するには条件があります。
- プロンプトの先頭部分(システムプロンプト)が一定であること
- 1,024トークン以上のプレフィックスが存在すること
- リクエスト間隔が5分以内であること
コスト試算:月間1,000リクエストの場合
# 前提条件
システムプロンプト: 3,000 tokens(固定部分)
ユーザーメッセージ: 500 tokens(毎回変化)
出力: 1,000 tokens
モデル: gpt-4o
月間リクエスト数: 1,000件
Before(キャッシュなし)
Input: (3,000 + 500) × 1,000 = 3,500,000 tokens
Input コスト: 3.5M × $2.50 / 1M = $8.75
Output: 1,000 × 1,000 = 1,000,000 tokens
Output コスト: 1M × $10.00 / 1M = $10.00
月間合計: $18.75
After(キャッシュヒット率80%想定)
Input(通常): (3,000 + 500) × 200件 = 700,000 tokens → $1.75
Input(キャッシュ済): 3,000 × 800件 = 2,400,000 tokens → $3.00($1.25/1M)
Input(非キャッシュ部分): 500 × 800件 = 400,000 tokens → $1.00
Output: 変わらず $10.00
月間合計: $15.75 → 約16%削減
キャッシュヒット率の確認
import openai
response = openai.chat.completions.create(
model="gpt-4o",
messages=[
{"role": "system", "content": system_prompt},
{"role": "user", "content": user_message},
],
)
# usage オブジェクトでキャッシュ状況を確認
usage = response.usage
print(f"Prompt tokens: {usage.prompt_tokens}")
print(f"Cached tokens: {usage.prompt_tokens_details.cached_tokens}")
print(f"Cache hit rate: {usage.prompt_tokens_details.cached_tokens / usage.prompt_tokens:.1%}")
施策②:Batch API でバックグラウンド処理コストを半減
OpenAI Batch APIは非同期でリクエストをまとめて処理し、通常比50%のコストで実行できます(公式値)。24時間以内にレスポンスが返ります。
向いているタスク
| タスク | 同期API | Batch API |
|---|---|---|
| コードレビューの自動化 | × | ○ |
| テスト自動生成(CI/CD) | ○(即時必要) | × |
| ドキュメント生成 | × | ○ |
| バグ分類・優先度付け | × | ○ |
| コメント翻訳 | × | ○ |
実装例
import json
import openai
client = openai.OpenAI()
# 1. バッチリクエストファイルを作成
requests = [
{
"custom_id": f"review-{i}",
"method": "POST",
"url": "/v1/chat/completions",
"body": {
"model": "gpt-4o-mini",
"messages": [
{"role": "system", "content": "コードレビューをしてください。"},
{"role": "user", "content": code_snippet},
],
},
}
for i, code_snippet in enumerate(code_snippets)
]
# JSONL ファイルに書き出し
with open("batch_requests.jsonl", "w") as f:
for req in requests:
f.write(json.dumps(req, ensure_ascii=False) + "\n")
# 2. ファイルをアップロード
batch_file = client.files.create(
file=open("batch_requests.jsonl", "rb"),
purpose="batch",
)
# 3. バッチジョブを作成
batch = client.batches.create(
input_file_id=batch_file.id,
endpoint="/v1/chat/completions",
completion_window="24h",
)
print(f"Batch ID: {batch.id}")
Batch API のコスト試算
月間1,000リクエストを Batch API に移行した場合:
同期API月間コスト: $18.75
Batch API 月間コスト: $9.38(50%削減、公式値)
月間削減額: $9.37
施策③:モデルルーティング設計
全タスクに高精度モデルを使う必要はありません。タスク難易度に応じてモデルを使い分けることで、品質を維持しながらコストを削減できます(経験則:総コスト30〜60%削減)。
タスク別モデル推奨マッピング
| タスクカテゴリ | 推奨モデル | 理由 |
|---|---|---|
| 複雑なアーキテクチャ設計 | gpt-4o / o4-mini | 高い推論能力が必要 |
| コードレビュー(中規模) | gpt-4o | バランス重視 |
| 単純なバグ修正・補完 | gpt-4o-mini | コスト効率が高い |
| テンプレートコード生成 | gpt-4o-mini | 定型処理に十分 |
| ドキュメント生成 | gpt-4o-mini | 高精度不要 |
| セキュリティ監査 | o4-mini | 深い推論が必要 |
ルーティング実装例
def route_model(task_type: str, code_length: int) -> str:
"""タスク種別とコード長に基づいてモデルを選択する"""
complex_tasks = {"architecture", "security_audit", "complex_refactor"}
if task_type in complex_tasks:
return "o4-mini"
elif code_length > 500:
return "gpt-4o"
else:
return "gpt-4o-mini"
model = route_model("code_review", len(code_snippet))
response = client.chat.completions.create(model=model, ...)
モデル別コスト比較(同一タスク)
タスク: 500行コードのレビュー(Input: 約3,000 tokens、Output: 約800 tokens)
gpt-4o: $0.0075 + $0.0080 = $0.0155/件
gpt-4o-mini: $0.00045 + $0.00048 = $0.00093/件
→ gpt-4o-mini は gpt-4o の約1/17のコスト(公式料金から計算)
施策④:トークン削減プロンプト設計
Input token を削減することはそのままコスト削減につながります。
システムプロンプト圧縮
Before(冗長な例・約100 tokens)
あなたは経験豊富なソフトウェアエンジニアです。
コードレビューを行う際は、以下の点に注意してください:
1. コードの品質について確認してください
2. バグがないかチェックしてください
3. セキュリティ上の問題がないか確認してください
4. パフォーマンスに問題がないか確認してください
After(圧縮版・約30 tokens)
コードレビュアー。品質・バグ・セキュリティ・パフォーマンスを簡潔に指摘。
約70%のトークン削減(経験則)。品質が変わらないことをA/Bテストで確認してから適用してください。
出力フォーマット制御
response = client.chat.completions.create(
model="gpt-4o-mini",
messages=messages,
max_tokens=500, # 必要十分な上限を設定
response_format={"type": "json_object"}, # 構造化出力でパース処理も削減
)
Few-shot 例の最適化
Few-shot 例を多数入れるとトークンが膨らみます。1〜2例に絞り、それ以外はゼロショットで対応できるかテストしましょう。
OPTIMIZED_SYSTEM_PROMPT = """コードレビュアー。JSON で出力:
{"issues": [{"line": 行番号, "severity": "high|medium|low", "message": "説明"}]}
例:
{"issues": [{"line": 12, "severity": "high", "message": "SQLインジェクションの危険"}]}"""
コスト監視の実装
コスト最適化は実施して終わりではなく、継続的な監視が必要です。
OpenAI Usage API でコストを取得
import openai
from datetime import date, timedelta
client = openai.OpenAI()
def get_daily_cost(target_date: date) -> dict:
"""指定日のコスト・トークン使用量を取得する"""
# OpenAI Usage API: https://platform.openai.com/docs/api-reference/usage
usage = client.usage.completions(
start_time=int(target_date.strftime("%s")),
end_time=int((target_date + timedelta(days=1)).strftime("%s")),
group_by=["model"],
)
return usage
コストアラートの設定
OpenAI の公式ダッシュボードからハードリミットとソフトリミットを設定できます(公式機能)。プログラムによる通知も可能です。
import requests
def send_daily_cost_report(cost: float, threshold: float = 10.0):
"""日次コストが閾値を超えたら Slack に通知する"""
if cost > threshold:
requests.post(
SLACK_WEBHOOK_URL,
json={"text": f"OpenAI 日次コストアラート: ${cost:.2f} (閾値: ${threshold})"},
)
施策別 コスト削減効果 × 実装コスト マトリクス
| 施策 | 削減効果 | 実装コスト | 優先度 | 備考 |
|---|---|---|---|---|
| Prompt Caching | 中〜大(〜50%) | 低(自動適用) | 最高 | 設定不要、即効性あり(公式値) |
| Batch API | 大(50%) | 中(非同期設計変更) | 高 | 即時性不要タスクに限定(公式値) |
| モデルルーティング | 中〜大(30〜60%) | 中(分岐ロジック実装) | 高 | 品質検証が必要(経験則) |
| システムプロンプト圧縮 | 小〜中(10〜30%) | 低(プロンプト修正のみ) | 中 | A/Bテストで品質確認必要(経験則) |
| max_tokens 制限 | 小〜中(5〜20%) | 低 | 中 | タスク別に上限を調整(経験則) |
| コスト監視実装 | 直接削減なし | 低〜中 | 高 | 異常検知・継続改善に必須 |
着手優先順位: Prompt Caching(即効・低コスト)→ Batch API(高効果・中コスト)→ モデルルーティング(高効果・要検証)→ プロンプト圧縮(継続改善)
👉 シリーズ全体像: Codex vs Claude Code 使い分け2026
まとめ
Codex API のコスト最適化は、以下の4軸で体系的に進められます。
- Prompt Caching — 設定不要で最もリスクが低い。まず最初に確認する
- Batch API — 即時性不要なタスクをまとめて50%削減(公式値)
- モデルルーティング — タスク難易度に応じたモデル選択で30〜60%削減(経験則)
- トークン設計 — プロンプト圧縮と出力制御で継続的に改善
コスト監視の仕組みを作り、どの施策がどの程度効いているかを数値で把握することが長期的なコスト管理の鍵です。
Codex の基本的な使い方はCodex CLI を実務に組み込む2026年版ガイドを、Claudeとの使い分けについてはCodex vs Claude Code:2026年版徹底比較をご参照ください。AI駆動開発全体のコスト設計についてはAI駆動開発の計画術も合わせてご覧ください。
マルチエージェント構成でのコスト最適化についてはマルチエージェント開発パターン実践も参考になります。
ルーティング先のモデルが世代交代したときに、コスト前提と出力品質をどう測り直すかはCoding Agentのモデル更新運用と回帰テストで扱っています。
FAQ
Codex API のトークン料金はどのように計算されるのか?
Input tokens(プロンプト)と Output tokens(生成テキスト)の合計で課金されます。gpt-4o の場合、Input が $2.50/1M tokens、Output が $10.00/1M tokens です(公式値、2026年5月時点)。Prompt Caching が有効な場合、キャッシュ済み Input は $1.25/1M tokens(通常の50%)です。
プロンプトキャッシュを有効化するとどれくらいコストが下がるか?
固定のシステムプロンプトが 1,024 tokens 以上あり、5分以内のリクエスト間隔でキャッシュヒットする場合、キャッシュ部分のコストが50%削減されます(公式値)。実測では月間コストの10〜30%削減が一般的です(経験則)。
バッチ処理(Batch API)はどんなタスクに向いているか?
コードレビューの自動化、ドキュメント生成、バグ分類など「即時レスポンスが不要で大量処理したい」タスクに向いています。CI/CDでの即時テスト生成など、結果を数秒以内に必要とするタスクには向きません。
品質を落とさずに安いモデルに切り替える判断基準は?
まず gpt-4o-mini で試験運用し、出力品質をスコアリングします。品質スコアが基準値(経験則:gpt-4oの85%以上)を満たすタスクでは gpt-4o-mini に切り替えます。複雑な推論が必要なタスク(セキュリティ監査、アーキテクチャレビュー)は高精度モデルを維持します。
コスト監視はどう実装すればよいか?
OpenAI の公式ダッシュボードでハードリミット・ソフトリミットを設定する方法と、Usage API を使って自前でモニタリングする方法があります。チームで使う場合は Usage API+Slack 通知の組み合わせが実用的です。
References
- OpenAI Pricing — モデル別料金(2026年5月時点の公式情報)
- Prompt Caching ガイド — OpenAI 公式ドキュメント
- Batch API ドキュメント — OpenAI 公式ドキュメント
- Usage API リファレンス — OpenAI 公式ドキュメント
- OpenAI ダッシュボード(使用量・制限設定) — 公式管理画面
