前回のエントリーで環境変数の学び直しをしたので、今回はNode-RED
での環境変数の使い方の復習をします。復習と言ってもほぼ使ったことがなかったので初めて使うに近いです。今回の内容は以下の内容を踏襲しています。サブフローなどに関してはまだ手に負えないので、記載はしていません。
公開されているこちらの情報ですが、非常にいい情報が掲載されているのですが、初心者には結構わかりにくいような😢その部分も含めてまとめて行きます。
今回、RaspberryPi OS
環境に、以下のように起動したNode-RED
をインストールして使っています。
環境変数の内容については前回のエントリのLinux系の環境変数の部分を参考にお願いします。
参考
また、今回参照する環境変数は変数名:ENV_VARIABLE
、値:value123
とします。
CLIによる設定と表示
# 設定(~/.bashrcなどの編集) $ export ENV_VARIABLE=value123 # 表示(grep使用) $ printenv | grep ENV_VARIABLE ENV_VARIABLE=value123
環境変数をNode-RED
で使用する方法
1)ノードのプロパティに${環境変数名}
の形式で設定し参照を行う
ノードのプロパティを文字列として${環境変数の名前}
と入力する。今回は環境変数の名前がENV_VARIABLEなので${ENV_VARIABLE}
となります。
プロパティの値が扱いやすいinjectノード
のpayload
にこの値を入力したフローを作成します。
injectノード
をダブルクリックし、【injectノードを編集】から【プロパティ】のmsg.payload
の値をプルダウンから文字列に設定し、テキストボックスに${ENV_VARIABLE}
を入力します。
【デプロイ】ボタンをクリックして、フローを起動するとデバッグエリアに”value123”
が表示されます。
この形式ではプロパティの値すべてが環境変数になる場合のみ使用ができます。環境変数と別の文字列が混在する場合には使用できないので注意してください。
2)ノードのプロパティの型形式を$ 環境変数
に設定し参照を行う
続いての参照方法は、ノードのプロパティの型をプルダウンから$ 環境変数
に設定し、環境変数名を設定する方法です。この型のプルダウンのあるUIをTypedInputウィジェット
と呼ぶそうです。
フローとしては先程とほぼ代わりません。injectノード
とdebugノード
を使用します。
injectノード
のTypedInputウィジェット
の型を$ 環境変数
に変更し、テキストボックスに環境変数名(今回はENV_VARIABLE
)を入力します。
フローを実行すると値が参照できます。
この形式でもプロパティの値すべてが環境変数になる場合のみ使用ができます。
他にもこのようなTypedInputウィジェット
が使用できるノードは以下のようなものがありました。
- injectノード
- changeノード
- switchノード
- write fileノード
- read fileノード
3)ノードのJSONata式
で〇〇して設定し参照を行う
JSONata式
を使用可能なノードでは、TypedInputウィジェット
の型をJ: JSONata式
に変更して、$env()
関数を使用することによって、環境変数にアクセスすることができます。
JSONata式とは、JSON データ構造を照会および変換するための式言語です。
DBにおけるクエリのような形でデータの取得、変換などが行える様になっています。このJSONata式を使用して以下のように記述をします。
$env("ENV_VARIABLE")
フローとしては、JSONata式はinjectノード
からも使用できるので、先程までのフロート全く代わりません。
injectノード
のTypedInputウィジェット
の型をJ: JSONata式
に変更し、テキストボックスに$env("ENV_VARIABLE")を入力します。
フローを実行すると値が参照できます。
4)Functionノード
のコードで環境変数を取得して使用する
Functionノードのコード記述では、環境変数はenv.get()
関数を利用することによってアクセスすることができます。以下のコードでは変数valueに環境変数ENV_VARIABLEの内容を代入しています。以降、変数valueを使用したNode.jsの記述ができます(処理に使用することができます)。
let value = env.get("ENV_VARIABLE"); msg.payload = value; return msg;
injectノード
、functionノード
、debugノード
を使用して以下の様なフローを作成し、
functionノード
のコードに上記のコードを入力して、【デバック】ボタンをクリックします。・
これで環境変数の値の取得が行えました。
functionノード
のコードに記載するので、色々な処理を組み合わせる事ができますし、出力結果も環境変数とは異なる値を出力できます。
5)templateノード
のテキストボックスで環境変数を取得して参照(使用)を行う
Node-RED 3.0以降ではtemplateノード
は次のようなのシンタックスで環境変数にアクセスすることができます。このシンタックスは{{
が英語圏の顔文字の髭にみえることからmustache記法
(マスタッシュはヒゲの意)と呼ばれています。
My ENV value is {{env.ENV_VARIABLE}}.
injectノード
、templateノード
、debugノード
を使用して以下の様なフローを作成し、
templateノード
のテンプレートに上記を入力して、【デプロイ】ボタンをクリックします。・
実行すると以下のような表示が行われます。
templeteノード
のテンプレートに記載するので、出力結果の一部に環境変数を含める値を出力できます。
おわりに
今回はNode-RED
で環境変数を使用する方法についていくつかのパターンを見てきました。パターンが多すぎなのではと思うのですが、
値の参照・取得しかできないパターン、処理も追加できるパターン、環境変数の値を出力に含めるパターンといった、3つぐらいに大別できるのかなと思います。
それら用途に合わせられれば、処理のパターン化分けは容易なのかもしれません。