2023年5月1日を持ちまして、株式会社KDDIウェブコミュニケーションズのTwilioリセール事業が終了したため、本記事に記載されている内容は正確ではないことを予めご了承ください。
はじめに
みなさん、こんにちは。
KDDIウェブコミュニケーションズのTwilioエバンジェリストの高橋です。
Twilio Flex Advent Calendar 2021 16日目の記事です。
シナリオ
Flexプラグインを使っていて、外部のAPIサービスなどを利用したい場合に、APIキーを環境変数として扱いたいことが結構あります。
Reactで環境変数を扱うには、dotenv-webpack - npmを利用するのが一般的で、Flexプラグインでもこちらを使います。
ただ、Flexプラグインでは、webpack.config.js
が以下のようになっています。
module.exports = (config, { isProd, isDev, isTest }) => {
/**
* Customize the webpack by modifying the config object.
* Consult https://webpack.js.org/configuration for more information
*/
return config;
};
うーん。これにplugins
を追加するにはどうしたらいいのかしらん。
というのがこの記事の主題です。
ハンズオン
dotenvライブラリのインストール
dotenvライブラリは、Webpackの中で使われるので、以下のようにしてインストールします。
% npm i -D dotenv-webpack
これでpackage.json
のdevDependencies
に追加されます。
.envファイルを作成する
Flexプラグインフォルダの直下に.env
という名前でファイルを作成します。
中に変数を記載するのですが、このときに変数名の頭にFLEX_APP_
もしくはREACT_APP_
を指定しないとWebPack実行時に以下のメッセージが出てしまいます。
Unsupported variable XXXXXXXXXXXX provided in .env file. Variables must start with either FLEX_APP_ or REACT_APP_.
なので、以下のように先頭にプレフィックスを付けるようにしましょう。
FLEX_APP_API_KEY=XXXXXXXXXXXXXXXX
webpack.config.jsの変更
最後にwebpack.config.js
ファイルを修正します。
const DotEnvWebpack = require('dotenv-webpack');
module.exports = (config, { isProd, isDev, isTest }) => {
/**
* Customize the webpack by modifying the config object.
* Consult https://webpack.js.org/configuration for more information
*/
const envPath = '.env';
config.plugins.push(
new DotEnvWebpack({
path: envPath,
}),
);
return config;
};
こんな感じで設定すればOKです。
環境変数の読み込み
プラグインのソースコード内から環境変数を読み込むには、以下のようにコーディングします。
const API_KEY = process.env.FLEX_APP_API_KEY;
ビルド
twilio flex:plugins:start
もしくは、twilio flex:plugins:build
を実行すると、WebPackが実行されるので、環境変数が利用できるようになります。
環境変数を切り替える
たとえば、開発用、ステージング用、本番用と環境を複数利用している場合についても説明します。
まずは、環境ごとに.env
ファイルを作成します。たとえば、今回のように開発用、ステージング用、本番用の3つを作る場合は、
- .env.dev
- .env.stage
- .env.prod
のように、それぞれ別の環境設定ファイルを作成します。
このとき、.env
ファイルが残ったままですと、それが優先的に利用されてしまうので、.env
は削除して、それぞれの環境ごとにファイルを作成するようにしましょう。
webpack.config.js は以下のように記述します。
const DotEnvWebpack = require('dotenv-webpack');
module.exports = (config, { isProd, isDev, isTest }) => {
/**
* Customize the webpack by modifying the config object.
* Consult https://webpack.js.org/configuration for more information
*/
// We dynamically change the path to the .env that contains the file corresponding to our profile
let envPath;
switch (process.env.TWILIO_PROFILE) {
case 'StageProfile':
envPath = '.env.stage';
break;
case 'ProductionProfile':
envPath = '.env.prod';
break;
default:
envPath = '.env.dev';
}
// If path was set, use the dotenv-webpack to inject the variables
if (envPath) {
config.plugins.push(
new DotEnvWebpack({
path: envPath,
}),
);
}
return config;
};
ビルドやデプロイするときに、以下のようにそれぞれの環境ごとの Twilio プロファイルを指定することで、それぞれの環境変数が読み込まれるようになります。
twilio flex:plugins:build -p StageProfile
twilio flex:plugins:build -p ProductionProfile
StageProfile
やProductionProfile
は、事前にtwilio profiles:create
で作成しておく必要があります。
まとめ
Twilioのドキュメントにも同様の記載がありますが、プロファイルで切り替えする必要がない場合は、上記のようにシンプルに実装することもできます。
また、FlexプラグインでWebPackのオプションを使いたいときなども今回の手法が役に立つかもしれません。
★次の記事
Flexプラグイン Tips(顧客住所を地図表示)
Twilio(トゥイリオ)とは
https://cloudapi.kddi-web.com
Twilioは音声通話、メッセージング(SMS/チャット)、ビデオなどの 様々なコミュニケーション手段をアプリケーションやビジネスへ容易に組み込むことのできるクラウドAPIサービスです。初期費用不要な従量課金制で、各種開発言語に対応しているため、多くのハッカソンイベントやスタートアップなどにも、ご利用いただいております。