📑

ReactNativeでdotenvを利用する(react-native-dotenv)

2022/01/08に公開

ReactNativeでdotenvを利用する(react-native-dotenv)

公式:https://github.com/goatandsheep/react-native-dotenv

概要

react-native-dotenv を利用して環境別にAPIキーやURIを切り替える仕組みを導入します。
※上記で切り替えられるのはjs,ts側のみとなります。ネイティブ側は切り替えできません。

環境

OS: Windows10
Node.js: 16.13.1

※iOSの動作環境が手元になかったため、Androidのみで確認しました。

導入

react-native-dotenv を追加します。

yarn add react-native-dotenv

babel.config.jsのpluginsに 'module:react-native-dotenv' を追加します。

// babel.config.js

module.exports = function (api) {
  api.cache(true)
  return {
    plugins: [
      [
        'module:react-native-dotenv',
        {
          envName: 'APP_ENV',
          moduleName: '@env',
          path: '.env',
          safe: true
        }
      ]
    ],
    ...
  }
}

プロジェクトのルートディレクトリに .env ファイルを作成し、設定を追加します。

API_KEY=hogehoge

これで .env に記述した定数を以下のようにして読み込めます。

import { API_KEY } from '@env'

各js,tsファイルから上記のように読み込むことは出来ますが、.env ファイルの内容を変更してもbabelのキャッシュが残ってしまい反映されません。
最新の設定値を反映するために @env をimportしているファイル全てを更新する必要がありますが、数が多くなると面倒です。
そこで、すべての設定値を読み込むConfigファイルのようなものを用意し、 .env ファイルを書き換えたらそのConfigファイルのみを更新することで対応します。

// env.js

import { API_KEY } from '@env'

export default { API_KEY }

.env ファイルの内容を変更したときは一度metro bundlerを停止し、env.jsファイルを更新してから起動します。

Unknown option: .name. エラーでビルドできない場合

babelで API_KEY のような環境変数を置き換えるため、オブジェクトの省略記法で実装するとエラーとなるようです。
詳細は調べていないので分かりませんが、ひとまず以下のように省略せずに実装することで対応しました。

// env.js

import { API_KEY } from '@env'

export default { API_KEY: API_KEY } // 追加
// export default { API_KEY }

Discussion

ログインするとコメントできます