環境変数とシェル変数の混同があったので少し修正いたしました(2024.02.05)
久々にNode-REDを復習してみようと考えて、Node-RED日本ユーザ会のホームページを眺めていました。
そういえば、これまでに開発時に環境変数って使ったことあまりなかったなあと思い、どうやって使うんだっけ?という疑問がでてきたので、ちょっと調べてみたら、数種類の方法があったので学びなおすことにしました。
該当のページは以下となります。
環境変数の重要性
ご存じの方はこんな内容は読まないかなと思いますが…
環境変数(かんきょうへんすう、英語: environment variable)はオペレーティングシステム (OS) が提供するデータ共有機能の一つ。OS上で動作するタスク(プロセス)がデータを共有するための仕組みである。特にタスクに対して外部からデータを与え、タスクの挙動・設定を変更するために用いる。(Wikipediaより)
OSが提供するデータ共有機能で、コンピュータの黎明期からかなり使われている機能です。一般的な例としてはPATH
などを通すというのもPATH
という環境変数にプログラムを実行するパスを事前登録するということで行っています。また最近はREST API
などの認証データの保存などにも使用されています。
環境変数にしたほうが良い情報
環境変数を利用する主な利点は、セキュリティの向上と設定の柔軟性です。重要なデータをソースコードから分離することで、誤ってリポジトリにコミットしたり、不必要に広範囲に晒したりするリスクを減らすことができます。また、環境変数を通じてアプリケーションの設定を外部から調整できるため、異なる環境や条件下での運用が容易になります。
すべてではありませんが、以下のような情報は環境変数にしたほうがよさそうです。
- 機密情報:パスワード、APIキー、秘密鍵などの機密性の高い情報。これらをソースコードに直接記述すると、セキュリティリスクが高まります。
- 設定情報:データベースの接続設定、外部サービスのエンドポイント、アプリケーションのポート番号など、環境に依存する設定情報。
- 環境依存の変数: 開発、テスト、本番など異なる環境で異なる値を使用する変数:バッグモードの有効化、ログの詳細レベル、リソースの割り当て量など。
- アプリケーションの動作をカスタマイズするためのフラグ:特定の機能のオン/オフや、機能の挙動を変更するためのフラグ。
- 外部リソースへのパス:ファイルシステムのパスやURLなど、外部リソースへの参照。
自分は結構コードにそのまま記載していることがほとんどでした。ちょっと反省です。
ということで、環境変数の設定に関して各処理系でまとめ、次回にNode-REDでの使用方法をまとめます。
20240205追記
macOS、Linux (bash環境)
に関してですが、下記表現の中で、一時的な環境変数
と、シェル変数
という言葉の混同がある部分があるようなので一部文面の修正を行っています。
⋆ シェル変数
とは
現在実行しているシェルの中だけで有効な変数。
⋆ 環境変数
とは
新たなシェルを起動したり、コマンドを実行した場合にも継承される変数となります。
ただ、現在実行しているシェル内で環境変数の設定をした場合には(export
コマンドを使用した場合)環境変数になりますが、
そのシェル内でのみ使用できる環境変数となります。
また、シェル変数は環境変数へと昇格(よい表現かわからないですが)することもできます。exportコマンド以降にシェル変数の定義ができるためです。
なかなか、分かりにくい表現になっていますが、一時的な環境変数というのは使用できるけれども、運用上はあんまり使用しないかなと考えています。
環境変数の操作
Windowsの場合
Windows環境変数の設定方法
一時的な環境変数の設定
コマンドプロンプトから操作を行います。set VARIABLE_NAME=value
という形式で実行し、環境変数を設定します。
> set API_KEY=12345
永続的な環境変数の設定
以下の操作で新規設定・表示・変更もすべて行えます。
- 【スタート(田)】メニューから【設定】アイコンをクリックし、検索のテキストボックスに【環境変数】と入力
- 候補の【システムの環境変数の編集】を選択
- 表示されたダイアログの【環境変数】ボタンをクリック
- ダイアログ下部の【システムの環境変数】の【新規】ボタンをクリックし、
変数名
と値
を入力して【OK】ボタンをクリックします。
Windowsの環境変数の値の確認方法
コマンドプロンプトを使用
コマンドプロンプトを開き、特定の環境変数を確認するにはecho %VARIABLE_NAME%
と実行します。
Windowsでは%
で変数名を囲む必要あるのが面倒ですね😐
> echo %API_KEY%
全ての環境変数を表示するには、setコマンド
を入力します。
> set
システムのプロパティを使用
こちらは設定を行うのと同様に表示が行えます。
Windowsの環境変数のクリアの方法
一時的な環境変数の設定
一時的な環境変数はコマンドプロンプトのセッションが終了すると自動的にクリアされます。
特定の環境変数を手動でクリアするには、set VARIABLE_NAME=
と実行することで空の値にすることができます。
> set VARIABLE_NAME=
永続的な環境変数のクリア
こちらは設定を行うのと同様にクリアを行えます。
macOS、Linux (bash環境)
macOS、Linuxの環境変数の設定方法
一時的な環境変数の設定
ターミナルやシェルから設定を行います。
export VARIABLE_NAME=value
という形式で実行し、環境変数を設定します。
(追記) ここでの環境変数の設定は、このシェル内でのみ使用できるものになります。新たなシェルを起動したり、コマンドを実行した場合にも継承はされない変数となるので注意が必要です。
$ export API_KEY=12345
永続的な環境変数の設定
ユーザーのホームディレクトリ("~")にある .bashrc
ファイルをnano
やvi
などのエディタで開きます。
ファイルの末尾にexport VARIABLE_NAME=value
という形で追記します。
【エディタ起動】
$ nano ~/.bashrc
【追記例】
export API_KEY=12345
または
API_KEY=12345 export API_KEY
ファイルを保存し、ターミナルやシェルで以下を実行し設定を反映します。
$ source ~/.bashrc
macOS、Linuxの環境変数の値の確認方法
特定の環境変数の値を確認するには、ターミナルを開きecho $VARIABLE_NAME
という形で実行を行います。
【実行例】
$ echo $API_KEY
全ての環境変数を表示するには、printenv
またはenv
コマンドを入力します。
macOS、Linuxの環境変数のクリアの方法
特定の環境変数をクリアするには、ターミナルを開きunsetコマンド
を使用して、unset VARIABLE_NAME
という形で実行を行います。
(追記) この方法では環境変数を実行しているシェル上からクリアを行うことができますが、永続化された環境変数の場合には、新たなシェルが開かれた場合には 環境変数が復活しているので注意が必要です。
ちなみにunsetコマンド
はシェル変数
を削除するコマンドにもなっています。
【実行例】
unset API_KEY
閑話休題
これで環境変数の復習ができました。長くなってしまったので、ここで一旦環境変数の復習までとして、次回にNode-RED
での環境変数の取得方法のメモとなります。
運用としては、環境変数は極力永続的に使うようにし、シェル変数は一時的にするなどで統一するのがいいのかもしれません。