学んだことのログ

プログラミングとかものを作るのが好きです

環境変数とかPATHを通すとかJAVA_HOMEとか

経緯

環境構築の手順書でよく「環境変数を設定する」とか「JAVA_HOMEに以下を設定」みたいな記述があるけどいまいち内容を理解せず実施していたので、実際何をやってるんだっけっていうのを整理してみた。

環境変数とは

OSが使う変数。PCの環境周りについて色々定義された変数。

例えばWindowsだとコマンドプロンプトでsetコマンドを実行すると、環境変数とその変数に何が設定されているかが一覧でぶわーっと表示される。

 ・HOMEDRIVE=C:

 ・JAVA_HOME=C:\Program Files\AdoptOpenJDK\jdk-11.0.7.10-hotspot

 ・USERNAME=(ユーザ名)

的な感じで、そのPCが使ったり持ったりしてるパスとか設定とかを変数として定義している。

 ちなみにWindows環境変数には

①システム環境変数

②ユーザ環境変数

の2種類がある。

システム環境変数

さっき環境変数はOSが使う・持ってる環境変数と言いましたが、基本的にOSが使うものは「システム環境変数」になる。

これはどのユーザであっても参照することが可能な環境変数だ。しかし、この環境変数を何かしら編集しようとする場合はWindowsの管理者権限が必要になる。

ユーザ環境変数

ユーザ環境変数Windowsにログインしたユーザが使ったり持ったりする変数で、これはこのログインユーザのみが参照・編集が可能である。他のユーザは参照すらできない。

「PATHを通す」とは

ざっくり言うと、 PCに実行プログラムの場所を教えて、プログラム名だけで実行できるようにすること。

「PATH」とは上記で説明した環境変数の一つで、フォルダのファイルパスが列挙された環境変数で、PCはコマンドから実行可能ファイルのファイル名が入力された場合に、

現在のディレクトリ内⇒環境変数 PATH に設定されたディレクトリ内、という順で合致する順次実行可能ファイルを探しに行く。

・Path=C:\Program Files\AdoptOpenJDK\jdk-11.0.7.10-hotspot\bin;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32…

コマンドで実行プログラム名のみを記述して実行すると、PCはこのPATHという環境変数の値に;区切りで設定されたフォルダを先頭から見に行き、実行プログラムが存在するかを確認していく。

・C:\Program Files\AdoptOpenJDK\jdk-11.0.7.10-hotspot\binを確認

・C:\WINDOWS\system32を確認

・C:\WINDOWSを確認…

そのため、PATHを通すというのは、この環境変数に実行プログラムのフォルダを追加してあげることで、実行プログラム名だけでプログラムを実行できるようにすることである。

JAVA_HOMEとは

こちらも「PATH」と同じく「JAVA_HOME」という環境変数。PATHが実行可能ファイルを探しに行く先だとすると、JAVA_HOMEはJDKがインストールされているディレクトリが指定されている。そのためPATHの場合は実行ファイルが置かれている。

・Path = C:\Program Files\AdoptOpenJDK\jdk-11.0.7.10-hotspot\bin

を指定するけど、JAVA_HOMEはJDKのインストールされたディレクトリなので

JAVA_HOME = C:\Program Files\AdoptOpenJDK\jdk-11.0.7.10-hotspot

を指定する。

なんでPathとJAVA_HOME両方設定する必要があるの?

これについては、アプリケーションによってPathを参照するところもあればJAVA_HOMEを参照するところもあるため。

Eclipseやら何やらのJavaを使用するアプリケーションがJavaがどこにインストールされているのかを探すときに、このJAVA_HOMEという環境変数に指定されたディレクトリを見に行くため、設定をしておく必要がある。

じゃあ、JAVA_HOMEだけでいいじゃんと思ったりもするが、PATH に設定されたディレクトリに含まれるプログラムは、どのディレクトリからも参照することができるため、JAVA_HOMEを指定しないけどJavaを使用するアプリケーションなどから呼び出せるようPathにも設定をしておく必要がある。