トラブルシュート

外部API呼び出しがCORSで失敗する問題をAI生成HTMLで防ぐプロンプト

ChatGPTやClaudeにHTMLを生成させると、fetchで外部APIを呼ぶコードが当然のように含まれることがあります。しかしAIはCORSポリシーを自動的に考慮してくれないため、生成直後のHTMLは本番URLで動かないことが珍しくありません。プロンプトの書き方を工夫するだけで、CORSエラーを最初から避けた構造のHTMLを生成させることができます。

よくある原因

AIツールはプロンプトに「天気APIを呼んで表示して」と書くと、APIキーをJavaScript内に直書きしてfetchするコードを生成します。これは動作するサンプルとしては正しいですが、公開HTMLとして配布するには2つの問題があります。①APIキーがソースから盗まれる、②配布先ドメインがAPI側のCORS許可リストに入っていない。

AIが生成するHTMLはローカル(file://)で動作確認したものをそのまま出力するため、プリフライトが発生する構成でも気づかれないまま含まれます。特にPOSTやカスタムヘッダーを使うAPIをGETに変えずに出力してくるケースでは、共有後に必ずCORSエラーが起きます。

  • 相手がログインなしで開ける状態か確認する
  • PCとスマホで最低1回ずつ表示を確認する
  • 内部情報・個人情報・不要な外部送信が残っていないか見る
  • レビュー期限と修正時の差し替え方を決めておく

自分側で確認すること

生成されたHTMLをそのまま使う前に、scriptタグ内のfetchを全件検索(Ctrl+Fで「fetch(」)し、外部オリジンへのリクエストがないか確認します。外部オリジンへのfetchが見つかったら、そのAPIがCORSを許可しているかをドキュメントで確認するか、Chromeのコンソールで実際に試します。

確認の結果、CORSが通らない場合はAIに追加指示を出します。「このAPIコールをサーバーサイドプロキシ経由に変更して。フロントエンドはhttps://myapp.example.com/api/weatherを呼ぶだけにして」と指示すると、AIは変換後の構成を出力します。ただしプロキシのサーバーコードも合わせて生成させないと片手落ちになります。

  • HTML内の外部script・form action・iframeを確認する
  • APIキーやトークンらしき文字列がないか検索する
  • 画像・CSS・JSのパスが公開後も解決できるか見る
  • noindexと認証を混同せず、必要なら両方設定する

相手側で確認すること

AI生成HTMLを共有した相手から「データが出ない」と言われたとき、まず相手が見ているブラウザのコンソールを確認してもらいます。「F12を押してConsoleタブを選択し、赤いエラーがあればスクリーンショットを送ってほしい」と伝えるのが最短の診断手順です。

コンソールにCORSエラーが出ている場合、相手側の問題ではなくHTMLの設計の問題です。その場合はAIに「CORSエラーなしで動くよう、プロキシまたはAPIキー不要の代替エンドポイントを使う構成に書き直して」と再生成を依頼します。

  • HTML内の外部script・form action・iframeを確認する
  • APIキーやトークンらしき文字列がないか検索する
  • 画像・CSS・JSのパスが公開後も解決できるか見る
  • noindexと認証を混同せず、必要なら両方設定する

再発防止の運用

AI生成HTMLに外部APIを組み込む際に使えるプロンプトテンプレートを手元に持っておくと効率的です。例:「外部APIのエンドポイントは変数API_ENDPOINTに切り出し、CORSが通らない場合は/api/proxyを呼ぶフォールバックを入れてください。APIキーはHTMLに直書きせず、環境変数から取得するコメントを入れてください」。

生成後の確認ステップも定型化します。①fetchの送信先を列挙 → ②各エンドポイントのCORS設定を確認 → ③ギガサイト便でプレビューURL発行後にシークレットウィンドウでコンソール確認。この3ステップをチェックリストにしてチーム内で共有しておくと、AI生成コードの品質を安定させられます。

  • HTML内の外部script・form action・iframeを確認する
  • APIキーやトークンらしき文字列がないか検索する
  • 画像・CSS・JSのパスが公開後も解決できるか見る
  • noindexと認証を混同せず、必要なら両方設定する

よくある質問

AIに「CORSを考慮したHTMLを作って」と指示しただけでは不十分ですか?

多くの場合不十分です。「プロキシサーバーが使えない環境で、APIキーをHTMLに含めずにデータを取得する方法」まで具体的に制約を伝えると、より現実的な構成が出力されます。

生成されたHTMLのCORSエラーをAIに自動修正させる方法はありますか?

ブラウザのコンソールに出たCORSエラーの全文をAIにそのまま貼り付けて「このエラーを修正して」と伝えると、エラーメッセージを解析して適切な修正案を出してくれます。エラー文の引用が最も効果的です。

CORS不要のAPIとして使いやすいサービスはどこで探せますか?

「public APIs CORS enabled」で検索すると、Public-APIs というGitHubリポジトリが見つかります。Corsの列が「Yes」のAPIはクライアントサイドから直接呼べるため、AI生成HTMLとの相性が良いです。

関連記事

トラブルシュート

外部API呼び出しがCORSで失敗するときの原因と直し方

外部APIへのfetchがCORSエラーで弾かれて困っている開発者・制作者向け。ブラウザ側とサーバー側それぞれの原因と、プリフライトリクエストの仕組みを踏まえた具体的な修正手順を解説します。

5分で読める
トラブルシュート

リンク先が別ドメインに飛ぶときの原因と直し方

WebデザイナーやノーコードユーザーがAI生成HTMLを共有したとき、リンクが別ドメインに飛ぶ原因を原因別に解説。ソース確認から修正・再公開までの手順を具体的にまとめます。

4分で読める
「トラブルシュート」の記事をもっと見る →