react-native-dotenv で環境ごとの定数を設定2021/08/03

react-native-dotenv で環境ごとの定数を設定

react-native-dotenv を使って、開発環境・本番環境で切り替わる定数の定義を行います。

ライブラリ

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

上記リポジトリの README に沿って設定すれば問題ないです。

インストール

まずはパッケージをインストールします。npm か yarn お好きな方で行いましょう。

npm install react-native-dotenv

babel の設定を追加

まずは babel の設定ファイルに設定を追加します。.babelrc とか babel.config.js などのファイルです。

    plugins: [
      [
        "module:react-native-dotenv",
        {
          moduleName: "@env",
        },
      ],
    ],

定数ファイルを用意

.env.development.env.production を用意します。中身は以下のように、定数の名前とその値を定義します。 環境によって有効になるファイルが切り替わるので、それぞれ開発用と本番環境用のパラメータを設定しましょう。

ANDROID_BANNER_AD_UNIT_ID=<Androidのバナー広告のユニットID>
IOS_BANNER_AD_UNIT_ID=<iOSのバナー広告のユニットID>

バナー広告のユニットIDを設定しています。この場合、開発環境用の.env.development にはテスト用広告IDを設定しておくことになります。

実装

moduleName で指定したパッケージ名としてインポートして定数を利用できます。

import {
  ANDROID_BANNER_AD_UNIT_ID,
  IOS_BANNER_AD_UNIT_ID,
} from "@env";

~~~

      <AdMobBanner
        adUnitID={Platform.select({
          ios: IOS_BANNER_AD_UNIT_ID,
          android: ANDROID_BANNER_AD_UNIT_ID,
        })}
      />

環境ごとにこの定数の中身が切り替わっています。 開発環境では .env.development の中身、本番ビルドでは .env.production の中身になっています。

型情報の用意

TypeScript の場合、@env の型情報がないため注意されます。 types/env.d.ts ファイルを作成して、以下のように定数の型情報を設定することで解決できます。

declare module '@env' {
  export const ANDROID_BANNER_AD_UNIT_ID: string;
  export const IOS_BANNER_AD_UNIT_ID: string;
}

手動で作成した型情報を使ったことがない場合は、tsconfig.json に型情報の場所を設定する必要があります。

{
    "typeRoots": ["./src/types"],
}

おわりに

簡単に環境ごとの定数を切り替えることができました。私は広告IDの切り替えや、APIのURL切り替えなどに利用しています。

似たようなことができるパッケージは他にもあるので好みに合わせて使ってみると良いです。

  • このエントリーをはてなブックマークに追加