OpenAI API がタイムアウトする?Workers で専用チャネルを構築、コストゼロで安定化
引言
先週、ChatGPT アプリを開発していて、フロントから API を叩いたら接続タイムアウト——国内からは OpenAI に直接つながりません。ネットで買ったプロキシも試しましたが、信頼できるか不安で、API Key が漏れるリスクも大きい。VPS を借りて自前構築する案もありましたが、月額コストにサーバー設定・運用の手間がかかります。
そこで見つけたのが Cloudflare Workers。完全無料で、5 分もあれば構築できます。2 ヶ月以上使っていますが、安定しているうえ、有料プロキシより速いこともあります。本記事では、すぐ使えるコード付きで手順を共有します。
なぜ Cloudflare Workers を選ぶのか
コストゼロ、個人開発者に十分
Workers の無料プランは、1 日 10 万リクエスト、毎分 1000 回まで使えます。「無料で大丈夫?」と最初は思いましたが、個人開発・学習・小規模プロジェクトなら十分でした。
ざっくり計算すると、1 リクエスト平均 2 秒として、1 日 8 時間ぶっ続けで呼び出しても 2000 回程度。10 万回の枠を使い切るには、何日もかかります。
サーバー不要で手間が少ない
従来は VPS を借り、Nginx でリバースプロキシを組み、落ちないか心配する必要がありました。Workers ならインフラは Cloudflare が面倒を見てくれるので、コードを数行書くだけです。
Workers は Cloudflare のグローバル CDN 上で動くため、単一 VPS より速くなることもあります。世界 300 都市超にノードがあります。
API Key をフロントに出さない
ここが特に重要です。フロントから直接 OpenAI API を叩くと、ブラウザの開発者ツールで API Key が丸見えになります。Workers を中間に置けば、フロントは Worker の URL だけを叩き、本物の API Key は Cloudflare の環境変数に安全に保管できます。
"2025 年 8 月、Cloudflare は OpenAI と提携し、OpenAI のオープンソースモデルを Workers AI に統合。毎日 10,000 Neurons の無料枠を提供"
2025 年の新しい特典
2025 年 8 月の OpenAI 提携で、純正 API のプロキシだけでなく、Cloudflare 提供のモデルも Workers AI から直接使えます。毎日 10,000 Neurons の無料枠付きです。
構築前の準備
準備はとてもシンプルです。
アカウントとリソース:
- Cloudflare アカウント(無料登録、数分)
- OpenAI または Claude の API Key(お持ちのはず)
- ドメイン(任意。無料の
.workers.devサブドメインも付与されます)
技術要件:
- JavaScript の基礎(
fetchが読めれば OK) - HTTP の基礎
所要時間:
- 初回:5〜10 分
- 慣れれば:3 分
実践:5 分で OpenAI プロキシを構築
ステップ 1:Worker を作成
Cloudflare コンソールにログインし、左メニューから「Workers & Pages」を開きます。「Create Application」→「Create Worker」を選びます。
Cloudflare がランダム名(例:aged-shadow-1234)を付けますが、openai-proxy などに変更して「Deploy」でデプロイ。まだ何もしませんが、動く Worker ができています。
ステップ 2:コードを書く
「Edit Code」でエディタを開き、次のコードを貼り付けます。
export default {
async fetch(request, env) {
const url = new URL(request.url);
// ドメインを OpenAI の API アドレスに置換
url.hostname = 'api.openai.com';
// 新しいリクエストを作成
const newRequest = new Request(url, {
method: request.method,
headers: request.headers,
body: request.body
});
// リクエストを転送してレスポンスを返す
const response = await fetch(newRequest);
// CORS クロスオリジン問題を処理
const newResponse = new Response(response.body, response);
newResponse.headers.set('Access-Control-Allow-Origin', '*');
newResponse.headers.set('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS');
newResponse.headers.set('Access-Control-Allow-Headers', 'Content-Type, Authorization');
return newResponse;
}
};
コードの流れ:
- フロントからのリクエストを受け取る
- ドメインを
api.openai.comに差し替える - 修正したリクエストを OpenAI に転送
- レスポンスをそのまま返す
- CORS もここで処理
「Save and Deploy」で保存します。
ステップ 3:テスト
デプロイ後、Worker の URL(例:https://openai-proxy.あなたの名前.workers.dev)が表示されます。
curl で試します(YOUR_API_KEY を自分のキーに置き換え):
curl https://openai-proxy.あなたの名前.workers.dev/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_API_KEY" \
-d '{
"model": "gpt-3.5-turbo",
"messages": [{"role": "user", "content": "Hello!"}]
}'
OpenAI から正常なレスポンスが返れば成功です。
応用:複数の AI サービスに対応
Claude API プロキシ
Claude は OpenAI と構造が少し違い、主にリクエストヘッダーが異なります。次のように分岐を足します。
export default {
async fetch(request, env) {
const url = new URL(request.url);
// パスでサービスを判定
if (url.pathname.startsWith('/claude')) {
// /claude プレフィックスを除き Anthropic へ
url.pathname = url.pathname.replace('/claude', '');
url.hostname = 'api.anthropic.com';
} else {
// デフォルトは OpenAI
url.hostname = 'api.openai.com';
}
const newRequest = new Request(url, {
method: request.method,
headers: request.headers,
body: request.body
});
const response = await fetch(newRequest);
const newResponse = new Response(response.body, response);
newResponse.headers.set('Access-Control-Allow-Origin', '*');
return newResponse;
}
};
/claude/v1/messages へのアクセスは Claude API に転送されます。
Gemini API プロキシ
Gemini のエンドポイントは generativelanguage.googleapis.com です。判定を 1 つ足すだけです。
if (url.pathname.startsWith('/gemini')) {
url.pathname = url.pathname.replace('/gemini', '');
url.hostname = 'generativelanguage.googleapis.com';
}
これで 1 つの Worker が 3 つの AI サービスをプロキシできます。
セキュリティのベストプラクティス
API Key をハードコードしない
チュートリアルによっては Worker コードに API Key を直書きしていますが、やめましょう。コードは平文保存され、誤共有のリスクもあります。
正しくは環境変数です。Worker 設定の「Variables and Secrets」で追加します。
- 名前:
OPENAI_API_KEY - 値:あなたの API Key
- タイプ:「Secret」(暗号化保存)
コード側:
export default {
async fetch(request, env) {
// 環境変数から API Key を読み込む
const apiKey = env.OPENAI_API_KEY;
// リクエストヘッダーに API Key を付与
const headers = new Headers(request.headers);
headers.set('Authorization', `Bearer ${apiKey}`);
// 以降は同じ...
}
};
フロントから API Key を渡す必要がなくなり、より安全です。
カスタム認証トークンを足す
Worker URL が漏れたときの悪用を防ぐなら、簡単な認証を追加できます。
export default {
async fetch(request, env) {
// カスタム Token をチェック
const authToken = request.headers.get('X-Custom-Auth');
if (authToken !== env.MY_SECRET_TOKEN) {
return new Response('Unauthorized', { status: 401 });
}
// 検証通過後、リクエスト処理を続行...
}
};
環境変数 MY_SECRET_TOKEN を設定し、フロントからこのカスタムヘッダーを付けて呼び出します。
使用量を監視する
Cloudflare コンソールの Analytics で、日次リクエスト数・エラー率などを確認できます。無料枠に近づいたら早めに気づけるよう、定期的に見ておきましょう。
「Notifications」で、リクエスト数が 10 万回に近づいたらメール通知するルールも作れます。
よくある問題と対処
リクエストが遅い・タイムアウトする
極端に遅い場合、割り当てノードが最適でないことがあります。
対処:カスタムドメインをバインドする。DNS に合わせてルーティングが最適化され、無料の .workers.dev より速くなることが多いです。
Worker 設定の「Triggers」→「Add Custom Domain」でドメイン(例:api.yourdomain.com)を入力し、DNS レコードを追加します。
403 や 401 エラー
多くは API Key の問題です。
- 環境変数名とコード内の名前が一致しているか
- API Key が有効で残高があるか
- OpenAI / Claude に地域制限がないか(Workers はグローバルですが、一部ノードが制限対象と判定されることも)
デバッグ用にログを足します。
console.log('API Key:', env.OPENAI_API_KEY ? '設定済み' : '未設定');
Worker の「Logs」タブでリアルタイム確認できます。
無料枠が足りないとき
10 万回では足りない(商用など)場合は有料プランを検討します。
- Workers 有料:月額 $5、1000 万リクエスト込み
- 超過:100 万リクエストあたり $0.50
中規模アプリなら、VPS 自前よりコスト・運用の面で有利なことが多いです。
最適化のヒント:
- フロントでキャッシュし、同じリクエストを繰り返さない
- バッチ API があればまとめて呼び、回数を減らす
- 開発中は Mock データを使い、本番 API を叩きすぎない
まとめ
Workers プロキシの強みは次の 3 点です。
- コストゼロ:個人開発には十分な無料枠
- ハードル低い:5 分で完了、コードは 30 行未満
- リスク低い:API Key を安全に保管、漏洩を防げる
個人学習・デモ・小規模プロジェクトに向いています。安定した AI API アクセスを探しているなら、Workers を試してみてください。
今すぐ 1 つ作ってみましょう。記事をブックマークしておけば、困ったときにすぐ戻れます。ほかにハマった点があれば、コメントで教えてください。
参考になる OSS として、chatgptProxyAPI と worker-openai-proxy はコードが読みやすく、GitHub で学ぶのに向いています。
いま AI API にはどんな方法でアクセスしていますか? コメントで教えてください。
FAQ
Cloudflare Workers の無料版で十分ですか?
無料版の枠:
• 1 日 10 万リクエスト
• 1 分あたり 1000 回
• 1 日 8 時間ぶっ続けで呼び出しても 2000 回程度
商用プロジェクトや高負荷の場面でのみ、有料版(月額 $5、1000 万リクエスト)を検討してください。
Workers プロキシは OpenAI 直結より遅くなりますか?
メリット:
• Cloudflare は世界 300 超の CDN ノードを保有
• 地域によっては Workers 経由の方が OpenAI 直結より速いことも
カスタムドメインをバインドするとルーティングが最適化され、さらに速くなることがあります。
API Key の漏洩をどう防ぐ?
追加対策:
• カスタム認証トークン(X-Custom-Auth ヘッダー)を追加
• トークンを知るクライアントだけが呼び出せるようにする
• Worker URL の漏洩が心配なら、カスタムドメインと IP ホワイトリストを設定
Workers で OpenAI・Claude・Gemini を同時にプロキシできる?
パスプレフィックスでサービスを区別します:
• デフォルトパス → OpenAI
• /claude → Claude
• /gemini → Gemini
1 つの Worker で 3 大 AI サービスをまとめて扱え、コードは 50 行以下です。
Workers の利用状況とコストをどう監視する?
• リクエスト数
• エラー率
• レスポンス時間など
Notifications ルールで、リクエスト数が 10 万回に近づいたらメール通知も設定可能です。
有料版では詳細なログとトレースも確認できます。
3分で読めます · 公開日: 2025年12月1日 · 更新日: 2026年6月8日
AI 開発実践
検索からこのページに来た場合は、前後の記事もあわせて読むと同じテーマの理解がかなり早く深まります。
前の記事
AI で 1 万行のレガシーコードをリファクタリング:1 ヶ月分の仕事を 2 週間で終えた実録
Claude Code で 1 万行の Vue レガシーコードをリファクタリングした全工程を記録。3 年間誰も触れなかったスパゲッティコードを引き継ぎ、2 週間で事故ゼロのリリースまで。テスト生成・コード診断・リファクタリング実行のプロンプトテンプレートと、落とし穴回避ガイド付き。
第 2 / 40 記事
次の記事
AIプロバイダーの切り替えが面倒?AI Gateway一つで監視、キャッシュ、フェイルオーバーを解決(コスト40%削減)
AI Gatewayを使ってOpenAI、Claude、Geminiなど複数のAIプロバイダーを一元管理し、自動フェイルオーバー、スマートキャッシュ、グローバル監視を実現する方法を完全ガイド。コストを40%削減し、可用性を99.9%まで向上させます。3大ソリューションの比較と完全なコード例付き。
第 4 / 40 記事
関連記事
Workers AI 完全ガイド:毎日 1 万回相当の無料 LLM 呼び出し、OpenAI より最大 90% 節約
Workers AI 完全ガイド:毎日 1 万回相当の無料 LLM 呼び出し、OpenAI より最大 90% 節約
Agent Sandbox 構築ガイド:AIコードを安全に実行する完全ソリューション
Agent Sandbox 構築ガイド:AIコードを安全に実行する完全ソリューション
ベクトル DB は高すぎる? Vectorize 無料版で 30 分セマンティック検索
コメント
GitHubアカウントでログインしてコメントできます