はじめに
ポケモン図鑑アプリでは、ポケモンの情報を取得するためにPokeAPIを利用します。
本記事では、fetch を使ってAPIからデータを取得し、取得したデータをコンソールに表示するところまでを実装していきます。
Step2-1:Poke APIの中身を確認
JSONVueをインストール(Google拡張機能)
pokeAPIにどんなデータがあるのかJSON形式で確認

App.js
import './App.css';
function App() {
return (
<div className="App">
const initialURL = "https://pokeapi.co/api/v2/pokemon"; #このエンドポイントを例えばpokemon/1にするとフシギダネのデータを取得できる。ここを使って様々なデータを取得する
</div>
);
}
export default App;
Step2-2:Poke APIのポケモンデータを全て取得する
App.js
import { useEffect } from 'react';
import './App.css';
import { getAllPokemon } from './utils/pokemon';
function App() {
const initialURL = "https://pokeapi.co/api/v2/pokemon";
useEffect(()=>{
const fetchPokemonData = async () => {
// 全てのポケモンデータを取得
let res = await getAllPokemon(initialURL);
console.log(res);
};
fetchPokemonData();
},[]);
return (
<div className="App">
</div>
);
}
export default App;
src/utils/pokemon.js
export const getAllPokemon = (url) => {
return new Promise((resolve, reject) => {
fetch(url)
.then((res) => res.json())
.then((data) => resolve(data));
});
};
動作確認

小学生でも理解できるように説明してください。
ポケモンデータを取ってくるプログラム!
このプログラムは、**「ポケモンの情報をインターネットから取ってきて使う」**というものだよ!
ポケモンの情報をもらうために、「PokeAPI(ポケモンのデータがいっぱいあるサイト)」を使っているよ。
コードを分けて考えよう!
このプログラムは 2つの大事な部分 に分かれているよ!
- ポケモンデータをもらう関数(
getAllPokemon) - ポケモンデータを使うアプリ(
App)
1. ポケモンデータをもらう関数 (getAllPokemon)
export const getAllPokemon = (url) => {
return new Promise((resolve, reject) => {
fetch(url)
.then((res) => res.json())
.then((data) => resolve(data));
});
};
この関数の働き
この関数は 「ポケモンのデータをPokeAPIからもらう」 という仕事をするよ!
fetch(url) とは?
fetch(url)は、インターネット上のデータをもらうためのもの。urlの場所に行って、データを取ってくるよ。- 例えば
urlに"https://pokeapi.co/api/v2/pokemon"を入れると、ポケモンのデータを取れるよ。
「.then((res) => res.json())」の意味
res.json()は、「取ってきたデータを分かりやすい形(JSON)にする」こと。- JSON(ジェイソン)は、プログラムがデータを読みやすくするためのルールだよ。
データを受け取る準備
resolve(data)で、データを返しているよ。- つまり、この関数を使えば 「ポケモンのデータを取ってこれる!」 ということ!
2ポケモンデータを使う (App コンポーネント)
import { useEffect } from 'react';
import './App.css';
import { getAllPokemon } from './utils/pokemon';
function App() {
const initialURL = "https://pokeapi.co/api/v2/pokemon";
useEffect(()=>{
const fetchPokemonData = async () => {
// 全てのポケモンデータを取得
let res = await getAllPokemon(initialURL);
console.log(res);
};
fetchPokemonData();
},[]);
return (
<div className="App">
</div>
);
}
export default App;
App コンポーネントって何?
App は、ポケモンデータを取ってきて 「表示するための部品(コンポーネント)」 だよ!
Reactという仕組みを使って、Webページにデータを見せることができるよ。
useEffect とは?
useEffect(()=>{
const fetchPokemonData = async () => {
let res = await getAllPokemon(initialURL);
console.log(res);
};
fetchPokemonData();
},[]);
useEffect は、「ページが開いたときにポケモンデータを取る」ために使うよ。
何が起こるの?
useEffectが動くのは ページが開いたとき。fetchPokemonDataという関数が動く。fetchPokemonDataの中でgetAllPokemon(initialURL)を呼び出して、ポケモンデータを取ってくる。console.log(res);で、データを画面(開発ツールのコンソール)に表示する。
このプログラムの流れ
- 最初に
Appが開く(Webページが開く)。 useEffectが動く(ポケモンデータを取りにいく)。getAllPokemonがAPIからデータを取る。- データを受け取って
console.log(res);で表示!
まとめ
getAllPokemonはポケモンデータをもらう関数。Appはデータをもらって表示するコンポーネント。useEffectを使ってページが開いたときにポケモンデータを取る。- 最終的にポケモンデータが
console.logで見える!
もっとわかりやすく例えると?
これは 「ポケモンずかんを見せるお店」 みたいなものだよ!
getAllPokemon(url)は 「ポケモンを探しに行く店員さん」。Appは 「ポケモンずかんを見せるお店」。useEffectは 「お客さん(ユーザー)が来たら、店員さんを動かす仕組み」。
ポケモンずかんを見たい人が(Webページを開いたら)、店員さんがPokeAPIに行ってポケモンデータを取ってきてくれる! って感じだよ!
「もっとポケモンデータを画面に表示したい!」 と思ったら、console.log(res) の部分を div にデータを表示するようにするといいよ!
Step2-3:データ読み込み時のローディング設定
useStateと三項演算子を使ってローディングを設定
App.js
import { useEffect, useState } from 'react'; #追記 useStateを追加
import './App.css';
import { getAllPokemon } from './utils/pokemon';
function App() {
const initialURL = "https://pokeapi.co/api/v2/pokemon";
const [loading, setLoading] = useState(true); #追記
useEffect(()=>{
const fetchPokemonData = async () => {
// 全てのポケモンデータを取得
let res = await getAllPokemon(initialURL);
console.log(res);
setLoading(false); #追記
};
fetchPokemonData();
},[]);
return (
<div className="App">
#以下追記 Trueであれば、?以降が実行され、Falseであれば:以降が実行される
{loading ? (
<h1>ロード中・・・</h1>
) : (
<>
<h1>ポケモンのデータを取得しました</h1>
</>
)}
</div>
);
}
export default App;
動作確認
読み込むデータが少ないので一瞬ですが、「ロード中・・・」という文字が表示されています。
小学生でも理解できるように説明してください。
ローディング設定について詳しく説明!
このプログラムは 「ポケモンのデータを取ってくるアプリ」 だよ!
でも、データをもらうのには ちょっと時間がかかる んだ。
だから、「データを待っている間に 「ロード中…」 って表示する仕組み」を作っているよ!
ローディングとは?
「ローディング」とは、データを取っている間に表示するメッセージ のこと!
たとえば、YouTube で動画を見ようとしたとき、ネットが遅いと 「くるくるマーク」 が出ることがあるよね?
それと同じで、ポケモンデータがまだ来ていないときに 「ロード中・・・」 を表示して、データが届いたら本当の情報を見せるようにしているよ。
ローディングの仕組みを作るためのポイント!
- データを取りに行く前は「ローディング中」にする
- データを取り終わったら「ローディングを終わらせる」
- 「ローディング中かどうか?」を
loadingという変数(state)で管理する
コードの中を見てみよう!
const [loading, setLoading] = useState(true);
🔹 useState(true) の意味
loadingという変数を作って、最初はtrue(ロード中!) にしているよ。setLoadingという関数を使えば、loadingをfalseに変えられるよ。
データを取ったあとに「ローディングを終わらせる」
useEffect(()=>{
const fetchPokemonData = async () => {
let res = await getAllPokemon(initialURL);
console.log(res);
setLoading(false); // データを取り終わったら「ローディング完了!」
};
fetchPokemonData();
},[]);
🔹 setLoading(false); の意味
setLoading(false);で 「ローディングを終わりにする」 ということ!falseにすると、ローディング画面じゃなくて、ポケモンデータを表示できるようになるよ。
「ロード中…」とポケモンデータの切り替え
return (
<div className="App">
{loading ? (
<h1>ロード中・・・</h1>
) : (
<>
<h1>ポケモンのデータを取得しました</h1>
</>
)}
</div>
);
🔹 {loading ? (...) : (...)} って何?
これは「もし loading が true なら 「ロード中・・・」を表示して、それ以外ならデータを見せる!」というルールだよ。
状態 (loading) | 画面に表示されるもの |
|---|---|
true (ロード中) | 「ロード中・・・」 |
false (データ取得完了) | 「ポケモンのデータを取得しました」 |
ローディングの流れをおさらい!
- 最初は
loading = trueだから 「ロード中・・・」 が出る - データを取りにいく(
getAllPokemonを呼び出す) - データが取れたら
loading = falseにする loading = falseになると「ポケモンのデータを取得しました」が表示される!
もっとわかりやすく例えると?
これは 「料理を待つレストラン」 みたいなものだよ!
🍽 レストランの流れ
- お客さん(Webページ)が来る → 「ロード中・・・」 の札を出す
- 料理(ポケモンデータ)を作る(APIからデータを取る)
- 料理ができたら → 「ロード中・・・」を消して、料理(データ)を見せる!
だから、「料理ができるまでの時間=ローディング」 って考えるとわかりやすいね!🍜
まとめ
- ローディングとは「データが来るまでの待機表示」のこと!
loadingという変数で「待ってるかどうか?」を管理する- データが取れる前は
loading = true(ロード中)、データが取れたらloading = falseにする! - 「料理を待つレストラン」のような流れを考えるとイメージしやすい!
この仕組みを使うと、画面が「真っ白で何も出ない…」ってならないから、見る人が「今データを取ってるんだな!」って分かるようになるよ✨