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

ReactでAxiosの共通ヘッダーやトークンを設定する方法を完全ガイド!初心者でもわかるAPI通信の基本

Axiosで共通のヘッダーやトークンを設定する方法
Axiosで共通のヘッダーやトークンを設定する方法

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

生徒

「ReactでAPIを呼び出すときに、毎回ヘッダーを設定するのが大変なんですが、簡単にする方法はありますか?」

先生

「ありますよ。Axiosでは共通のヘッダーやトークンを一度設定しておけば、毎回同じ設定を書く必要がなくなるんです。」

生徒

「それは便利そうですね!どうやって設定するんですか?」

先生

「では、実際の方法をわかりやすく解説していきましょう。」

1. 共通ヘッダーとは?

1. 共通ヘッダーとは?
1. 共通ヘッダーとは?

ヘッダーとは、APIにリクエストを送るときに一緒に渡す追加情報のことです。例えば、誰がアクセスしているかを示す「トークン」や、どの形式でデータを受け取りたいかを指定する「Content-Type」などがあります。

毎回同じ情報をヘッダーに書くのは手間なので、Axiosで共通設定をしておけば効率的にAPI通信ができます。

2. Axiosで共通ヘッダーを設定する基本方法

2. Axiosで共通ヘッダーを設定する基本方法
2. Axiosで共通ヘッダーを設定する基本方法

Axiosにはaxios.defaults.headersを使う方法があります。これを使うと、以降のリクエストに自動的に設定が反映されます。


import axios from "axios";

// 共通ヘッダーを設定
axios.defaults.headers.common["Authorization"] = "Bearer YOUR_TOKEN_HERE";
axios.defaults.headers.common["Content-Type"] = "application/json";

// APIを呼び出す
axios.get("https://api.example.com/data")
  .then(response => {
    console.log(response.data);
  })
  .catch(error => {
    console.error("エラー:", error);
  });
この設定をすると、すべてのリクエストに「Authorization」と「Content-Type」が自動で追加されます。

3. トークンとは何か?

3. トークンとは何か?
3. トークンとは何か?

トークンとは、簡単にいうと「合言葉」や「入場チケット」のようなものです。サーバーはこのトークンを確認して、「この人はアクセスしていいかどうか」を判断します。

例えば、遊園地に入るときにチケットを見せるのと同じように、APIにアクセスするときにはトークンを渡す必要がある場合があります。

4. カスタムインスタンスを使って管理する方法

4. カスタムインスタンスを使って管理する方法
4. カスタムインスタンスを使って管理する方法

アプリが大きくなると、毎回axios.defaultsを使うより、専用のAxiosインスタンスを作るほうが管理しやすくなります。


import axios from "axios";

// 専用のAxiosインスタンスを作成
const api = axios.create({
  baseURL: "https://api.example.com",
  headers: {
    Authorization: "Bearer YOUR_TOKEN_HERE",
    "Content-Type": "application/json",
  },
});

// 使用例
api.get("/users")
  .then(res => console.log(res.data))
  .catch(err => console.error(err));
こうすることで、baseURLやヘッダーを一度設定すれば、以降のリクエストで毎回自動的に反映されます。

5. Reactで状態に応じてトークンを設定する

5. Reactで状態に応じてトークンを設定する
5. Reactで状態に応じてトークンを設定する

実際のアプリでは、ログイン後に発行されるトークンを使うことが多いです。その場合は、ログイン成功時にローカルストレージに保存し、それをAxiosの共通ヘッダーに反映します。


import axios from "axios";

// ログイン処理後にトークンを保存
localStorage.setItem("token", "SAMPLE_TOKEN");

// Axiosインスタンスを作成
const api = axios.create({
  baseURL: "https://api.example.com",
});

// リクエスト前にトークンを設定
api.interceptors.request.use(config => {
  const token = localStorage.getItem("token");
  if (token) {
    config.headers.Authorization = `Bearer ${token}`;
  }
  return config;
});
ログインした人だけが特定のAPIにアクセスできるようになります。

6. 実務での使いどころ

6. 実務での使いどころ
6. 実務での使いどころ

Axiosで共通のヘッダーやトークンを設定するのは、実務でとてもよく使います。例えば:

  • ユーザーがログインしているか確認するAPI
  • ショッピングサイトでカート情報を取得するAPI
  • 会員制サービスでユーザーごとのデータを表示するAPI

こうしたときに毎回トークンを手動で渡すのではなく、自動で付与されるように設定しておくと安全で便利です。

7. 注意点

7. 注意点
7. 注意点

共通ヘッダーの設定には注意も必要です。トークンは機密情報なので、むやみに公開してはいけません。GitHubなどにそのまま書いた状態でアップロードすると、不正アクセスの原因になります。

また、開発環境と本番環境で異なる設定を使う場合は、環境変数を利用して切り替えるのがおすすめです。

まとめ

まとめ
まとめ

ここまで、React開発におけるAxiosの共通ヘッダー設定やトークン管理の方法について詳しく解説してきました。フロントエンド開発において、APIとの通信は避けて通れない非常に重要な要素です。特に、ユーザー認証が必要なWebアプリケーションでは、今回ご紹介した「認証トークン(JWTなど)」をリクエストヘッダーに含める作業が必須となります。

初心者のうちは、APIを呼び出すたびに個別にヘッダーを記述してしまいがちですが、コードの冗長化を防ぎ、保守性を高めるためには、「共通設定(Defaults)」「カスタムインスタンス(axios.create)」、さらには「インターセプター(Interceptors)」を活用するのがプロフェッショナルな手法です。

効率的なAPI管理のポイント

実務レベルのプロジェクトでAxiosを導入する際は、以下のステップを意識することで、よりクリーンなソースコードを実現できます。

  • ベースURLの一元管理: 開発環境と本番環境でエンドポイントを切り替える際、一箇所を修正するだけで済みます。
  • インターセプターによる自動付与: ローカルストレージやCookieからトークンを取得し、リクエストの直前に自動でヘッダーへ差し込む仕組みを作ることで、実装漏れによる認証エラーを防げます。
  • エラーハンドリングの共通化: 401(認証切れ)エラーが発生した際に、自動でログアウト処理を行ったり、リフレッシュトークンを使用してトークンを再取得したりする処理も共通化可能です。

実践的な実装サンプル:認証付きAxiosクライアント

これまでの内容を踏まえて、Next.jsやReactプロジェクトですぐに使える、より実践に近いTypeScript対応のAxios設定例を見てみましょう。


import axios from "axios";

// APIクライアントの作成
const apiClient = axios.create({
  baseURL: "https://api.your-service.com/v1",
  timeout: 5000, // 5秒でタイムアウト
  headers: {
    "Content-Type": "application/json",
  },
});

// リクエストインターセプター:送信前に必ず実行される
apiClient.interceptors.request.use(
  (config) => {
    // ローカルストレージから最新のトークンを取得
    const token = localStorage.getItem("access_token");
    if (token) {
      config.headers.Authorization = `Bearer ${token}`;
    }
    return config;
  },
  (error) => {
    return Promise.reject(error);
  }
);

// レスポンスインターセプター:受け取り時に実行される
apiClient.interceptors.response.use(
  (response) => response,
  (error) => {
    if (error.response && error.response.status === 401) {
      // 認証エラー時はログイン画面へリダイレクトなどの処理
      console.error("認証が期限切れです。再ログインしてください。");
    }
    return Promise.reject(error);
  }
);

export default apiClient;
このコードを「api.js」などのファイルに保存して、他のコンポーネントから apiClient.get('/user') のように呼び出すだけで、自動的に最新のトークンが送信されます。

今後の学習に向けて

ReactでのAPI通信をマスターしたら、次は「React Query(TanStack Query)」や「SWR」といった、データフェッチライブラリとの組み合わせを学習することをおすすめします。これらを活用することで、今回設定したAxiosの仕組みをベースにしつつ、データのキャッシュ管理やローディング状態のハンドリングをさらに簡潔に記述できるようになります。

セキュリティ面では、トークンを「localStorage」に保存する手法以外にも、セキュアな「HttpOnly Cookie」を利用する方法など、プロジェクトの要件に応じた選択肢があります。まずは基本となるヘッダー設定を完璧に使いこなせるようになりましょう。

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

生徒

「先生、ありがとうございました!共通設定を使うことで、コンポーネント側のコードがすごくスッキリしました。今までは全ページにトークンの取得処理を書いていたので、修正が本当に大変だったんです。」

先生

「それは良かったです!コードの共通化は、バグを減らすための第一歩ですからね。特にインターセプター(Interceptors)を使えば、通信の前後で好きな処理を挟めるので、ログの出力やエラー通知なんかも一括管理できるんですよ。」

生徒

「なるほど。さっきのサンプルコードにあった、401エラーの時に自動でメッセージを出す仕組みは、ユーザー体験も良くなりそうですね。でも、トークンが盗まれないように注意しないといけないって話もありましたが、具体的に何に気をつければいいですか?」

先生

「鋭いですね。一番大切なのは、トークンをソースコードの中に直接(ハードコーディング)書かないことです。環境変数(.envファイル)を使って管理し、GitHubなどの公開場所にアップロードしないように設定(.gitignore)するのが基本中の基本です。また、HTTPS通信を使って通信経路を暗号化することも必須ですね。」

生徒

「環境変数ですね、勉強になります!あと、Axiosのインスタンスを複数作ることはあるんですか?」

先生

「よくありますよ。例えば、自分のメインサーバー用と、外部の天気予報API用など、接続先が違う場合にそれぞれ別々の設定を持ったインスタンスを作っておくと、管理がとても楽になります。ぜひ自分のプロジェクトでも試してみてくださいね。」

生徒

「はい!さっそく、今作っているポートフォリオのAPI通信部分を、この共通ヘッダーを使った方法に書き換えてみます!」

カテゴリの一覧へ
新着記事
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を送る仕組みを初心者向けに紹介