30代後半、未経験からIT業界のエンジニア転職へ挑戦している、kobakichiです。
今回は環境変数について、Envader
を利用して学習したので、自分の中で理解した事の振り返りになります。
良く環境変数は聞く事がありましたが、きちんと意味を理解していなかったので、今回記事にまとめながらより理解を深めていきます。
使用した環境
オンラインで環境構築が不要、すぐにLinux環境が使えて実践する事ができるオンライン学習サービスEnvader
を利用して学習を進めました。
Envader
について気になる方は、下記にリンクを貼っておきますので参考までにどうぞ。
環境変数(Environment Variable)とは
まず環境変数とは何なのか?について。
OSが動いているときに使える変数全てのプログラムから参照できる変数OSが提供するデータ共有機能の一つ悪用されたくない値を入れておける、比較的安全に使用できる変数
このような感じでしょうか?
簡単に言うと環境変数とは、プログラムの挙動を調整するためのパラメータの一種であって、プロセス毎に保持・管理するものです。
@angel_p_57さんよりご指摘いただきました。
私自身ふわっとした理解で環境変数を表現してしまいましたが、超概要的に表現すると環境変数とはプログラムの挙動を調整するためのパラメータの一種で、プロセス毎に保持・管理するものなんだそうです。
まだまだ参考記事の内容をきちんと理解できているわけではないのですが、かなり詳細に解説されていますので、ぜひご一読を。。
ご指摘ありがとうございました。
環境変数の使われ方
環境変数の存在は分かりました。
では、環境変数は実際にはどんな使われ方をしているのか?を考えてみます。
- パスを通す場面
- システムやアプリケーションのコードには直接書くことを推奨されない変数を使いたい場面
- 頻繁に利用する値を変数に保存しておきたいとき
- Linuxで使用する言語(LANG)を変更したいとき
ここで注目したいのが、システムやアプリケーションのコードには直接書くことを推奨されない変数を使いたい場面
です。
セキュリティに関しても環境変数が一役買ってくれているんですね!
以下Envaderより引用
特にシステムやアプリケーションのコードには直接書くことが推奨されない変数を、環境変数を用いて設定することはセキュアなものを作る際に欠かせないことです。例えば、GitHub上で世界中に自分の書いたコードを公開したい時、そのコードの中に直接データベースのユーザ名やパスワードを書いてしまっては、それが悪用されてしまう危険性があります。こういった、他人に知られてしまうと良くない変数は直接コード上で値を書かずに、環境変数を作成して参照するようにしましょう。
なるほど。
ユーザ名やパスワードを環境変数に入れておく事で、他人に知られずに大切な情報を守る事ができるという事何ですね〜。
今まで環境変数はあまり触れた事がなく、意識した事がなかったのですが、今後アプリケーションを作成するときには意識して環境変数を設定するようにしようと思います。
環境変数を表示させてみる
では、実際にどんな環境変数があるのかを表示してみましょう。
設定してある環境変数の一覧を表示するにはenv
コマンドを使います。
envader@172-19-1-2:~$ env
#以下一部抜粋
LANG=ja_JP.UTF-8
VISIBLE=now
USER=envader
PWD=/home/envader
HOME=/home/envader
ちなみに、export
コマンドを引数なしで実行しても環境変数の一覧が表示できます。
envader@172-19-1-2:~$ export
declare -x HOME="/home/envader"
declare -x LANG="ja_JP.UTF-8"
declare -x LOGNAME="envader"
wikipediaさんに環境変数についての例が載っていたので、共有させていただきます。
環境変数の例
EDITOR: エディタのコマンド名を指定する。エディタを起動するプログラム(mail、lessなど)で参照される。
HOME: ホームディレクトリを指定する。cdコマンドで引数を指定しない場合、このディレクトリに移動する。例: /home/$USER
LANG: ロケールを指定する。日本語ロケールの場合はjaまたはja_JPなどを指定する。setlocale()関数の呼び出しにより有効となる。
LESSCHARSET: lessの入力・出力文字コードを指定する。
PATH: コマンド検索パスをコロンで区切って指定する。シェルが参照する。
SHELL: 現在のシェルの起動パスが設定される。シェルを確認するのに利用できる。例: /bin/sh
環境変数の名前に応じて、それぞれ意味があったんですね。
この変数名にはこの機能を割り当てる。みたいな感じですね。
環境変数を新しく作成する
何か新しく環境変数を作成したい場合には、export
コマンドを使って作成します。
export 環境変数名=値
ちなみに環境変数名は大文字でも小文字でもOK大丈夫です。
ただ、大文字のアルファベットを利用するのが通例となっているためみんな大文字で記述されているようです。
環境変数を削除する
環境変数を削除するにはunset
コマンドを使用します。
unset 削除したい環境変数名
これで環境変数の削除ができます。
実際に環境変数の作成と削除をやってみます。
#exportコマンドで環境変数NAMEを作成!
envader@172-19-1-2:~$ export NAME=kobakichi
#環境変数が設定できたか確認!
envader@172-19-1-2:~$ echo $NAME
kobakichi
#できた!
#unsetコマンドで環境変数NAMEを削除!
envader@172-19-1-2:~$ unset NAME
#再度確認してみる!
envader@172-19-1-2:~$ echo $NAME
#上が空欄なので削除できている!
envader@172-19-1-2:~$
注意点
環境変数を設定する際は、export
コマンドを使用して設定しますが、これだけだと一時的に設定は反映されますが、再度ターミナルを起動したときには設定がリセットされてしまいます。
これを防ぐには、設定ファイルに設定を書き込み、ターミナルを起動した時点で読み込まれるようにしなければなりませんので、注意しましょう。
具体例を出すと、.bashrc
または.zshrc
に書き込みます。
export NAME=kobakichi
そして、もう一つ忘れてはいけないのが、.bashrc
を書き込んだ後の設定ファイルの再読み込みです。
これを忘れてしまうと、せっかく内容を記述して保存してもすぐに設定が反映されません。
source ~/.bashrc
これで設定が即座に反映され、設定した環境変数を利用する事ができ、ターミナルを立ち上げるごとに設定が読み込まれるようになります。
まとめ
- 環境変数とはプログラムの挙動を調整するためのパラメータの一種であって、プロセス毎に保持・管理するもの。
- 環境変数に値を設定しておくことで、他のプロセスでも使い回す事ができて便利。
- 悪用されたくない値を入れておける、セキュリティにも一役買ってくれる存在。
今後エンジニアとして活動していく中で、少しづつ深く理解できるようにしていきます。
最後まで読んでいただきありがとうございました。