LoginSignup
3
2

More than 1 year has passed since last update.

zxで環境変数を扱う

Posted at

概要

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

それでは環境変数を呼び出すスクリプトを書いてみます。

hoge.mjs
#!/usr/bin/env zx

// .envの値がprocess.envに設定されます
require('dotenv').config()

// jsコードでの呼び出し
console.log(process.env.HOGE)
// コマンドで使用する場合は${VALUE}と書きます
await $`echo $HOGE`

これでzxで環境変数を扱うことができるようになりました。

ちなみに、.envの値をexportsourceといったコマンドで環境変数として定義する方法も試しましたが、うまくいかず、dotenvを使用するに至りました。

おわりに

直近の自分の使用例は、JSアプリケーションでnpm scriptsの処理を書く際にzxを使いました。
↓使用イメージ

package.json
  "scripts": {
    "postbuild": "zx upload-sourcemap.mjs"
  }

短いコマンドならばpackage.json内でscriptsに直接コマンドを書きますが、長くなってしまう場合はzxを使うと取り扱いがしやすいと感じますね。

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2