🔥

【初心者向け】環境変数について

に公開

はじめに

この記事では、環境変数とその仕組みについて説明します。この話に関係する、「コマンドが見つかりません」といったエラーで初心者が環境構築の最中につまづいてしまうことはとても多いので、ぜひ参考にしてみてください。

この記事は、理解のし易さや文章の平易さを重視しているため、不適当または誤解を招く表現も含まれるかもしれません。疑問点や改善点があれば遠慮なく連絡していただけると幸いです。

この記事では、WindowsとMac/Linuxを分けて記載しています。ですが、特にWindowsユーザはMac/Linuxの環境を使うことになる場合は多いので、Mac/Linuxの項目も一読しておくことをお勧めします。

環境変数って何? (Environment Variables)

環境変数とは、OS側に保存され、さまざまなプログラムから読み取りを行うことができる値(変数)のことです。環境変数は名前と値がペアになって保存されます。

PATH=/usr/local/bin
AUTH_TOKEN=PASSWORD

上記の例では、PATHという名前に/usr/local/binが、AUTH_TOKENという名前にPASSWORDが紐づきます。

多くの場合、

  • 使用したいプログラムが格納されている場所
  • 特定のサービスとの連携のために使うトークン(認証情報)
    などを保存するために用いられます。

環境変数を用いることで、コードからは環境変数の名前を参照すればよいため、パスワードなどの重要な情報をコードに直接埋め込む必要がなくなります。さらに、ユーザが自分の環境に合わせて自由に値を設定できるようになります。

Tips: 「.env」という名称のファイルを読み込む機能があるフレームワークやライブラリもあります。このファイルに
NAME=VALUE
の形で環境変数を設定することで、そのフォルダ内でのみ有効な環境変数のように扱うことができるため、多くの開発環境で使われています。

例えば、Pythonなどをインストールした後、インストールしたはずなのに

(Mac/Linux)
python: Command not found.

(Windows)
'python'は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。

などのエラーが出て困った経験はありませんか?
多くのOS上で、ターミナルからコマンドを実行するときにそのコマンドの本体を保存してあるディレクトリのパスが環境変数に保存されています。その環境変数は慣例的にPath(Mac/LinuxではPATH)という名前で、ターミナルから実行できるいわゆる標準的なコマンド、例えば

cd Microsoft
mkdir my-data

cdとmkdirがPATHの示す場所に保存されているため、これらのコマンドが実行できます。

はすべてこのPathが示す場所に保存されています。Pathが示す場所にある実行ファイルは、その名称を打ち込むだけで実行できますが、それ以外の実行ファイルは絶対パスを指定しなければいけません。これだけでは難しいと思うので、Mac/Linuxでの簡単な例を以下に示します。

PATH=/usr/bin:/usr/local/bin

この場合、コロン(:)で区切って二つのディレクトリが指定されています。
/usr/bin か、 /usr/local/bin の直下に保存されたコマンドは、そのコマンドの名称だけで実行できるということです。また、例えば/usr の直下に実行ファイル 「python」が存在したとしても、PATHの場所には含まれていないので、絶対パス(/usr/python)を打ち込まなければエラーが出てしまいます。

Tips: パスを通すという表現は、環境変数Pathに実行ファイルの場所を記述しておくことを指します。

Windows編

Windows編

Windowsの検索機能で「環境」や「変数」と検索すると、
のように表示されるので、一番上の「環境変数を編集」をクリックします。すると、

のように、変数名と値がセットになって表示されます。
ここで、ユーザー環境変数からPathをクリックすると、

のように、Pathの内容が表示されます。Pythonを実行する例でエラーが出た場合、例えばここに

C:¥Users¥Takoyarou¥AppData¥Local¥Programs¥Python¥Python37-32

を追記する必要があります。この場合、実行ファイル

C:¥Users¥Takoyarou¥AppData¥Local¥Programs¥Python¥Python37-32¥python.exe

が存在するということです。
またコマンドプロンプトからは

%Path%

のように値を取得することができます。つまり、環境変数 MY_GITHUB_PASSWORD

MY_GITHUB_PASSWORD=takotakoika

が存在するとき、

%MY_GITHUB_PASSWORD%

は、takotakoikaに置き換えられます。

Powershellでは、環境変数は
$Env:NAME
により参照します。

Mac/Linux編
export NAME=VALUE

Mac/Linuxでは、上記のコマンドを実行することで、そのターミナルを閉じるまでその環境変数が保存されます。例えば、

export MY_GITHUB_PASSWORD=takotakoika

というコマンドを実行したとき、MY_GITHUB_PASSWORDという環境変数の値はtakotakoikaです。また、Windowsと異なり

$MY_GITHUB_PASSWORD

が環境変数の値に置き換えられます。

先述の通り、ターミナルを閉じると環境変数が消去されてしまうので、ターミナルを立ち上げるたびに環境変数を書き込みなおす必要があります。例えば多くのMac/Linuxユーザが使っているシェルであるBashではホームディレクトリ直下の以下のファイルに書き込まれたコマンドが毎回実行されます。それぞれ実行されるタイミングは異なりますが、ここでは扱いません。

~/.bash_profile
~/.bashrc

つまり、上記のいずれかのファイルに、設定しておきたい環境変数を

export NAME=VALUE

の形で書き込んでおく必要があります。

おわりに

Zennに初めて投稿した記事なので至らない点も多くあると思います。不明点がある方、誤った内容にお気づきになった方はぜひご連絡ください!
プログラミングはハマってしまえばとても楽しい趣味・業務になると思います。興味が続く限り、根気よくトライしてみてほしいです。

Discussion