概要
zxスクリプトで環境変数を使用する方法を記します。
公式サンプルを確認する
まず公式のREADMEに書いてあるサンプルを確認します。
process.env.FOO = 'bar'
await $`echo $FOO`
このサンプルから分かる通り、シェルコマンド内で環境変数を使うには、process.env
に値が定義されている必要があります。
つまり、環境変数を使うには実行環境の環境変数として定義されていればよい、ということになります。
環境変数を定義する
環境変数を定義する方法として、大きく2つあります。
ひとつは実行環境の環境変数として定義する、もう一つは.env
を使用する方法です。
実行環境の環境変数として定義する
環境変数が必要なスクリプトの用途として、CICDが多いと思います。
なのでCICDツールが提供している環境変数の機能を使うと簡単にできます。
.envを使用する
今回の主題はこちら。
zxはNode環境で実行されるので、npmモジュールも使えます。
なので.env
を利用するためのdotenv
モジュールをインストールして使ってみます。
まずはdotenv
をインストール。
yarn add dotnev
次に、.env
ファイルに環境変数を用意。
HOGE=hogehogehoge
それでは環境変数を呼び出すスクリプトを書いてみます。
#!/usr/bin/env zx
// .envの値がprocess.envに設定されます
require('dotenv').config()
// jsコードでの呼び出し
console.log(process.env.HOGE)
// コマンドで使用する場合は${VALUE}と書きます
await $`echo $HOGE`
これでzxで環境変数を扱うことができるようになりました。
ちなみに、.env
の値をexport
やsource
といったコマンドで環境変数として定義する方法も試しましたが、うまくいかず、dotenv
を使用するに至りました。
おわりに
直近の自分の使用例は、JSアプリケーションでnpm scriptsの処理を書く際にzxを使いました。
↓使用イメージ
"scripts": {
"postbuild": "zx upload-sourcemap.mjs"
}
短いコマンドならばpackage.json
内でscriptsに直接コマンドを書きますが、長くなってしまう場合はzx
を使うと取り扱いがしやすいと感じますね。