大苦戦トラブルまとめ
Cloudflare+OpenNext構成での「データ取得できない」大苦戦トラブルまとめ
🎬 状況・やりたかったこと
- Next.js(OpenNext)+Honoバックエンド+Cloudflare D1/R2で本番想定の構成を開発&検証
- フロントはOpenNext+wrangler devでCloudflare Worker模擬
- バックエンドはHono/TypeScript+D1/R2でAPI提供
🔥 詰まったトラブル
- 「worksページでデータ取得できず」エラー
❌ データの取得に失敗しました
- Chromeコンソールに
ReferenceError: __name is not defined
localhost:8787/api/works
にアクセス → 404- バックエンドAPI自体は
http://localhost:55888/api/works
で生きている
🧩 原因の切り分け〜解決までの「実践ノート」
1. APIエンドポイントの競合/向き先ミス
- フロント/バックエンド両方が
8787
*で立ち上がろうとして競合し、どちらかが別ポート(***55888
**など)へ自動で逃げていた lib/api-client.ts
のAPI_BASE_URLが環境変数やローカル起動方法によって意図通りになっていないケースも発生- → 解決策:環境ごとにAPI_BASE_URLを明示し、環境変数を正しくセット
2. Cloudflare OpenNext × Wranglerの落とし穴
OpenNext+wrangler dev でフロントを立ち上げると、**Next.js標準の3000番とは違うワーカー用ポート(例: 8787)**になる
→ ここで「APIも8787で立つ」と誤認しやすい
APIクライアントのベースURLが
localhost:8787
固定だったため、バックエンドAPIの実サーバーに到達できず404
3. __name is not defined エラーの正体
- OpenNext × Wrangler × Minifyの仕様で、minification時に
__name
参照がバグる - 公式Doc で「wrangler.jsoncで
keep_names: false
を明示すれば回避できる」と判明
4. Cloudflareの設定ファイル見直し&統一
- これまでは**
wrangler.toml
で管理** → **wrangler.jsonc
**で管理に変更(OpenNextの推奨) .env
ファイルでNEXT_PUBLIC_API_URL
などフロント用の環境変数を管理- APIクライアントは
process.env.NEXT_PUBLIC_API_URL || 'http://localhost:8787'
でベースURLを柔軟に - backendは引き続きwrangler.tomlでOK
5. トラブルシュート手順(総まとめ)
- .next / node_modules / lockファイル削除&再インストール
rm -rf .next node_modules package-lock.json
npm install
npm run build
- Cloudflare設定ファイル(wrangler.jsonc/toml)・.envの整合性を再確認
- backendのみ起動 → APIが生きているか(/api/worksでレスポンス来るか)を単独チェック
- frontendのみ起動 → API_BASE_URLが正しく参照できているか
- フロント・バックエンド両方起動 → 連携が取れているか(/works画面でデータ表示)を確認
💡 今後に生きる現場ノウハウ
- OpenNext × wrangler環境は「APIのベースURL」と「ポート管理」に超注意
- フロント/バックエンドがAPIをどこに向けてリクエストしているかはNetworkタブで必ずチェック
ReferenceError: __name is not defined
はCloudflare環境でのminify問題(wrangler.jsoncのkeep_namesで即回避可)- .env運用&パスの渡し方はローカル開発・Cloudflareそれぞれの流儀を押さえておくと安心
🏁 最終的な解決アクション例
frontend/.env
作成NEXT_PUBLIC_API_URL=http://localhost:8787
frontend/lib/api-client.ts
const API_BASE_URL = process.env.NEXT_PUBLIC_API_URL || 'http://localhost:8787'
frontend/wrangler.jsonc
{ "$schema": "node_modules/wrangler/config-schema.json", "main": ".open-next/worker.js", "name": "unlabeling-frontend-production", "keep_names": false, // ... }
backendはwrangler.tomlを維持(Cloudflare D1やR2などバインディングOK)
不要なwrangler.tomlは削除(frontendやルート直下などダブり注意)
npm run build / wrangler dev で挙動確認!
🏆 このトラブルで得たもの(要点)
- API・ポート・環境変数のズレ切り分け力
- Cloudflare Workers × Next.jsの現場トラブルシュート経験
- MinifyやWrangler固有エラーのリサーチ&即応ノウハウ