React環境変数 undefined対策
Reactで環境変数を取得する際にundefined
が返される理由
Reactにおける環境変数の取得とundefined
の問題
Reactアプリケーションでは、環境変数を設定して、アプリケーションの実行環境に応じて異なる挙動を実現することが可能です。しかし、環境変数を取得する際にundefined
が返されることがあります。この問題の主な原因と解決方法について解説します。
環境変数の設定方法
- 変数の設定
以下のように変数を設定します。
注意: 変数名はREACT_APP_API_KEY=your_api_key REACT_APP_BASE_URL=https://your-api.com
REACT_APP_
で始まる必要があります。 - .envファイルの作成
プロジェクトのルートディレクトリに.env
ファイルを作成します。
環境変数の取得
- process.envの使用
Reactアプリケーション内でprocess.env
オブジェクトを使用して環境変数を取得します。const apiKey = process.env.REACT_APP_API_KEY; const baseUrl = process.env.REACT_APP_BASE_URL;
undefinedが返される原因
- 環境変数がビルド時に定義されていない
ビルド時に環境変数が定義されていない場合、undefined
が返されます。 - 環境変数の名前が間違っている
環境変数の名前が間違っている場合もundefined
が返されます。 - 環境変数が設定されていない
.env
ファイルに設定されていない環境変数を取得するとundefined
が返されます。
解決方法
- ビルド時に環境変数を定義する
ビルド時に環境変数を定義します。例えば、Create React Appを使用している場合は、package.json
ファイルのscripts
セクションで環境変数を定義することができます。 - 環境変数の名前を確認する
環境変数の名前が正しいことを確認します。 - 環境変数を正しく設定する
.env
ファイルに環境変数を正しく設定します。
例
// package.json
{
"scripts": {
"start": "react-scripts start",
"build": "react-scripts build --env REACT_APP_NODE_ENV=production"
}
}
上記のように、REACT_APP_NODE_ENV
をビルド時に定義することで、本番環境でのビルド時に環境変数を設定することができます。
React環境変数 undefined対策のコード例
環境変数の設定と取得
// .envファイル
REACT_APP_API_KEY=your_api_key
REACT_APP_BASE_URL=https://your-api.com
// App.js
import React from 'react';
function App() {
const apiKey = process.env.REACT_APP_API_KEY;
const baseUrl = process.env.REACT_APP_BASE_URL;
return (
<div>
<p>API Key: {apiKey}</p>
<p>Base URL: {baseUrl}</p>
</div>
);
}
export default App;
ビルド時の環境変数の定義
// package.json
{
"scripts": {
"start": "react-scripts start",
"build": "react-scripts build --env REACT_APP_NODE_ENV=production"
}
}
条件分岐による処理
import React from 'react';
function App() {
const isProduction = process.env.NODE_ENV === 'production';
return (
<div>
{isProduction ? (
<p>本番環境です。</p>
) : (
<p>開発環境です。</p>
)}
</div>
);
}
export default App;
環境変数のデフォルト値の設定
import React from 'react';
function App() {
const apiKey = process.env.REACT_APP_API_KEY || 'default_api_key';
const baseUrl = process.env.REACT_APP_BASE_URL || 'https://default-api.com';
return (
<div>
<p>API Key: {apiKey}</p>
<p>Base URL: {baseUrl}</p>
</div>
);
}
export default App;
環境変数の動的な設定
import React, { useEffect, useState } from 'react';
function App() {
const [apiKey, setApiKey] = useState('');
useEffect(() => {
fetch('/api/get-api-key')
.then(response => response.json())
.then(data => setApiKey(data.apiKey));
}, []);
return (
<div>
<p>API Key: {apiKey}</p>
</div>
);
}
export default App;
- Webpack
// webpack.config.js const webpack = require('webpack'); module.exports = { plugins: [ new webpack.DefinePlugin({ 'process.env.REACT_APP_API_KEY': JSON.stringify('your_api_key'), 'process.env.REACT_APP_BASE_URL': JSON.stringify('https://your-api.com') }) ] };
- Create React App
// package.json { "scripts": { "start": "react-scripts start", "build": "react-scripts build --env REACT_APP_NODE_ENV=production" } }
サーバーサイドレンダリング (SSR)
- Next.js
Next.jsでは、サーバーサイドで環境変数を取得し、クライアントサイドに渡すことができます。// pages/index.js import { useRouter } from 'next/router'; function Home() { const router = useRouter(); const apiKey = process.env.REACT_APP_API_KEY; const baseUrl = process.env.REACT_APP_BASE_URL; // ... } export default Home;
環境変数管理ライブラリ
- dotenv-webpack
dotenv-webpackを使用することで、// webpack.config.js const Dotenv = require('dotenv-webpack'); module.exports = { plugins: [ new Dotenv() ] };
.env
ファイルの環境変数をWebpackビルド時に読み込むことができます。
カスタムスクリプト
- Node.jsスクリプト
カスタムスクリプトを作成して、const fs = require('fs'); const env = fs.readFileSync('.env', 'utf8'); const envPairs = env.split('\n').map(line => line.split('=')); const envObject = envPairs.reduce((acc, [key, value]) => ({ ...acc, [key]: value }), {}); // ...
.env
ファイルを読み込み、環境変数を取得することができます。
reactjs undefined