カテゴリ: React 更新日: 2026/01/02

ReactでCORSエラーが出たときの対処法とは?初心者向けにFetch APIでの解決方法を解説!

Fetch APIでCORSエラーが発生したときの対処法
Fetch APIでCORSエラーが発生したときの対処法

先生と生徒の会話形式で理解しよう

生徒

「ReactでAPIにアクセスしようとしたら、なんか“CORSエラー”って出ました。何が起こったんですか?」

先生

「それは『クロスオリジンリクエスト』が原因でブロックされているというエラーです。セキュリティに関する制限ですね。」

生徒

「クロスオリジンってなんですか?どうやって直せばいいんですか?」

先生

「それじゃあ今回は、ReactのFetch APIでCORSエラーが出たときの原因と解決方法を一緒に学んでみましょう!」

1. CORSエラーとは何か?

1. CORSエラーとは何か?
1. CORSエラーとは何か?

CORSとは「Cross-Origin Resource Sharing(クロスオリジンリソースシェアリング)」の略です。簡単に言えば、「別の場所にあるデータにアクセスするときのルール」のことです。

たとえば、Reactアプリが http://localhost:3000 で動いていて、APIが https://api.example.com にある場合、これらは「別のオリジン」と見なされます。

セキュリティのため、ブラウザは違うオリジンへの通信を制限しています。そのため、適切な設定をしていないと「CORSエラー」が発生してしまうのです。

2. ReactでFetch APIを使うとCORSエラーが出るケース

2. ReactでFetch APIを使うとCORSエラーが出るケース
2. ReactでFetch APIを使うとCORSエラーが出るケース

Reactで外部のAPIにデータを取りに行くとき、以下のようなコードを書くことがあります。


fetch("https://api.example.com/data")
  .then((res) => res.json())
  .then((data) => console.log(data));

このとき、API側が「CORSを許可」していないと、ブラウザが「ダメです!」とエラーを返します。

(画面に何も表示されず、開発者ツールに「CORS policyによってブロックされました」と出ます)

3. なぜブラウザはCORSを制限するの?

3. なぜブラウザはCORSを制限するの?
3. なぜブラウザはCORSを制限するの?

インターネット上では、悪意のあるサイトが他のサイトのデータを盗もうとすることがあります。たとえば、勝手にログイン済みの情報を使って、別のサーバーにアクセスするような攻撃です。

こうした攻撃からユーザーを守るために、ブラウザには「CORSの制限」というセキュリティ機能が備わっているのです。

4. CORSエラーを解決するにはどうすればいい?

4. CORSエラーを解決するにはどうすればいい?
4. CORSエラーを解決するにはどうすればいい?

このエラーをReact側で完全に解決するのは難しく、基本的にはAPIの「サーバー側」を設定変更する必要があります。

ただし、開発中であれば「プロキシ(proxy)」という仕組みを使って回避することができます。

5. Reactでプロキシを使ってCORSを回避する

5. Reactでプロキシを使ってCORSを回避する
5. Reactでプロキシを使ってCORSを回避する

Reactでは、package.json に以下のようにプロキシ設定を追加することで、CORSエラーを回避できます。


"proxy": "https://api.example.com"

この設定をすると、ReactがAPIにアクセスするときに「まるで同じサーバーにアクセスしているかのように」見せかけることができます。

結果的に、ブラウザはCORSの制限をかけず、データの取得ができるようになります。

6. プロキシを使ったサンプルコード

6. プロキシを使ったサンプルコード
6. プロキシを使ったサンプルコード

import React, { useEffect, useState } from "react";

function App() {
  const [data, setData] = useState(null);

  useEffect(() => {
    fetch("/data")
      .then((res) => res.json())
      .then((result) => setData(result.message))
      .catch((error) => {
        console.error("エラー:", error);
        setData("データ取得失敗");
      });
  }, []);

  return (
    <div>
      <h1>APIからのメッセージ: {data}</h1>
    </div>
  );
}

export default App;
(画面に「APIからのメッセージ: ◯◯」と表示され、CORSエラーなく取得できます)

7. サーバー側にAccess-Control-Allow-Originを設定する

7. サーバー側にAccess-Control-Allow-Originを設定する
7. サーバー側にAccess-Control-Allow-Originを設定する

本番環境では、プロキシではなくAPIサーバー側で「CORSを許可する設定」が必要です。

たとえば、Node.jsを使っている場合は次のような記述を追加します。


const express = require("express");
const cors = require("cors");
const app = express();

app.use(cors()); // これで全オリジンからのアクセスを許可

このように、CORSを許可すれば、ReactからのFetchリクエストも正しく通るようになります。

8. それでもCORSエラーが出るときのチェックポイント

8. それでもCORSエラーが出るときのチェックポイント
8. それでもCORSエラーが出るときのチェックポイント
  • APIのURLが正しいか確認
  • httpとhttpsが混在していないか
  • ブラウザがキャッシュしていないか(シークレットモードで確認)
  • 認証トークンが必要なAPIなのに、未設定で送っていないか

これらのポイントも確認すると、原因が見つかりやすくなります。

まとめ

まとめ
まとめ

ReactでAPIへアクセスするときに発生するCORSエラーは、初心者が最初につまずきやすい重要なポイントです。特に、外部サイトや別のオリジンに存在するデータへFetch APIでアクセスする場面は多く、正しい理解があるかどうかで開発のスムーズさが大きく変わります。今回の記事では、クロスオリジンの基本的な考え方、ブラウザが持つセキュリティ機能のしくみ、CORSエラーがなぜ発生するのかといった基礎から、Reactでの具体的な回避方法までを順を追って学びました。 なかでも、開発環境で便利に使えるプロキシ設定は、Reactの実践的な学習において非常に役立つ知識です。package.jsonにプロキシを記述するだけでCORSエラーを回避できる点は、開発の効率を大きく向上させます。また、本番環境では必ずサーバー側にCORS設定を実装する必要があり、Access-Control-Allow-Originの理解が不可欠です。 さらに、ReactでAPI通信を行う際には、プロキシの設定だけでなく、データの取得処理、例外処理、エラー表示の制御なども重要です。Fetch APIでデータ取得に失敗した際のログ出力やメッセージの制御は、画面の信頼性につながり、ユーザーにとって安心できる動作を実現します。こうした細かなポイントも、Reactアプリが実用的な機能を持つためには欠かせないステップです。 以下では、記事内容を踏まえたサンプルコードとして、プロキシ設定を使ったReactコンポーネントの例をまとめています。実際に使えるサンプルなので、学習の中でそのまま参考にしてください。

サンプルプログラム:プロキシでAPI通信を行うReactコンポーネント例


import React, { useEffect, useState } from "react";

function FetchBox() {
  const [message, setMessage] = useState("読み込み中…");

  useEffect(() => {
    fetch("/info")
      .then((response) => response.json())
      .then((result) => setMessage(result.text))
      .catch(() => setMessage("取得に失敗しました"));
  }, []);

  return (
    <div className="card p-3 mb-3">
      <h2 className="fw-bold fs-4">APIメッセージ</h2>
      <p>{message}</p>
    </div>
  );
}

function App() {
  return (
    <section className="mb-5">
      <h1 className="mark fw-bold fs-1 p-2">CORS回避サンプル</h1>
      <FetchBox />
    </section>
  );
}

export default App;

このように、Reactコンポーネント内でFetch APIを使用しつつ、プロキシを設定することでCORSエラーを回避し、スムーズにAPI通信を行えます。プロキシ設定は開発環境向けの方法であるため、本番環境ではサーバー側に正しいCORS設定が必須です。特に、認証や保護されたAPIへアクセスする際には、追加設定も必要になるため、API側の仕様を確認しながら実装を進めるとよいでしょう。 そして、CORSに関する理解が深まるほど、Reactを使ったアプリ開発でのエラー対応力が向上し、安心して外部のデータと連携できる仕組みを構築できるようになります。

先生と生徒の振り返り会話

生徒

「今日の内容で、ReactでCORSエラーが出る理由がやっとわかりました!外部のAPIにアクセスするときは注意が必要なんですね。」

先生

「そうですね。ブラウザは利用者を守るために制限を設けているので、理由を知ることが大切なんです。ReactでFetch APIを使うときは特に意識しておきましょう。」

生徒

「プロキシを設定すれば開発中は回避できるっていうのが安心でした。本番ではサーバー側の設定が必要になるっていう点も勉強になりました!」

先生

「その理解さえあれば大丈夫ですよ。Reactで外部APIとやり取りする場面は多いので、今回の内容をしっかり覚えておくと今後の開発が楽になります。」

生徒

「はい!Fetch APIでもっといろいろなデータを取りにいけるように練習してみます!」

先生

「いいですね。CORSの知識を活かして、安全で安定した通信ができるReactアプリを作っていきましょう。」

この記事を読んだ人からの質問

この記事を読んだ人からの質問
この記事を読んだ人からの質問

プログラミング初心者からのよくある疑問/質問を解決します

ReactでAPIアクセスしたときに出るCORSエラーとは何ですか?初心者向けに簡単に説明してください

CORSエラーとは、Reactアプリが別のオリジンにあるAPIへアクセスしたとき、ブラウザのセキュリティ機能によって通信がブロックされる現象です。Cross-Origin Resource Sharingという仕組みが原因で、適切な設定が無いとエラーになります。
カテゴリの一覧へ
新着記事
New1
React
Reactコンポーネントの再利用と分割を完全マスター!初心者でもわかるコンポーネント設計
New2
React
ReactでAxiosインターセプターの使い方を完全ガイド!初心者でもわかるリクエストとレスポンスの処理方法
New3
React
JSXの書き方!初心者でもわかるReactタグと属性の基本ルール解説
New4
React
ReactとDockerを使った開発環境構築の基本を徹底解説!初心者でもわかるReactとDockerの連携方法
人気記事
No.1
Java&Spring記事人気No1
React
ReactでonChangeイベントを使ってフォーム入力値を管理する方法を初心者向けに解説
No.2
Java&Spring記事人気No2
React
Reactのイベントハンドリングのアンチパターンまとめ!初心者でもわかる注意点
No.3
Java&Spring記事人気No3
React
ReactとTypeScriptの環境構築をやさしく解説!Viteとtsconfigの設定も丁寧に紹介
No.4
Java&Spring記事人気No4
React
Reactのカスタムフックの作り方を完全ガイド!再利用可能なロジックを切り出す仕組み
No.5
Java&Spring記事人気No5
React
ReactでFetch APIのローディング状態を管理する方法|初心者にもわかる解説
No.6
Java&Spring記事人気No6
React
ReactのuseStateとuseEffectでよくあるエラーと解決方法ガイド!初心者でもわかるReactフック
No.7
Java&Spring記事人気No7
React
create-react-appでReactプロジェクトを作成する手順を初心者向けに完全解説!
No.8
Java&Spring記事人気No8
React
Reactのフォーム処理でよくあるエラーと解決法を完全解説!初心者でも安心して学べるReact入門