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

Reactのカスタムフックでキャッシュ機能を実装する方法を解説!初心者でもわかるデータ管理

カスタムフックでキャッシュ機能を実装する方法
カスタムフックでキャッシュ機能を実装する方法

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

生徒

「ReactでAPIを呼び出すとき、毎回同じデータを取りにいって時間がかかることがあるんですが、どうにかなりませんか?」

先生

「それならキャッシュ機能を使うといいですよ。一度取得したデータを保存しておいて、次回は保存したデータを使えば無駄な通信を減らせます。」

生徒

「キャッシュってどうやって実装するんですか?」

先生

「Reactではカスタムフックを使ってキャッシュ機能を実装すると便利です。では実際に仕組みを見てみましょう。」

1. キャッシュとは?初心者向けにわかりやすく解説

1. キャッシュとは?初心者向けにわかりやすく解説
1. キャッシュとは?初心者向けにわかりやすく解説

キャッシュとは、一度取得したデータを保存しておいて、次に同じデータが必要になったときにすぐに取り出せるようにする仕組みです。たとえば、インターネットで同じページを何度も開くと、最初よりも早く表示されることがあります。これはブラウザがキャッシュを使っているからです。

ReactでAPIを呼び出すと、通常は毎回サーバーにデータを取りに行きます。しかし同じ情報ならわざわざもう一度取得する必要はありません。キャッシュを利用することで通信を減らし、アプリをスムーズに動かせます。

2. カスタムフックでキャッシュを管理するメリット

2. カスタムフックでキャッシュを管理するメリット
2. カスタムフックでキャッシュを管理するメリット

カスタムフックを使えば、キャッシュの仕組みを簡単に再利用できます。複数のコンポーネントで同じAPIを使うときも、カスタムフックにキャッシュ機能を組み込んでおけば効率よくデータを扱えます。

たとえば、ある画面で取得したユーザー情報を別の画面でも使いたいときに、キャッシュがあれば再びAPIを呼び出さずに済むのでユーザー体験が向上します。

3. カスタムフックにキャッシュを組み込む基本

3. カスタムフックにキャッシュを組み込む基本
3. カスタムフックにキャッシュを組み込む基本

まずは簡単な仕組みを考えてみましょう。データを保存するために、JavaScriptのオブジェクトをキャッシュとして利用します。これをフックの外に置くことで、同じアプリ内でデータを共有できます。


import { useState, useEffect } from "react";

const cache = {};

function useCachedAPI(url) {
  const [data, setData] = useState(cache[url] || null);
  const [loading, setLoading] = useState(!cache[url]);
  const [error, setError] = useState(null);

  useEffect(() => {
    if (!cache[url]) {
      const fetchData = async () => {
        try {
          const res = await fetch(url);
          const json = await res.json();
          cache[url] = json; // キャッシュに保存
          setData(json);
        } catch (err) {
          setError(err);
        } finally {
          setLoading(false);
        }
      };
      fetchData();
    }
  }, [url]);

  return { data, loading, error };
}

export default useCachedAPI;
(同じURLを渡したときは、すでに保存されたデータを使うのでAPIを再度呼び出しません)

4. キャッシュ付きカスタムフックを使う例

4. キャッシュ付きカスタムフックを使う例
4. キャッシュ付きカスタムフックを使う例

このカスタムフックを実際のコンポーネントで使ってみましょう。ユーザー情報を取得して表示する例です。


import React from "react";
import useCachedAPI from "./useCachedAPI";

function Users() {
  const { data, loading, error } = useCachedAPI("https://jsonplaceholder.typicode.com/users");

  if (loading) return <p>読み込み中です...</p>;
  if (error) return <p>エラーが発生しました: {error.message}</p>;

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

export default Users;
(一度表示したユーザー情報はキャッシュに保存され、再度アクセスしたときは即座に表示されます)

5. キャッシュの有効期限を設定する方法

5. キャッシュの有効期限を設定する方法
5. キャッシュの有効期限を設定する方法

現実のアプリケーションでは、キャッシュがずっと古いままだと困ることがあります。たとえば、ユーザーの情報が更新されているのに古い情報が表示され続けると不便です。そのため、キャッシュに有効期限を設定するのが一般的です。

有効期限を設けるには、保存時にタイムスタンプを記録しておき、一定時間経過したらキャッシュを無視して新しいデータを取得するようにします。

6. キャッシュ機能を実装するポイント

6. キャッシュ機能を実装するポイント
6. キャッシュ機能を実装するポイント

キャッシュ機能を実装する際のポイントをまとめると次の通りです。

  • 一度取得したデータをオブジェクトに保存して再利用する
  • 同じAPIリクエストであればキャッシュを優先して使う
  • 古くなったデータを更新するために有効期限を設定する
  • カスタムフックにまとめることで複数コンポーネントで簡単に利用できる

初心者でも仕組みを理解して実装すれば、アプリの動作を効率的に改善できます。

カテゴリの一覧へ
新着記事
New1
React
Reactの条件分岐の使い方を完全ガイド!初心者でもわかるReactの条件分岐
New2
React
Reactのカスタムフックでキャッシュ機能を実装する方法を解説!初心者でもわかるデータ管理
New3
Next.js
Next.js App Routerでlayout.tsxを使う方法を完全ガイド!初心者でもわかるUIの共有
New4
React
TypeScriptでStateを型定義する方法を徹底解説!初心者でもわかるReactとTypeScript入門
人気記事
No.1
Java&Spring記事人気No1
React
ReactのPropsを使ってコンポーネントの表示を動的に切り替える方法を解説!初心者でもわかるReact入門
No.2
Java&Spring記事人気No2
React
ViteでReact開発環境を構築する手順を完全ガイド!初心者でもできるReactの環境構築
No.3
Java&Spring記事人気No3
React
Reactとは?初心者でもわかるReact.jsの基本概念と特徴をやさしく解説
No.4
Java&Spring記事人気No4
React
ReactでonChangeイベントを使ってフォーム入力値を管理する方法を初心者向けに解説
No.5
Java&Spring記事人気No5
React
スマホ対応!Reactでレスポンシブデザイン対応のコンポーネント設計を初心者向けに解説
No.6
Java&Spring記事人気No6
React
ReactとTypeScriptの環境構築をやさしく解説!Viteとtsconfigの設定も丁寧に紹介
No.7
Java&Spring記事人気No7
React
ReactのuseStateとuseEffectでよくあるエラーと解決方法ガイド!初心者でもわかるReactフック
No.8
Java&Spring記事人気No8
React
Reactのチェックボックス入力を完全解説!初心者でもわかるReactフォーム処理