- フロントエンドでは環境変数が使えない
- 簡単でシンプルな方法が良い
上を鑑みて私がいつも採る方法は 可変なconfig.jsを用意する です。
まず
config.development.js
config.productions.js
を用意します。
(staging環境もあるのなら config.staging.js も用意します)
各ファイルの内容は次のようにします。
config.development.js
js
1export const apiURL = 'http://localhost:8080' // 開発環境のURL
config.production.js
js
1export const apiURL = 'https://example.com' // 本番環境のURL
あとは環境に応じて cp config.development.js config.js もしくは cp config.production.js config.js を実行するだけです。
そして config.js は .gitignore に追記しておきましょう。
これで環境ごとに config.js の内容を切り替えられますし、git管理も適切に行えます。
これらを利用すると、APIを叩くコードは次のようになるでしょう。
js
1import axios from 'axios'
2import { apiURL } from './config'
3
4const axiosInstance = axios.create({
5 baseURL: apiURL,
6});
7
8const doSomething = async () => {
9 const { data } = await axiosInstance.get('/hello')
10 console.log(data)
11}
12
13doSomething()
私としては create-react-app の仕組みに依存したくないという理由から REACT_APP_XXXXXX はあまりおすすめしません。
業務で create-react-app を使う場合も少ないと思います。
私が示した方法はJSのモジュールシステムを利用しているだけなので、どのような場合でも使える汎用的なものです。
そして create-react-app 特有のよくわからないブラックボックスな仕組みを使うよりも何が起こっているかを理解しながら書けますし簡単です。
もう一つ REACT_APP_XXXXXX を使いたくない理由は、サーバーサイドNode.jsで環境変数を取得するのと同じ process.env でアクセスするので、初心者が環境変数を扱っていると勘違いしやすい という点です。
サーバの環境変数は外から見えない変数なので、AWSシークレットキーなどの機密情報をセットするのにもよく使われます。
しかしフロントエンドでは環境変数は扱えないので、 REACT_APP_XXXXXX も create-react-appが用意した環境変数っぽくアクセスできる何か でしかありません。
初心者が勘違いしてここにシークレットキーをセットしてしまう場合がありそうで、その意味でも有害だと思っています。
実際、先日勘違いした方の質問に回答しましたがなかなか理解してもらえませんでした。
退会済みユーザー
2019/07/31 07:21