復習:各OSの環境変数の使い方を学びなおす

環境変数とシェル変数の混同があったので少し修正いたしました(2024.02.05)

久々にNode-REDを復習してみようと考えて、Node-RED日本ユーザ会のホームページを眺めていました。

nodered.jp

そういえば、これまでに開発時に環境変数って使ったことあまりなかったなあと思い、どうやって使うんだっけ?という疑問がでてきたので、ちょっと調べてみたら、数種類の方法があったので学びなおすことにしました。

該当のページは以下となります。

nodered.jp

環境変数の重要性

ご存じの方はこんな内容は読まないかなと思いますが…

環境変数(かんきょうへんすう、英語: environment variable)はオペレーティングシステム (OS) が提供するデータ共有機能の一つ。OS上で動作するタスク(プロセス)がデータを共有するための仕組みである。特にタスクに対して外部からデータを与え、タスクの挙動・設定を変更するために用いる。(Wikipediaより)

ja.wikipedia.org

OSが提供するデータ共有機能で、コンピュータの黎明期からかなり使われている機能です。一般的な例としてはPATHなどを通すというのもPATHという環境変数にプログラムを実行するパスを事前登録するということで行っています。また最近はREST APIなどの認証データの保存などにも使用されています。

環境変数にしたほうが良い情報

環境変数を利用する主な利点は、セキュリティの向上と設定の柔軟性です。重要なデータをソースコードから分離することで、誤ってリポジトリにコミットしたり、不必要に広範囲に晒したりするリスクを減らすことができます。また、環境変数を通じてアプリケーションの設定を外部から調整できるため、異なる環境や条件下での運用が容易になります。

すべてではありませんが、以下のような情報は環境変数にしたほうがよさそうです。

  1. 機密情報:パスワード、APIキー、秘密鍵などの機密性の高い情報。これらをソースコードに直接記述すると、セキュリティリスクが高まります。
  2. 設定情報:データベースの接続設定、外部サービスのエンドポイント、アプリケーションのポート番号など、環境に依存する設定情報。
  3. 環境依存の変数: 開発、テスト、本番など異なる環境で異なる値を使用する変数:バッグモードの有効化、ログの詳細レベル、リソースの割り当て量など。
  4. アプリケーションの動作をカスタマイズするためのフラグ:特定の機能のオン/オフや、機能の挙動を変更するためのフラグ。
  5. 外部リソースへのパス:ファイルシステムのパスやURLなど、外部リソースへの参照。

自分は結構コードにそのまま記載していることがほとんどでした。ちょっと反省です。

ということで、環境変数の設定に関して各処理系でまとめ、次回にNode-REDでの使用方法をまとめます。

20240205追記

macOS、Linux (bash環境)に関してですが、下記表現の中で、一時的な環境変数と、シェル変数という言葉の混同がある部分があるようなので一部文面の修正を行っています。

シェル変数とは

現在実行しているシェルの中だけで有効な変数。

環境変数とは

新たなシェルを起動したり、コマンドを実行した場合にも継承される変数となります。 ただ、現在実行しているシェル内で環境変数の設定をした場合には(exportコマンドを使用した場合)環境変数になりますが、 そのシェル内でのみ使用できる環境変数となります。

また、シェル変数は環境変数へと昇格(よい表現かわからないですが)することもできます。exportコマンド以降にシェル変数の定義ができるためです。

なかなか、分かりにくい表現になっていますが、一時的な環境変数というのは使用できるけれども、運用上はあんまり使用しないかなと考えています。

環境変数の操作

Windowsの場合

Windows環境変数の設定方法

一時的な環境変数の設定

コマンドプロンプトから操作を行います。set VARIABLE_NAME=valueという形式で実行し、環境変数を設定します。

> set API_KEY=12345

永続的な環境変数の設定

以下の操作で新規設定・表示・変更もすべて行えます。

  1. 【スタート(田)】メニューから【設定】アイコンをクリックし、検索のテキストボックスに【環境変数】と入力
  2. 候補の【システムの環境変数の編集】を選択
  3. 表示されたダイアログの【環境変数】ボタンをクリック
  4. ダイアログ下部の【システムの環境変数】の【新規】ボタンをクリックし、変数名を入力して【OK】ボタンをクリックします。

Windows環境変数の値の確認方法

コマンドプロンプトを使用

コマンドプロンプトを開き、特定の環境変数を確認するにはecho %VARIABLE_NAME%と実行します。 Windowsでは%で変数名を囲む必要あるのが面倒ですね😐

> echo %API_KEY%

全ての環境変数を表示するには、setコマンドを入力します。

> set

システムのプロパティを使用

こちらは設定を行うのと同様に表示が行えます。

Windows環境変数のクリアの方法

一時的な環境変数の設定

一時的な環境変数コマンドプロンプトのセッションが終了すると自動的にクリアされます。 特定の環境変数を手動でクリアするには、set VARIABLE_NAME=と実行することで空の値にすることができます。

> set VARIABLE_NAME=

永続的な環境変数のクリア

こちらは設定を行うのと同様にクリアを行えます。


macOSLinux (bash環境)

macOSLinux環境変数の設定方法

一時的な環境変数の設定

ターミナルやシェルから設定を行います。 export VARIABLE_NAME=valueという形式で実行し、環境変数を設定します。

(追記) ここでの環境変数の設定は、このシェル内でのみ使用できるものになります。新たなシェルを起動したり、コマンドを実行した場合にも継承はされない変数となるので注意が必要です。

$ export API_KEY=12345

永続的な環境変数の設定

ユーザーのホームディレクトリ("~")にある .bashrcファイルをnanoviなどのエディタで開きます。 ファイルの末尾にexport VARIABLE_NAME=valueという形で追記します。

【エディタ起動】

$ nano ~/.bashrc

【追記例】

export API_KEY=12345

または

API_KEY=12345
export API_KEY

ファイルを保存し、ターミナルやシェルで以下を実行し設定を反映します。

$ source ~/.bashrc

macOSLinux環境変数の値の確認方法

特定の環境変数の値を確認するには、ターミナルを開きecho $VARIABLE_NAMEという形で実行を行います。

【実行例】

$ echo $API_KEY

全ての環境変数を表示するには、printenvまたはenvコマンドを入力します。

macOSLinux環境変数のクリアの方法

特定の環境変数をクリアするには、ターミナルを開きunsetコマンドを使用して、unset VARIABLE_NAMEという形で実行を行います。

(追記) この方法では環境変数を実行しているシェル上からクリアを行うことができますが、永続化された環境変数の場合には、新たなシェルが開かれた場合には 環境変数が復活しているので注意が必要です。

ちなみにunsetコマンドシェル変数を削除するコマンドにもなっています。

【実行例】

unset API_KEY

閑話休題

これで環境変数の復習ができました。長くなってしまったので、ここで一旦環境変数の復習までとして、次回にNode-REDでの環境変数の取得方法のメモとなります。

運用としては、環境変数は極力永続的に使うようにし、シェル変数は一時的にするなどで統一するのがいいのかもしれません。

/* -----codeの行番号----- */