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

ReactでAxiosのリトライ処理を実装する方法を完全ガイド!初心者でもわかるAPI通信の安定化テクニック

Axiosでリトライ処理を行う方法
Axiosでリトライ処理を行う方法

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

生徒

「先生、API通信をしているときにサーバーが一時的にエラーになることがありますよね。その場合ってどうすればいいんですか?」

先生

「そうですね。そのような場合にはリトライ処理を使うと便利です。リトライとは、失敗したリクエストを自動的にもう一度試す仕組みのことです。」

生徒

「なるほど!インターネットが一瞬切れたときに、もう一度やり直すみたいな感じですか?」

先生

「その通りです。では、ReactとAxiosを使ったリトライ処理の方法を見ていきましょう。」

1. リトライ処理とは?

1. リトライ処理とは?
1. リトライ処理とは?

リトライ処理とは、通信に失敗したときに自動で再試行する仕組みのことです。例えば、サーバーが一時的に混雑している場合や、ネットワークが不安定な場合に有効です。

これにより、ユーザーは「エラー画面がすぐに表示される」ことを避けられ、裏で再試行されて成功すれば自然にデータを取得できます。

2. シンプルなリトライ処理の実装

2. シンプルなリトライ処理の実装
2. シンプルなリトライ処理の実装

まずは基本的な書き方です。Axiosで失敗したときに、一定回数だけ再試行する関数を自作できます。


import axios from "axios";

async function fetchWithRetry(url, retries = 3, delay = 1000) {
  for (let i = 0; i < retries; i++) {
    try {
      const response = await axios.get(url);
      return response.data;
    } catch (error) {
      if (i < retries - 1) {
        await new Promise(res => setTimeout(res, delay)); // 待機
      } else {
        throw error;
      }
    }
  }
}
この関数では最大3回までリトライし、失敗した場合に1秒待機してから再試行します。

3. Reactコンポーネントでの利用例

3. Reactコンポーネントでの利用例
3. Reactコンポーネントでの利用例

次に、Reactのコンポーネントでリトライ処理を使う例を見てみましょう。データ取得が一度失敗しても、自動で再試行されます。


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

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

  useEffect(() => {
    const loadData = async () => {
      try {
        const result = await fetchWithRetry("https://api.example.com/data", 3, 1000);
        setData(result);
      } catch (err) {
        setError("データの取得に失敗しました");
      }
    };

    loadData();
  }, []);

  if (error) return <p>{error}</p>;
  if (!data) return <p>読み込み中...</p>;

  return (
    <div>
      <h1>取得したデータ</h1>
      <pre>{JSON.stringify(data, null, 2)}</pre>
    </div>
  );
}

export default App;
ネットワークが不安定でも、内部で自動的にリトライされるのでユーザーはエラーに遭遇しにくくなります。

4. リトライ処理に待機時間(バックオフ)を入れる

4. リトライ処理に待機時間(バックオフ)を入れる
4. リトライ処理に待機時間(バックオフ)を入れる

毎回すぐにリトライするとサーバーに負担がかかることがあります。そのため、バックオフ(待機時間を増やす方法)を導入するのが一般的です。


async function fetchWithExponentialBackoff(url, retries = 3, delay = 500) {
  for (let i = 0; i < retries; i++) {
    try {
      const response = await axios.get(url);
      return response.data;
    } catch (error) {
      if (i < retries - 1) {
        const backoff = delay * Math.pow(2, i); // 500ms, 1000ms, 2000ms...
        await new Promise(res => setTimeout(res, backoff));
      } else {
        throw error;
      }
    }
  }
}
1回目は0.5秒、2回目は1秒、3回目は2秒…と待機時間が増えていきます。

5. ライブラリを使ったリトライ(axios-retry)

5. ライブラリを使ったリトライ(axios-retry)
5. ライブラリを使ったリトライ(axios-retry)

自作せずにライブラリを使う方法もあります。axios-retryという拡張ライブラリを使うと、簡単にリトライ処理を追加できます。


import axios from "axios";
import axiosRetry from "axios-retry";

axiosRetry(axios, {
  retries: 3,
  retryDelay: (retryCount) => retryCount * 1000, // 1秒ごとに増加
  retryCondition: (error) => error.response?.status >= 500
});

axios.get("https://api.example.com/data")
  .then(res => console.log(res.data))
  .catch(err => console.error("リトライ失敗:", err));
この場合、サーバーエラー(500番台)のときだけ自動的にリトライされます。

6. リトライ処理を実装するときの注意点

6. リトライ処理を実装するときの注意点
6. リトライ処理を実装するときの注意点

リトライは便利ですが、使い方を間違えると逆効果になることがあります。次の点に注意しましょう。

  • 永遠にリトライし続けると無限ループになるため、回数を決める
  • ユーザーに「リトライ中」と表示するなど進捗を見せる工夫をする
  • サーバーに負荷をかけすぎないように待機時間(バックオフ)を入れる

正しく実装することで、通信エラーが起きても安心して利用できるアプリになります。

カテゴリの一覧へ
新着記事
New1
React
Reactのライフサイクルにおけるアンチパターンまとめ!初心者でもわかるReactの注意点
New2
React
ReactでAxiosのリトライ処理を実装する方法を完全ガイド!初心者でもわかるAPI通信の安定化テクニック
New3
Next.js
Next.js Client ComponentsでuseState/useEffectを使う理由を完全ガイド!初心者でもわかるNext.jsの基本
New4
React
Reactのカスタムフックの作り方を解説!初心者でもわかる再利用可能なロジックの基本
人気記事
No.1
Java&Spring記事人気No1
React
ViteでReact開発環境を構築する手順を完全ガイド!初心者でもできるReactの環境構築
No.2
Java&Spring記事人気No2
React
ReactのPropsを使ってコンポーネントの表示を動的に切り替える方法を解説!初心者でもわかる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のuseStateとuseEffectでよくあるエラーと解決方法ガイド!初心者でもわかるReactフック
No.6
Java&Spring記事人気No6
React
ReactでonChangeイベントを使ってフォーム入力値を管理する方法を初心者向けに解説
No.7
Java&Spring記事人気No7
React
Reactとは?初心者でもわかるReact.jsの基本概念と特徴をやさしく解説
No.8
Java&Spring記事人気No8
React
useEffectでクリーンアップ関数を使う方法をやさしく解説