【JavaScript入門】Fetch APIで通信をする

 Fetch API はブラウザ標準の HTTP クライアントで、URL を渡すだけで Promise を返す シンプル設計が魅力です。ここでは「サーバー準備 ▶ fetch() の基本 ▶ オプションとレスポンス解析 ▶ 実践サンプル」の順に学びます。

1.ローカルサーバーの起動手順

1.1. Node.js のインストール

 01章のイントロダクション「10 開発環境の準備:Node.jsのインストール」の Node.js の環境準備ができているという前提で話を進めます。Node.js の環境準備ができていない場合は、以下のリンク先をご確認ください。

【JavaScript入門】開発環境の準備:Node.jsのインストール

このページで解説している内容は、以下の YouTube 動画の解説で見ることができます。 【JavaScript入門】開発環境の準備:Node.jsのインストール 開発環境の準備:Node.js…

1.2. index.js の作成

以下の index.js を作成して、例えば「C:\Users\<ユーザー名>\Desktop\node-js\app1」に保存します。

ファイル名: index.js

// index.js
const express = require("express");
const app = express();

// ルート
app.get("/", (_, res) => res.send("Hello World"));

// 静的ファイル(/net, /web-worker 配下)
[
  { path: "/net",         root: __dirname + "/net" },
  { path: "/web-worker",  root: __dirname + "/web-worker" }
].forEach(opt => app.use(opt.path, express.static(opt.root)));

app.listen(3000, () => console.log("Server started: http://localhost:3000/"));

1.3. PowerShell を起動し、index.js を置いたフォルダへ移動します。

移動例:

PS C:\Users\joeac\Desktop\node-js\app1>

1.4. ターミナルで node . を実行

node .

1.5. ブラウザのURLに「http://localhost:3000/ 」を入力

すると 「Hello World」が表示されます。

2.fetch() の基本構文

fetch(url [, options])
  .then(response => { /* Response オブジェクト */ })
  .catch(err => { /* 通信エラー */ });

2.1. 主な options プロパティ

プロパティ役割
method"GET" / "POST" など
headersnew Headers({ "Content-Type":"application/json" })
body送信データ(文字列・FormData・Blob など)
cache"reload" / "force-cache" など

2.2. Response の重要プロパティ・メソッド

プロパティ内容メソッド役割
ok成功なら true.text()本文を文字列で取得
statusHTTP ステータス.json()本文を JSON に変換
statusTextステータスメッセージ.blob()バイナリを取得
url実際にアクセスした URL  

3.実践サンプル:JSON を取得して表示

3.1. 必要ファイル

① /net/data.json

以下のjsonファイル「data.json」を作成し、netディレクトリに格納します。

{ "menu": ["ホットコーヒー", "アイスコーヒー"] }

➁ /net/fetch-demo.html(下記)

下記の「fetch-demo.html」ファイルを作成し、netディレクトリに格納します。

3.2. fetch-demo.html

<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8" />
  <title>🚀 Fetch API デモ</title>
  <style>
    body{font-family:"Segoe UI",sans-serif;background:#f0f8ff;margin:2rem}
    h1{text-align:center;font-size:1.8rem;margin-bottom:1rem}
    button{padding:.6rem 1.2rem;border:none;border-radius:6px;
           background:#0078d4;color:#fff;font-weight:bold;cursor:pointer}
    button:hover{opacity:.85}
    #log{white-space:pre-wrap;background:#fff;border:1px solid #ccc;
         border-radius:8px;padding:1rem;margin-top:1rem;min-height:6rem}
  </style>
</head>
<body>
  <h1>🚀 Fetch API デモ</h1>
  <button id="loadBtn">メニュー取得</button>
  <div id="log">ここに結果が表示されます</div>

  <script>
  const log = txt => document.getElementById("log").textContent += txt + "\n";

  document.getElementById("loadBtn").onclick = () => {
    document.getElementById("log").textContent = "";
    const url = "./data.json";     // 相対パスなので /net/ 配下を指す

    fetch(url)
      .then(res => {
        log(`URL: ${res.url}`);
        log(`ステータス: ${res.status} (${res.statusText})`);
        if(!res.ok) throw new Error("通信に失敗しました");
        return res.json();         // JSON へ変換
      })
      .then(data => {
        log("--- 取得結果 ---");
        log(JSON.stringify(data, null, "  "));
      })
      .catch(err => {
        log("--- エラー ---");
        log(err);
      });
  };
  </script>
</body>
</html>

3.3. ブラウザの出力例

ブラウザのURLに「http://localhost:3000/net/fetch-demo.html」を入力します。

まとめ

  1. サーバーを立てるexpress で OK)
  2. fetch(url[, options]) でリクエスト
  3. Response を検査し .json().text() で本文を取得
  4. .catch() でネットワークエラーを一括処理

 これだけでブラウザから API や静的 JSON を手軽に扱えます。次は method:"POST"body を追加して、フォームデータ送信に挑戦してみましょう。