支援対象地域:札幌、仙台、関東、愛知、関西、広島、福岡

  • TOP
  •   
  • コラム
  •   
  • 環境変数とは何か?各OSのPathの

はじめに

普段パソコンを使っている中で「環境変数」という言葉を聞いたことがある人はいるでしょうか。パソコンの利用目的がインターネット接続や事務作業だけに限定される場合は、聞いたことがない方がいても不思議ではありません。しかし環境変数は、パソコン・サーバーといったコンピュータでは必要不可欠な仕組みであり、これを詳しく知っておくことは、コンピュータを便利に利用できるだけではなく、サーバー等の管理が一人で可能となるために重要な要素の一つと言えます。この記事では、環境変数がどのような役割を持つ変数であるか、環境変数における「Path」とは何か、また各OSごとのPathの設定方法について紹介していきます。

これからサーバーエンジニアやインフラエンジニアを目指している方はもちろん、各プログラミング言語の開発環境を構築する際に設定が必要となる場合もあるので、プログラマーを目指している方もぜひご覧ください。なお、環境変数の設定方法のみ知りたい方は、OSごとに分けて説明している項目があるのでそちらまで読み飛ばしてください。

コンピュータに存在する「環境変数」とは?

初めて触れる方は難しい言葉に思えるかもしれませんが、OSや利用するソフトウェアに参照して欲しい各パラメータ(設定値)をあらかじめ記述しておく部分のことを環境変数と言います。SNSのプロフィールのようなものをイメージしていただいても良いかもしれません。流れてくる投稿内容を見てその人のひととなりを詳しく知りたくなり、プロフィールにアクセスすることがあると思います。プロフィールにはユーザーがあらかじめ様々な情報を入力しており、閲覧する側は、出身地が知りたい、年齢が知りたい、所属企業を知りたいという目的に応じて該当欄を見てその情報を把握することができます。そのユーザーとコンタクトを取る場合は、プロフィールで確認した情報を前提とした上でのコミュニケーションを行うことになるでしょう。ここまではやや抽象的ではありますが、初期段階として、コンピュータにおける環境変数もこれと同じ役割があると考えてもらって問題ありません。

Linuxの環境変数の項目としては、HOME、HOSTNAME、HISTSIZE、HISTFIlE、HISTFILESIZE、LANG、LOGNAME、USER、UID、PATH、PS1、PS2、PWD、EDITOR、DISPLAY等があり、このうち「HOME」「USER」「UID」「PATH」「PWD」という項目には、OS起動時にすでにデフォルト値が設定されています。なお「HOME」はホームディレクトリ 、「USER」はユーザー名、「UID」はユーザーID、「PATH」はプログラムのある場所を指定するパス、「PWD」はカレントディレクトリとなる場所を指定するパスで、これらは基本項目として覚えておくと便利です。また、Linuxには「シェル変数」というものがあり、この変数は実行しているシェル内でしか参照できない変数となっています。なお、シェルとはOSの一部を構成しているソフトウェアであり、基本的にOS内には様々なシェルが存在しています。Aのシェルで利用したシェル変数と全く同じパラメータをBのシェルで利用したいとしても、Aのシェル変数を参照できないため再定義が必要となります。このように複数のシェルで共通して参照したいパラメータがある場合に、環境変数を利用することとなります。

また、Windowsにはシステム全体に反映する環境変数と、ユーザーごとに設定できる環境変数があります。システム環境変数(systemroot)に設定されているパラーメーターはいずれのユーザーでログインした場合も参照可能であり、ユーザー環境変数(userprofile)に設定したパラメーターは、特定のユーザーでログインした場合のみ参照可能という仕様です。Windowsのシステム環境変数においてデフォルトで設定されている項目は、ComSpec、NUMBER_OF_PROCESSORS、OS、Path、PathEXT、PROCESSOR_ARCHITECTURE、PROCESSOR_IDENTIFIER、PROCESSOR_LEVEL、PROCESSOR_REVISION、PSModulePath、TEMP、TMP、USERNAME、windir等であり、Linuxの場合と大差はありません。なお、ユーザー環境変数にデフォルトで設定されている項目は、TEMP、TMPの2種類です。

環境変数とセキュリティ

前述したように、環境変数のパラメータを見ると、そのコンピュータの管理者やOSの設定内容等の重要な情報を知ることが可能となっています。そのため、無闇に一般ユーザにアクセスされ、編集されるべきではなく、決して悪意のある第三者に参照されるようなことがあってはなりません。常時、厳重なセキュリティ体制の中で管理される必要があります。

セキュリティソフト等のセキュリティ関連製品を提供している「トレンドマイクロ」のサイトには、環境変数を悪用したサイバー犯罪の事例について紹介されている記事がありました。その中では、機密情報に該当する内容は環境変数に保持させるべきではないとの警告もされていました。機密情報の理想的な管理方法として、「暗号化されたストレージ」「安全なチャンネルを使用した転送」「定期的な更新」「短期間の使用」という4点が挙げられており、仮に環境変数に機密情報を保持させてしまうと、4つ目の「短期間の使用」が実現できない状況となります。機密情報がメモリに保存されるのはあくまで一時的になるようにし、使用後は即時削除されるのが理想とされています。

これまでにシステムの運用、サーバー構築等を行ったことがある方であれば、root権限を持ったユーザー情報がいかに厳重に管理されるべきかがイメージできることでしょう。root権限を持ったユーザーは、そのシステムのあらゆる操作が可能となるため、万が一悪意のある第三者に取得されてしまった場合は、システムを乗っ取られて悪用されたり、顧客データの流出をされたりといった危険性が出てきます。たとえroot権限ではなくても、機密情報の一部が漏れてしまっては、セキュリティ対策ではもはや手遅れという状況も発生しかねません。

また、近年は、サーバーを自社施設の管理下に置くオンプレミスではなく、他社のクラウドサービスを使ってシステム運用を行う企業も増えてきています。同じくトレンドマイクロによると、一部クラウドサービスにおいても環境変数が悪用される状態にあることが報告されていました。確認できた実例は、Pythonライブラリのコードを経由して環境変数にアクセスされていたというものです。このように環境変数は、その役割を十分に理解し、機密情報については環境変数には保持させず、別途、機密情報を管理する専用ツールを利用するということ等を心がけて慎重に扱う必要があります。

Pathを設定する意味

「PATH」は、プログラムのある場所を指定するパスであることを前述しました。しかし、プログラムの場所が設定されているとしても、それによって実際にどんなメリットがあるのかは紹介していませんでした。例えば「Java」というプログラミング言語の開発環境をパソコンに構築するとします。Javaの開発環境を構築する際は、JDKという開発に必要な一連のツールが全て含まれた開発キットをインストールします。そして多くの参考書、手順書には、この後に環境変数内のPathの設定と、「JAVA_HOME」という変数の追加・設定について示されています。Pathには「%JAVA_HOME%bin」というパラメータを設定し、「JAVA_HOME」には、実際にJDKをインストールしたパソコン内のディレクトリを指定します。以上の設定を環境変数に行うことで、Javaの実行時にコマンド入力する情報量を少なくすることが可能となります。

一例として、Javaのバージョンを確認する場合を見ていきます。環境変数の設定をしていると「javac -version」というコマンドだけで実行可能です。対して設定していない場合は、「C:\Program Files\Java\jdk」というように、JDKのインストール先を毎回フルパスで指定した上で「javac -version」を実行することとなります。Javaにかかわらず他のプログラミング言語やソフトウェアでも、あらかじめ環境変数を設定しておくことで毎回フルパスを設定する必要がなくなるので、特にプログラマーにメリットがある設定内容と言えます。

なお、Pathは複数設定することが可能です。WindowsOSの場合は「%SystemRoot%\system32;」「%SystemRoot%;」等、デフォルトで設定されているPathがあるので、それらは上書きせず、プログラムごとのパラメータを追記するのが基本となることを覚えておきましょう。また、Pathを設定することを「Pathを通す」と表現する場合もあるので、ぜひ合わせて覚えておいてください。実際の設定方法については、次の項目で紹介します。

WindwosでのPathの設定方法

今回はWindows10での設定方法について紹介します。OSのバージョンによってメニュー名が多少異なる場合があるので、あらかじめご注意ください。Windows10で環境変数の設定画面を開く場合は、「コントロールパネル>システム>システムの詳細設定」の順で進みます。「詳細設定」タブの中の「環境変数」をクリックすると、ユーザーとシステムで上下に分けられた環境変数の設定画面が開きます。Pathはすでに存在する環境変数なので、一覧の中から探して選択したら「編集」をクリックします。「環境変数の編集」という画面が開いたら「新規」をクリックし、設定したい絶対パスを入力します。入力し終わったら「OK」をクリックして完了となります。なお、既存パスの「編集」や「削除」をしてしまうと意図せず別のプログラムが動作不可となってしまう可能性があるので操作には十分ご注意ください。また「環境変数の編集」画面には、フォルダツリーを表示させて指定したいパスを選択できる「参照」、パスの優先度を変更できる「上へ」「下へ」というボタンもあるので必要に応じて利用してください。

Windowsにおいて、設定した環境変数を反映させるための再起動は不要です。しかし、その時起動しているアプリに環境変数を反映させたい場合は、一度アプリを再起動する必要があります。また、WindowsのCUIツールである「コマンドプロンプト」を利用してコマンド操作での環境変数の設定も可能ですが、今回は省略します。

MacOSでのPathの設定方法

MacOSはGUIでの操作が可能ですが、環境変数を設定する場合は「ターミナル」でのコマンド操作が必要となります。なお、Macではかつてシェルの種類が「bash」でしたが、「Catalina」以降のOSバージョンにおける標準シェルは「zsh」に変更されています。OSのバージョンによってどちらが利用されているかの判断はできますが、念のため種類を確認したいという場合はターミナルで「echo $SHELL」を実行しましょう。zshの場合は「/bin/zsh」、bashの場合は「/bin/bash」と表示されます。

zshで環境変数を編集する場合は、Homeディレクトリ にある「.zshrc(非表示ファイル)」にアクセスする必要があります。そのため、ターミナルから編集する際は「echo 'export NAME= "yamada"' >> ./.zshrc」というようなコマンドを実行しましょう。Viコマンドでファイルを直接編集する場合は「NAME=”yamada″」とだけ記述します。同じくこの方法でPathを設定するには「echo 'export PATH="$PATH:(通したいパス)"' >> ./.zshrc」というコマンドを実行します。Viコマンドでファイルを直接編集する場合は「export PATH=”$PATH:(通したいパス)”」と記述します。なお、bashで編集する場合は「.bash_profile」にアクセスすることとなりますが、記述内容はzshの際と同様なので省略します。もしパスが正しく設定されているかを後から確認したい場合は「echo $PATH」を実行しましょう。

Linux/UNIXでのPathの設定方法

Linuxでは、環境変数の内容を、設定したいファイルに直接記述することになります。Linuxにはシェル変数というものもあることを前述しましたが、先にシェル変数の定義方法から紹介します。例えばシェル変数「NAME」に対して、「yamada」というパラメータを定義したい場合は「NAME=yamada」とします。このシェル変数の状態のままでは、適用されるのが実行中のシェル内のみとなります。これを、他のシェルでも適用可能な環境変数とするためには「export」を利用します。記述内容は以下となります。

NAME=yamada
export NAME

以下のように1行にまとめて記述することも可能です。

export NAME=yamada

なお、環境変数として設定した変数のパラメータを別のプロセスで変更したとしても、参照元の環境変数のパラメータに反映されることはありません。また、プログラミングをしていると可読性等の理由から「NAME = yamada」というように「=」の前後につい半角スペースを入れがちですが、変数を定義する際に半角スペースを入れてしまうとエラーとなるのでご注意ください。

シェルファイルには様々な種類があり、特に有名なものに「bash」があります。「bash」の中にもさらに様々なファイルがあり、例えばログイン時のシェルとしては「/etc/profile」「~/.bash_profile」「~/.bash_login」「~/.profile」がOS内に存在しています。これらのファイルは読み込まれる順番が決まっており、ログインが実施された場合は「/etc/profile」から順番に読み込まれることとなります。

Linuxでは、変数がこれらbashファイル等に設定されていて、後から設定することも可能です。設定した特定の変数のパラメータを確認したい場合は、「echo」コマンドを利用しましょう。変数の前に「$」を付けて、「echo $NAME」を実行します。また、環境変数に対してのみ有効なコマンドとして「printenv」があり、これを引数なしで実行すると、環境変数の一覧を確認できます。各変数に設定されているパラメータを確認したい場合は、「$」なしで「printenv NAME」のように入力します。「env」も同様に環境変数の一覧が確認できます。環境変数、シェル変数の両方の一覧を確認したい場合は「set」を実行します。

Pathの設定は「~/.profile」に対して行うこととなりますが、一度「~/.profile」に設定してしまえば、毎回環境変数を設定する必要がなくなります。例えば「/sample/aa」に対してパスを通したい場合は「PATH=$PATH:/sample/aa」という記述を行います。追加した後は、ログインし直すことで設定値が反映します。「source ~/.profile」というコマンドを実行することでも反映可能なので合わせて覚えておきましょう。

まとめ

今回の記事を読んでいただいたことで、環境変数はコンピュータにおける重要な要素であるだけではなく、使い方を誤るとセキュリティリスクが高い仕組みということもわかっていただけたことでしょう。しかし、サーバーを管理する立場となった場合は避けて通れるものではなく、今回取り上げたPathは、プログラミングの効率的な開発環境を構築する上でも設定が必要な部分となります。今回の記事をきっかけに環境変数を正しく理解し、操作をする際は慎重に行うということを忘れずにいましょう。もし仕組みについて忘れてしまい、操作に不安が出てきた場合は、ぜひこの記事を振り返っていただけると幸いです。