カテゴリ: React 更新日: 2025/12/04

ReactでAxiosエラーハンドリングの使い方を完全ガイド!初心者でもわかるAPI通信の失敗対処法

Axiosでエラーハンドリングを行う方法
Axiosでエラーハンドリングを行う方法

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

生徒

「ReactでAxiosを使ってAPI通信をするとき、もしエラーが起きたらどうなるんですか?」

先生

「API通信は必ず成功するとは限りません。ネットワークが切れたり、サーバーがエラーを返したりすることがあります。そのときの処理をエラーハンドリングといいます。」

生徒

「なるほど!じゃあエラーハンドリングをちゃんと書かないと、アプリが止まっちゃうんですね?」

先生

「その通りです。ReactとAxiosでのエラーハンドリングを一緒に学んでいきましょう。」

1. エラーハンドリングとは?

1. エラーハンドリングとは?
1. エラーハンドリングとは?

エラーハンドリングとは、プログラムでエラーが発生したときに適切に処理する仕組みのことです。例えば、インターネットが繋がっていない場合や、サーバーが「404 Not Found」などのエラーを返す場合があります。そのときにユーザーに「エラーが起きました」と知らせたり、別の処理に切り替えたりすることが大切です。

AxiosはJavaScriptのHTTPクライアントライブラリで、.catchtry...catchを使ってエラーを処理できます。

2. Axiosで基本的なエラーハンドリングをする

2. Axiosで基本的なエラーハンドリングをする
2. Axiosで基本的なエラーハンドリングをする

まずは最も基本的なエラーハンドリングの書き方を紹介します。API通信が失敗したときに.catchでエラーを受け取ります。


import axios from "axios";

axios.get("https://jsonplaceholder.typicode.com/invalid-url")
  .then(response => {
    console.log("成功:", response.data);
  })
  .catch(error => {
    console.error("エラーが発生しました:", error);
  });
正しいURLではないため、エラーが発生し、catchの中の処理が実行されます。

3. Reactコンポーネントでのエラーハンドリング

3. Reactコンポーネントでのエラーハンドリング
3. Reactコンポーネントでのエラーハンドリング

Reactのコンポーネント内でAxiosを使うときは、エラーが起きたら画面にエラーメッセージを表示することが多いです。


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

function UserList() {
  const [users, setUsers] = useState([]);
  const [error, setError] = useState(null);

  useEffect(() => {
    axios.get("https://jsonplaceholder.typicode.com/invalid-url")
      .then(res => setUsers(res.data))
      .catch(err => setError("データの取得に失敗しました"));
  }, []);

  if (error) {
    return <div>{error}</div>;
  }

  return (
    <ul>
      {users.map(user => (
        <li key={user.id}>{user.name}</li>
      ))}
    </ul>
  );
}

export default UserList;
API取得が失敗すると「データの取得に失敗しました」と表示されます。

4. エラー内容を詳しく扱う方法

4. エラー内容を詳しく扱う方法
4. エラー内容を詳しく扱う方法

Axiosのエラーオブジェクトは、状況に応じて異なる情報を持っています。例えば、error.responseにはサーバーが返したエラー内容が入ります。error.requestにはリクエストは送られたけど応答がなかった場合の情報が入ります。


axios.get("https://jsonplaceholder.typicode.com/invalid-url")
  .catch(error => {
    if (error.response) {
      console.error("サーバーエラー:", error.response.status);
    } else if (error.request) {
      console.error("応答なし:", error.request);
    } else {
      console.error("その他のエラー:", error.message);
    }
  });
これにより「サーバーからのエラー」か「通信が届かなかったか」を区別して処理できます。

5. try...catchとasync/awaitでのエラーハンドリング

5. try...catchとasync/awaitでのエラーハンドリング
5. try...catchとasync/awaitでのエラーハンドリング

async/await構文を使うと、より読みやすいエラーハンドリングができます。try...catchを使って同期的に書けるのが特徴です。


async function fetchData() {
  try {
    const response = await axios.get("https://jsonplaceholder.typicode.com/users");
    console.log("成功:", response.data);
  } catch (error) {
    console.error("エラー:", error);
  }
}
API通信が失敗するとcatchに入ってエラーを処理します。

6. エラーハンドリングを工夫するポイント

6. エラーハンドリングを工夫するポイント
6. エラーハンドリングを工夫するポイント

実際の開発でAxiosを使うときは、次のような工夫がよく行われます。

  • ユーザーにわかりやすいメッセージを表示する
  • サーバーエラーとネットワークエラーを区別して処理する
  • エラーをログに保存して後で調査できるようにする
  • リトライ処理を組み込んで一時的な失敗に対応する

こうした工夫をすることで、ユーザーが安心して使えるReactアプリを作ることができます。

まとめ

まとめ
まとめ

ReactでAxiosを使ったAPI通信を行う際のエラーハンドリングは、アプリの安全性と信頼性を高めるために欠かせない重要な考え方です。特に、インターネットの状態は常に安定しているとは限らず、外部APIが予期せぬ応答を返すことも多いため、適切な失敗対応を備えておくことでユーザーが安心して利用できる環境を整えることができます。記事の内容で学んだように、Axiosはcatchtry...catchを用いてエラーの内容を把握し、Reactの状態管理と組み合わせることで画面上に明確なメッセージを提示できます。また、ネットワークエラーとサーバーエラーの区別ができるため、開発者にとって問題の発生箇所を推測しやすい点も大きな利点です。 加えて、初心者にとって理解しやすいのは、Axiosが返すエラーオブジェクトの構造が明確であり、どの場面でどの値が設定されるかを把握しておくことで、より細かいハンドリングが可能になるところです。サーバーからステータスコードが返ってくる場合にはerror.response、リクエストが送られたのに応答がない場合にはerror.request、その他の原因であればerror.messageというように分類されます。この仕組みを理解することで、ReactアプリのUIにおいて適切なエラー表示を実装することができます。 実際の開発では、これらに加えて「ログの保存」「リトライ処理」「ユーザー向け案内」「メンテナンス時の通知表示」など、エラー発生時の対応は多岐にわたります。Axiosのエラーハンドリングをしっかり理解しておけば、APIの応答に依存する機能でも安心して実装が進められ、より高品質で信頼性のあるアプリケーションを作れるようになります。以下では、記事の内容を踏まえつつ、Reactコンポーネント内でエラーメッセージを切り替えて表示するシンプルな実装例をまとめています。

サンプルプログラム:Axios通信でのエラー状態を画面表示する実装例


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

function ErrorSample() {
  const [result, setResult] = useState(null);
  const [error, setError] = useState(null);

  const fetchUser = async () => {
    try {
      const res = await axios.get("https://jsonplaceholder.typicode.com/invalid-url");
      setResult(res.data);
      setError(null);
    } catch (err) {
      if (err.response) {
        setError("サーバーエラーが発生しました(" + err.response.status + ")");
      } else if (err.request) {
        setError("応答がありませんでした。通信状況を確認してください。");
      } else {
        setError("不明なエラーが発生しました。" + err.message);
      }
      setResult(null);
    }
  };

  return (
    <div className="card p-3 mb-3">
      <h2 className="fw-bold fs-4">エラーハンドリング例</h2>
      <button className="btn btn-primary mb-3" onClick={fetchUser}>
        データを取得する
      </button>

      {error && <p className="text-danger">{error}</p>}
      {result && <pre>{JSON.stringify(result, null, 2)}</pre>}
    </div>
  );
}

export default ErrorSample;

上記のように、通信成功時と失敗時でそれぞれ異なる状態を保持し、画面に反映させることでユーザーにわかりやすい案内ができます。サーバーエラー、ネットワークエラー、その他の例外を出し分けることで、Reactアプリ全体の品質向上にもつながります。さらに、Axiosにはリクエストインターセプターやレスポンスインターセプターの仕組みもあり、より高度なエラー共通処理を加えることもできるため、規模の大きなアプリでも使いやすい構造を作りやすくなります。 API通信はWebアプリ開発の中心的な機能であり、成功した場合の処理だけでなく失敗時の対応も等しく重要です。Axiosのエラーハンドリングが理解できれば、複雑なAPI構造を持つサービスでも安心してデータ取得処理が組めるようになり、Reactアプリの信頼性をさらに高めることができます。

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

生徒

「Axiosのエラーハンドリングって思っていたより奥が深いんですね!種類によって処理を変えられるのが便利だと思いました。」

先生

「その通りです。エラーの種類を判別できることで、より適切な画面表示やログ管理ができます。Reactと組み合わせると視覚的にもわかりやすくできますよ。」

生徒

「try...catchの書き方も理解できました!エラーごとにメッセージを変えるだけで、使いやすさが変わるって面白いです。」

先生

「そうなんです。AxiosはReactアプリでのデータ取得に向いているので、エラーハンドリングを丁寧に書くほどアプリの完成度が上がりますよ。」

生徒

「これなら実際の開発でもしっかり対応できそうです!次はリトライ機能にも挑戦してみたいです!」

先生

「いいですね。エラー処理の理解が深まると、複雑なアプリも安心して作れるようになりますよ。」

カテゴリの一覧へ
新着記事
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とTypeScriptの環境構築をやさしく解説!Viteとtsconfigの設定も丁寧に紹介
No.3
Java&Spring記事人気No3
React
Reactのイベントハンドリングのアンチパターンまとめ!初心者でもわかる注意点
No.4
Java&Spring記事人気No4
React
ReactでFetch APIのローディング状態を管理する方法|初心者にもわかる解説
No.5
Java&Spring記事人気No5
React
Reactのカスタムフックの作り方を完全ガイド!再利用可能なロジックを切り出す仕組み
No.6
Java&Spring記事人気No6
React
create-react-appでReactプロジェクトを作成する手順を初心者向けに完全解説!
No.7
Java&Spring記事人気No7
React
ReactのuseStateとuseEffectでよくあるエラーと解決方法ガイド!初心者でもわかるReactフック
No.8
Java&Spring記事人気No8
React
Reactでファイルアップロードを実装する方法を解説!Fetch APIで画像やPDFを送る仕組みを初心者向けに紹介