0Pricing
Frontend Academy · レッスン

Axios:インターセプターとベース URL

baseURL を指定して Axios インスタンスを作成し、リクエストインターセプターで認証トークンを付加し、レスポンスインターセプターで 4xx/5xx エラーを処理します。

「Axios:インターセプターとベース URL」はCoddyKit上の無料Frontend Academyレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはFrontend Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Frontend Academyコースには全4レッスンが含まれています。

Axiosを使う理由

AxiosはXMLHttpRequestを基盤とする、広く使われているHTTPクライアントです。JSONの自動処理、リクエストとレスポンスのインターセプター、baseURLの設定、タイムアウト、リクエストのキャンセルトークンを追加で提供します。現在でも、多くのチームがfetchよりAxiosを好んで使っています。

Axiosのインストール

npmでインストールします。ブラウザーバンドルのサイズはgzip圧縮後で約14KBです。

npm install axios

基本的なGETとPOST

AxiosはJSONのボディを自動的に文字列化し、JSONのレスポンスも自動的に解析します。そのため、手動でJSON.stringifyや.json()を呼び出す必要はありません。

import axios from 'axios';

const { data } = await axios.get('/api/users');
console.log(data); // already parsed

const res = await axios.post('/api/users', { name: 'Alice' });
console.log(res.data, res.status);

Axiosインスタンスを作成する

API用に設定済みのインスタンスを作成すると、すべての呼び出しでbase URL、ヘッダー、タイムアウトを繰り返し指定せずに済みます。

import axios from 'axios';

export const api = axios.create({
  baseURL: import.meta.env.VITE_API_URL,
  timeout: 10000,
  headers: { 'Content-Type': 'application/json' }
});

// Use it:
const { data } = await api.get('/users');
const res = await api.post('/users', { name: 'Alice' });

リクエストインターセプター:認証トークン

同じ処理を繰り返さずに、すべてのリクエストへ認証トークンを付加します。

api.interceptors.request.use((config) => {
  const token = localStorage.getItem('token');
  if (token) {
    config.headers.Authorization = `Bearer ${token}`;
  }
  return config;
});

レスポンスインターセプター:グローバルエラー処理

すべてのレスポンスに対するエラー処理を一元化します。たとえば、401ではリダイレクトし、5xxではトーストを表示します。

api.interceptors.response.use(
  (response) => response,
  (error) => {
    if (error.response?.status === 401) {
      window.location.href = '/login';
    }
    if (error.response?.status >= 500) {
      toast.error('Server error. Please try again.');
    }
    return Promise.reject(error);
  }
);

401時のトークン更新

レスポンスインターセプターを使って401を検出し、トークンを更新してから、元のリクエストを透過的に再試行します。

api.interceptors.response.use(null, async (error) => {
  const originalRequest = error.config;
  if (error.response?.status === 401 && !originalRequest._retry) {
    originalRequest._retry = true;
    const newToken = await refreshToken();
    localStorage.setItem('token', newToken);
    originalRequest.headers.Authorization = `Bearer ${newToken}`;
    return api(originalRequest); // retry
  }
  return Promise.reject(error);
});

URLパラメータとクエリ

Axiosではparamsオブジェクトを受け取れます。これは自動的にクエリ文字列へシリアライズされます。

const { data } = await api.get('/search', {
  params: { q: 'react hooks', page: 2 }
});
// GET /search?q=react+hooks&page=2

タイムアウト

遅いサーバーでリクエストがハングするのを防ぐため、リクエストのタイムアウトを設定します。

api.get('/slow-endpoint', { timeout: 5000 })
  .catch(err => {
    if (err.code === 'ECONNABORTED') {
      console.log('Request took too long');
    }
  });

リクエストのキャンセル

AbortController(最新のAxios)またはCancelToken(古いAPI)を使用します。

const controller = new AbortController();

api.get('/big-data', { signal: controller.signal })
  .catch(err => {
    if (axios.isCancel(err)) console.log('cancelled');
  });

controller.abort();

エラーオブジェクトの構造

Axiosのエラーには、error.response(サーバーがエラーステータスを返した場合)、error.request(レスポンスを受信できなかった場合)、またはそのどちらでもない場合(リクエストのセットアップに失敗した場合)があります。

AxiosとFetch — 使い分け

AxiosはAPIがより扱いやすく、インターセプターが組み込まれており、エラーハンドリングも簡潔です。Fetchはネイティブで、バンドルサイズが小さく、最新のストリーミングをサポートします。新しいプロジェクトではfetchと薄いラッパーの組み合わせが選ばれることが多く、既存のAxiosプロジェクトが移行することはほとんどありません。

確認問題

個々の呼び出しを変更せずに、すべてのリクエストへAuthorizationヘッダーを追加できるAxiosの機能は何ですか。

まとめ:Axios

baseURLとtimeoutを設定したインスタンスにはaxios.create()を使用します。JSONレスポンスは自動的に解析されます(res.data)。リクエストインターセプターでトークンを付与し、レスポンスインターセプターでエラー処理とトークンの更新を行います。クエリ文字列にはparamsオブジェクトを使用します。キャンセルにはAbortControllerを使用します。扱いやすさを重視するならAxios、バンドルサイズを小さくするならfetchとラッパーを選びます。

よくある質問

「Axios:インターセプターとベース URL」レッスンは無料ですか?

はい。「Axios:インターセプターとベース URL」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Frontend Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Frontend Academyコースには全4レッスンが含まれています。

「Axios:インターセプターとベース URL」で何を学びますか?

baseURL を指定して Axios インスタンスを作成し、リクエストインターセプターで認証トークンを付加し、レスポンスインターセプターで 4xx/5xx エラーを処理します。 ブラウザで直接実行するハンズオンコードでFrontend Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Frontend Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのFrontend Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。

「Axios:インターセプターとベース URL」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このFrontend Academyレッスンでコードを書いて実行できますか?

はい。すべてのFrontend Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. Fetch API:GET・POST・PUT・DELETE
  2. Axios:インターセプターとベース URL
  3. エラーハンドリング:HTTPステータスコード
  4. データキャッシュのためのSWRとReact Query
← Frontend Academyに戻る