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

Reactで画像やバイナリデータをFetch APIで取得する方法を解説!初心者でもわかるReact入門

Fetch APIで画像やバイナリデータを取得する方法
Fetch APIで画像やバイナリデータを取得する方法

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

生徒

「Reactでインターネットから画像を読み込んだりできますか?」

先生

「はい、Fetch APIを使えばReactでも画像やバイナリデータを取得できますよ。」

生徒

「バイナリデータってなんですか?難しそうです…」

先生

「安心してください。バイナリデータというのは、画像・音声・動画などのコンピューターが数字の形で扱うデータのことです。Reactでは、それを画像として表示することもできます。」

1. Fetch APIとは?Reactで何ができるの?

1. Fetch APIとは?Reactで何ができるの?
1. Fetch APIとは?Reactで何ができるの?

Fetch API(フェッチエーピーアイ)は、ReactなどのJavaScriptアプリで外部のサーバーにデータを取りにいくための機能です。たとえば、画像や動画、ファイルなどを取得して、画面に表示することができます。

難しく聞こえるかもしれませんが、「インターネットからデータを取ってくる魔法の道具」と考えるとイメージしやすいです。

2. バイナリデータとは?初心者にもわかりやすく解説

2. バイナリデータとは?初心者にもわかりやすく解説
2. バイナリデータとは?初心者にもわかりやすく解説

画像や音声、動画ファイルなどは「バイナリデータ(二進数のデータ)」として送られてきます。これは人間が読める文字ではなく、コンピューターが理解できるような数字の列です。

Fetch APIでは、こうしたバイナリデータを blob(ブロブ)という形式で受け取ることができます。

3. Reactで画像をFetch APIで取得して表示してみよう

3. Reactで画像をFetch APIで取得して表示してみよう
3. Reactで画像をFetch APIで取得して表示してみよう

ここでは、Reactアプリで画像をFetch APIで読み込み、画面に表示するサンプルを見てみましょう。


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

function ImageFetcher() {
  const [imageUrl, setImageUrl] = useState(null);

  useEffect(() => {
    fetch("https://via.placeholder.com/300") // ダミー画像URL
      .then((response) => response.blob())
      .then((blobData) => {
        const imageObjectUrl = URL.createObjectURL(blobData);
        setImageUrl(imageObjectUrl);
      })
      .catch((error) => {
        console.error("画像の取得に失敗しました", error);
      });
  }, []);

  return (
    

取得した画像を表示します

{imageUrl ? ( <img src={imageUrl} alt="取得した画像" /> ) : ( <p>画像を読み込み中...</p> )}
); } export default ImageFetcher;
(画面に「取得した画像を表示します」と表示され、インターネット上の画像が読み込まれて表示されます)

4. URL.createObjectURLとは?

4. URL.createObjectURLとは?
4. URL.createObjectURLとは?

URL.createObjectURL(ユーアールエル・クリエイト・オブジェクト・ユーアールエル)は、取得したバイナリデータを一時的なURLに変換する関数です。このURLをimgタグのsrc属性に指定することで、画像として画面に表示できます。

つまり、インターネットから受け取った「数字のかたまり」を「画像として使えるURL」にしてくれる道具です。

5. エラー処理も忘れずに書こう

5. エラー処理も忘れずに書こう
5. エラー処理も忘れずに書こう

Fetch APIを使うときには、うまくデータが取れない場合も考えて、.catch()でエラー処理を加えておくと安心です。ネットワークエラーやサーバーの不具合があっても、アプリが壊れずに済みます。

6. よくある初心者のつまずきポイント

6. よくある初心者のつまずきポイント
6. よくある初心者のつまずきポイント
  • 画像のURLが間違っている:URLが存在しないと何も表示されません。
  • ブラウザのセキュリティ制限:他サイトから画像を読み込むとき、CORS(コース)という仕組みに引っかかることがあります。
  • useEffectを使い忘れる:データを読み込むタイミングは、ReactではuseEffectで指定するのが基本です。

7. 画像以外のバイナリデータも扱える

7. 画像以外のバイナリデータも扱える
7. 画像以外のバイナリデータも扱える

Fetch APIとblobは、画像だけでなく、PDFや音声ファイル、動画ファイルなどにも使えます。たとえば、PDFファイルを取得して<a>タグでダウンロードさせることもできます。

8. 本当にReact初心者でもできる?

8. 本当にReact初心者でもできる?
8. 本当にReact初心者でもできる?

はい、大丈夫です。Reactは少しずつ学べば誰でも使えるようになります。今回紹介したFetch APIや画像表示の仕組みは、慣れてくると他のデータ取得でも応用できます。

最初は1つずつゆっくり試してみましょう。小さな成功を重ねることで、Reactの理解がぐんぐん深まります。

まとめ

まとめ
まとめ

今回の記事では、Reactを用いたFetch APIによる画像やバイナリデータの取得方法について詳しく解説してきました。Webアプリケーション開発において、外部リソースを動的に取り込む技術は非常に重要です。特に、単なるテキストデータだけでなく、画像やPDFといった「バイナリデータ」を適切に扱うことで、ユーザー体験をより豊かなものにすることができます。

Reactでバイナリデータを扱う際のポイントは、主に以下の3点に集約されます。

  • Fetch APIの戻り値を .blob() で処理する: 通常のJSONデータとは異なり、画像などはバイナリ形式として受け取る必要があります。
  • URL.createObjectURLを活用する: メモリ上に展開されたバイナリデータを、ブラウザが解釈できる一時的なURLに変換することで、imgタグなどで利用可能になります。
  • メモリ管理を意識する: URL.revokeObjectURL() を適切に使うことで、不要になったデータのメモリを解放し、ブラウザの動作を軽く保つ工夫が求められます。

応用編:PDFファイルの取得とプレビュー表示

画像だけでなく、PDFファイルを取得して表示させる場合も基本は同じです。以下のサンプルプログラムでは、Fetch APIでPDFデータを取得し、それをブラウザの新しいタブで開く、あるいはダウンロードさせるためのリンクを作成する方法を紹介します。


import React, { useState } from "react";

function FileDownloader() {
  const [downloadUrl, setDownloadUrl] = useState(null);
  const [loading, setLoading] = useState(false);

  const fetchPdfFile = async () => {
    setLoading(true);
    try {
      // PDFファイルをバイナリデータとして取得
      const response = await fetch("https://example.com/sample.pdf");
      if (!response.ok) throw new Error("ネットワークエラーが発生しました");

      const blob = await response.blob();
      
      // Blobから一時的なURLを生成
      const objectUrl = URL.createObjectURL(blob);
      setDownloadUrl(objectUrl);
    } catch (error) {
      console.error("ファイルの取得に失敗しました:", error);
      alert("ファイルを読み込めませんでした。");
    } finally {
      setLoading(false);
    }
  };

  return (
    <div className="container mt-4">
      <h3 className="mb-3">ドキュメント取得ツール</h3>
      <button 
        className="btn btn-primary" 
        onClick={fetchPdfFile} 
        disabled={loading}
      >
        {loading ? "読み込み中..." : "PDFファイルを取得する"}
      </button>

      {downloadUrl && (
        <div className="mt-3">
          <p>ファイルの準備ができました:</p>
          <a 
            href={downloadUrl} 
            target="_blank" 
            rel="noopener noreferrer" 
            className="btn btn-success"
          >
            PDFをプレビュー・保存する
          </a>
        </div>
      )}
    </div>
  );
}

export default FileDownloader;
(「PDFファイルを取得する」ボタンをクリックすると、Fetch APIが動作し、成功すると「PDFをプレビュー・保存する」というリンクが出現します。リンクをクリックするとブラウザでPDFが開かれます)

SEOとパフォーマンス向上のためのヒント

Reactアプリにおいて外部データを大量に扱う場合、パフォーマンス最適化は避けて通れません。例えば、今回紹介した useEffect 内でのFetch処理は、コンポーネントがアンマウントされた際にクリーンアップ関数を呼び出し、URL.revokeObjectURL(imageUrl) を実行するのがベストプラクティスです。これにより、ブラウザのメモリリークを防ぎ、長期的な安定性を確保できます。

また、フロントエンドでのデータ取得だけでなく、サーバーサイドレンダリング(SSR)や静的サイト生成(SSG)を活用するNext.jsなどのフレームワークを併用することで、検索エンジン最適化(SEO)の効果をさらに高めることが可能です。画像データに適切な alt 属性を付与することや、画像サイズを適切にリサイズして配信することも、検索順位の向上に直結する重要な要素となります。

このように、Reactでのデータ取得は非常に奥が深い分野です。まずは基本的なFetchの流れをマスターし、徐々に複雑なファイル形式やエラーハンドリングに挑戦していくことで、エンジニアとしてのスキルを確実にステップアップさせていきましょう。

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

生徒

「先生、まとめの記事を読んで、バイナリデータの扱い方がかなり整理できました!Fetch APIで blob() を使うのがカギなんですね。」

先生

「その通りです。普段扱っているJSONデータとは少し毛色が違いますが、仕組みさえ分かれば画像も動画も怖くありませんよ。」

生徒

URL.createObjectURL で作ったURLは、魔法みたいに画像が表示されるので驚きました。でも、ずっと残しておくとメモリを使いすぎちゃうんでしょうか?」

先生

「鋭いですね!ブラウザのタブを閉じれば解放されますが、アプリ内で何度も画像を生成する場合は、不要になったタイミングで URL.revokeObjectURL を呼んで、ブラウザに『このURLはもう使わないよ』と教えてあげることが大切です。」

生徒

「なるほど、後片付けもセットで覚えるべきですね。今回は画像でしたが、これを応用すれば音楽プレイヤーや動画投稿サイトのような機能も作れそうな気がしてきました!」

先生

「素晴らしい意気込みですね。Reactを使えば、そういったインタラクティブな機能も非常に効率よく実装できます。次はもっと大きなファイルを非同期で取得して、プログレスバーを表示させるようなUIにも挑戦してみると面白いですよ。」

生徒

「プログレスバー!難しそうですけど、ワクワクします。一歩ずつ頑張って、ユーザーに優しいアプリを作れるようになります!」

先生

「その調子で学習を続けていきましょう。エラーが出ても、それが成長の糧になりますからね。いつでも相談に乗りますよ!」

カテゴリの一覧へ
新着記事
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のカスタムフックの作り方を完全ガイド!再利用可能なロジックを切り出す仕組み
No.5
Java&Spring記事人気No5
React
ReactでFetch APIのローディング状態を管理する方法|初心者にもわかる解説
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を送る仕組みを初心者向けに紹介