JavaScript | 1 日 120 分 × 7 日アプリ学習:API通信アプリ(NewsAPI.orgでニュースアプリ)

Web APP JavaScript
スポンサーリンク
スポンサーリンク

2日目のゴールと全体像

2日目のテーマは
「1日目で作った“動くニュース検索”を、実用レベルに近づけること」です。

具体的には、こういうところを狙います。

単なる「キーワード検索」から一歩進めて、期間や並び順などの条件を増やすこと。
fetch と async/await の書き方はそのままに、コードを読みやすく整理すること。
エラーハンドリングを“ユーザー目線”で少し丁寧にすること。
ローディング表示を「状態」として扱う感覚をつかむこと。

1日目で作ったものを「書き直す」のではなく、「育てる」イメージで進めます。


1日目のコードを「型」として再確認する

中心となる非同期関数の形

まず、1日目の fetchNews は、すでにかなり良い形をしています。

async function fetchNews(keyword) {
  statusDiv.textContent = "ニュースを取得中です…";
  resultDiv.textContent = "";
  searchButton.disabled = true;

  try {
    const url = buildUrl(keyword);
    const response = await fetch(url);

    if (!response.ok) {
      statusDiv.textContent = `サーバーエラーが発生しました。(${response.status})`;
      return;
    }

    const data = await response.json();

    if (data.status === "error") {
      statusDiv.textContent = `エラー:${data.message}`;
      return;
    }

    statusDiv.textContent = "ニュースの取得に成功しました。";
    renderArticles(data);

  } catch (error) {
    statusDiv.textContent = "通信に失敗しました。ネットワークを確認してください。";
    console.error(error);

  } finally {
    searchButton.disabled = false;
  }
}
JavaScript

ここで、すでに大事なポイントは押さえられています。

非同期処理を async 関数に閉じ込めていること。
await で fetch と json 変換を順番に待っていること。
try の中で「成功時の処理」、catch で「通信エラー」、finally で「後片付け」をしていること。
HTTP レベルのエラー(response.ok)と、API 独自のエラー(data.status === “error”)を分けていること。

2日目は、この「型」を崩さずに、周りを強化していきます。


タイトルとURLをコピーしました