環境変数とは?
環境変数とは、OSがアプリケーションなどのタスクに対して、変数名とそれに結び付けられた変数値を与える、データ共有機能の中でも最も基本的なものです。WindowsになってGUI化し、アプリケーションもインストーラーによって自動的に導入されるようになって、ユーザーが環境変数というものを手動で編集する機会が減り、存在自体を知らない人も増えてきているようです。しかし、実は現在でも環境変数の重要性に変わりはありません。特に、プログラミング言語を学びたい人にとっては、必須の知識とも言えます。
このノートでは、環境変数一つでここまで記した書籍やサイトは恐らく存在しないであろうというくらい、細かく解説をしています。そのため文章が多くなっていますが、環境変数を基礎から知りたい方は面倒がらずにお付き合い頂きたく思います。
最もポピュラーな環境変数「PATH」
例えば、フリーウェアのコンパイラツール群として有名なGNUコンパイラコレクション(GCC)をインストールしたとします(WindowsへのGCCの導入は様々な方法がありますが、ここでは詳しく触れません)。ここでは、MinGWという比較的簡単に導入できるWindowsツールチェインをインストールしたとします。インストールが終わり、勇んでサンプルプログラムをコンパイルしようしました。コンパイルにはgccというコマンドを用います。それを入力してみたのですが、次のような画面が。
コンパイルできませんでした。なぜでしょう?それは、コマンドプロンプトがgccというコマンドの在り処がわからないからです。
コンパイルWindowsでは、コマンドが実行されたときに、まずカレントフォルダー(現在選択されているフォルダー)にそのコマンドがあるかを探し、そこに無ければPATHという環境変数に設定されたフォルダーを探します。それでも無ければ、上記のような画面になってしまうのです。
これより、このPATHを設定するための手順を例にとって、環境変数の操作を紹介します。
環境変数の設定方法
環境変数名について
Windowsでは、環境変数名の大文字・小文字を区別しません。PATH、path、Pathなどは全て同一の環境変数として扱われます。本項では、PATHという全て大文字による記述に統一しています。
なお、Linuxなど他のOSでは、大文字・小文字が異なっただけで別の変数扱いになってしまうものもあります。将来他のOSを扱いたいと思ったときに戸惑わないよう、これはWindows独自の仕様であることを抑えておきましょう。
拡張子は表示する設定にしておこう
Windowsは最初の普及バージョンとなった95以来、「登録されている拡張子は表示しない」というオプションが有効の状態が標準となっています。これは、拡張子とそれを実行するアプリケーションが結び付けられているものについては、エクスプローラー上ではその拡張子を表示しないというものです。当時のMac OSを強く意識して導入された機能と言われていますが、ファイルを探す上では迷惑千万です。「xxxというファイルはあったがxxx.exeというファイルは見つからない」という質問も度々知恵袋に寄せられています。実は、そのxxxが目的のファイルなのに。
「登録されている拡張子は表示しない」を無効にするためには、コントロールパネルやエクスプローラーから「フォルダーオプション」という設定を開き、下図の赤枠の箇所のチェックを外します。
また、Windows 8以降ではエクスプローラーのメニューから「表示」を選択し、表示されたリボンから「ファイル拡張子」という項目にチェックを入れることで拡張子を表示させることができます(こちらは逆にチェックを入れる必要があることに注意)。
実行したいコマンドの所在を確認しよう
PATHを設定するにあたって、まず第一にすべきは実行したいコマンドの所在を確認するということです。これを怠り、参考にしたサイトや書籍の記述を丸写しして、存在しないフォルダーを設定しても、決して意図した結果は得られません。知恵袋にPATHの設定がうまくできないという質問が度々寄せられていますが、全てはコマンドが置かれているフォルダーの所在を自分自身できちんと把握しているかにかかっているのです。
ここでは、前出のgccコマンドの所在を確認してみましょう。MinGWはデフォルトではC:\MinGWという場所にインストールされるようになっています。さらにその下にいくつかのフォルダーが展開され、その中にbinというフォルダーがあります。ここをエクスプローラーで開いてみます。
このように、gcc.exeを始めとするコマンドファイルが大量に格納されています。この場所のフルパス名をPATHに加える必要があるのです。フルパスとは、「C:\Windows\System32」などのように、ドライブレターおよびフォルダー名の階層ごとに区切り記号を挟んだ文字列全体のことを指します。
ところで、エクスプローラーのアドレスバーは、Windows Vistaから表示形式が変わり、階層ごとに同層のフォルダーが選択できるプルダウンメニューが付くようになりました。しかし、この状態でアドレスバーの左端にあるフォルダーアイコンをクリックすると、フルパス表示に変化します。
これをクリップボードにコピーして、PATHの設定時にペーストすることで、確実な設定を行うことができます。
ポイント
- フォルダーの区切り記号は、日本語Windowsの環境では円記号(\)が用いられています。しかし、この記号はコンピューターの歴史的な経緯によって、他の言語のシステムでは別の文字に見えるという問題を抱えています。例えば、英語のシステムではスラッシュを逆向きにしたバックスラッシュ(\の半角文字)という文字に見えます。一部のAndroid端末などのブラウザでは、円記号で記述したページが表示上ではバックスラッシュに置き換えられてしまう現象が見られますが、これはその表示に用いられているフォントでは、円記号に当たる文字コードにバックスラッシュが割り当てられているためです。
- 一方で、このままでは本来の円記号として表示させたい用途には都合が悪いため、近年定められたUnicodeという文字コード規格では、円記号専用に別の文字コードが割り当てられました。これが更なる混乱を招く一因にもなっており、PATHの設定にその新たなコードによる円記号を用いてしまったために正しく動作しなかったという事例も散見されます。
- ウェブサイト製作者が敢えてその新しいコードによる円記号でページを記述していたり、ウェブサーバーが自動的に変換していることもあるため、ウェブサイトから文字列をコピーペーストしたことによって設定間違いが発生したというケースもあります。
- PATHを正しく設定するためには、こうした事情をきちんと理解しておく必要もあるでしょう。
環境変数の設定画面を表示させる
まずは環境変数の設定画面を表示させてみます。ここでは、Windows 8.1での作業例を記します。
まず、コントロールパネルを開き、 「ユーザーアカウントとファミリーセーフティ」を選びます。なお、Windows VistaおよびWindows 7では、項目名が「ユーザーアカウントと家族のための安全設定」となっています。
ここで「おや?」と思われる方も多いでしょう。多くの書籍やサイトでは、環境変数の設定手順として別のページからの操作を紹介していることでしょう。理由は後述しますので、ここではひとまずこのまま読み進めてください。
次に「ユーザーアカウント」を選択します。
これで自分のユーザーアカウントの管理画面に移ります。その左側に「環境変数の設定」という項目があるにで、これを選択します。
これで、環境変数の設定画面が表示されます。
このページには、「ユーザー環境変数」と「システム環境変数」という2つの項目があります。ユーザー環境変数とは、現在ログインしているユーザーにのみ適用される環境変数、「システム環境変数」とは、このシステム上の全てのユーザーに適用される環境変数です。
ところで、上図では「システム環境変数」側のボタンがグレーアウトしています。つまりシステム環境変数を操作することができません。これは「不便」ではなく「安全性」と考えるべきです。大半の用途では、システム環境変数を操作しなければならない必要性はほとんどありません。むしろ、十分な理解のないままシステム環境変数を操作しようとして、OSの動作上重要な変数の設定を壊してしまうというトラブルをしばしば耳にします。ユーザーアカウントのページから操作を始める習慣を付けることで、そのような深刻な事態を防ぐことができるのです。
PATHを設定する
ここでは、ユーザー環境変数にPATHを新たに追加してみます。なお、お使いの環境によっては、インストールしたアプリケーションによってすでにPATHという環境変数が存在しているかもしれません。その場合は、その設定を消さないように注意し、以降で説明するすでに存在する環境変数の編集操作を参照してください。
まず、ユーザー環境変数の枠内にある「新規」ボタンをクリックします。すると、「新しいユーザー変数」というダイアログが表示されます。ここで、変数名に「PATH」、 変数値に上記で記した通り「C:\MinGW\bin」と入力し、OKボタンを押します。
これにより、ユーザー環境変数の欄にPATHという変数が追加されたことが確認できます。
ところで、「新規」ボタンを押して開かれた「新しいユーザー変数」のダイアログで、すでに存在する変数名を設定してOKボタンを押すと、何の警告もなく古い設定に上書きをしてしまうという恐ろしい仕様になっています。そのようなときは、環境変数のダイアログに戻ったときにキャンセルボタンを押せば、それまでの設定が全て破棄されて最初の状態に戻るので、慌ててはいけません。
変更された環境変数は、設定完了後に新たに開かれたタスクから反映されます。例えば、設定前から開いたままのコマンドプロンプトには変更が反映されないので注意が必要です。新たにコマンドプロンプトを立ち上げて、冒頭で実行できなかったコマンドを実行してみましょう。
無事にコンパイルが通りました。PATHの設定によって、gccというコマンドの在り処を見つけることができたからです。
環境変数の設定変更
一度設定した環境変数の設定を変更するためには、環境変数の設定画面上で変更したい変数名をクリックしてハイライトし、「編集」ボタンをクリックします。これで「ユーザー変数の編集」というダイアログが表示され、変数名や変数値の変更を行うことができます。
PATHに複数の場所を設定
環境変数PATHには、複数の場所を設定することができます。下図のようにセミコロンで区切ってフルパス名を連記します。なお、同一名称のコマンドが存在した場合、前方に記述した場所が優先されるため、注意が必要な場合があります。
変数値を入力する部分が非常に狭いため、長くなると記述ミスをしやすくなります。一旦全体をクリップボードにコピーし、テキストエディターで編集をして、再度貼り付けると作業しやすいでしょう。
ポイント
- この環境変数設定ダイアログの操作性は、Windows95時代から全く変化していません。前述のように、既存値に新規の値を誤って上書きしても何の警告もないという不親切さもそのままです。Microsoftとしては、環境変数は一般的なPCユーザーが操作するものではないという考えなのでしょう。それだけ、「環境変数の操作というのはリスクがあるものだ」ということを、ユーザーが十分に認識する必要があります。
環境変数の設定に別の環境変数を用いる
環境変数の設定には、別の環境変数の設定を用いることができます。例えば、Javaの開発環境でよく用いられるJAVA_HOMEという環境変数を、下図のように新たに作成してみます。
そして別の環境変数であるPATHでは、下図のように設定を追加します。このようにすると、%JAVA_HOME%の部分が上の図にある値に展開されます。Javaの開発環境は、バージョンごとに別々のフォルダーにインストールされます。PATHに複数の場所が大量に記述されていると、その中の一箇所を修正しようとすることは操作ミスに繋がることもあるので、こうして別の環境変数を介することで設定修正を容易にすることができます。
なお、システムの起動手順の関係で、ユーザー環境変数の値をシステム環境変数に展開することはできません。この例で言えば、ユーザー環境変数にJAVA_HOMEを設定して、システム環境変数のPathなどに%JAVA_HOME%と記述しても、正しく展開されません。
PATHの優先順位
環境変数PATHは、システム環境変数とユーザー環境変数で別々に設定することができます。システム環境変数側のPATHが先になり、その後ろにユーザー環境変数側のPATHが連結される形となります。連結されたことによる現在のPATHの設定は、コマンドプロンプト上で「path」というコマンドを実行することで確認できます。
システム画面からの環境変数の設定
環境変数の設定を解説している多くのサイトや書籍では、コントロールパネルの「システム」の左側にある「システムの詳細設定」という項目をクリックした先にあるダイアログから環境変数設定画面を呼び出すように記しています。しかし、この操作を行ったアカウントの種類が「標準」であった場合、「システムの詳細設定」をクリックしたときに管理者のパスワードを求められます。パスワードを入力すると次には進めるのですが、その先の環境変数設定画面でユーザー環境変数を操作すると、それは元々のユーザーではなく、パスワードを入力した管理者のユーザー環境変数を操作したことになってしまいます。
アカウントの種類が「標準」のユーザーである「keicha_hrs」が、上記の操作で「adminuser」という管理者のパスワードが求められ、それを入力して環境変数の設定画面を呼び出すと、下図のようになります。「adminuserのユーザー環境変数」と表示されています。この状態でユーザー環境変数の設定を変更しても、「keicha_hrsのユーザー環境変数」は何も変化しないのです。
自分のアカウントの種類が「管理者」であることを認識した上で下記画面から環境変数を操作することは問題ありませんが、アカウントの種類という言葉が十分理解できていない方は、「システム」からの設定はお薦めできません。
システム環境変数について
どうしてもシステム環境変数の操作が必要なときは、前述の「システムの詳細設定」のから環境変数の設定ダイアログを呼び出します。しかし、システム環境変数は全ユーザー共通の設定であり、システムを動作させる上で重要な設定もあります。これを無闇に操作することは思わぬトラブルに繋がります。特に目立つのが、「システム環境変数のPATHを設定しようとして、気が付いたら誤って既存設定に上書きしていた」というケースです。繰り返しになりますが、環境変数設定では新規に作ろうとした変数名が重複しても、何の警告もしてくれないのです。
こうなると、Windows操作の詳しい知識がない人には、完全な復旧は極めて困難です。書籍などでもシステム環境変数を設定するように解説しているものが多く見られますが、ユーザー環境変数の設定でもほとんどの用途は満たせます。環境変数の操作に熟練するまでは、システム環境変数の操作は行わないことを強くお薦めします。
ユーザー環境変数をシステム環境変数の値に展開することはできない
Windowsが起動するとき、まずシステム環境変数が読み込まれ、次にログインしたユーザーに応じたユーザー環境変数が読み込まれます。ですから、OSはシステム環境変数を読み込んだ時点ではユーザー環境変数の内容を知り得ません。そのため、ユーザー環境変数の値をシステム環境変数に展開させることはできません。例えば、ユーザー環境変数にAという変数を設定し、システム環境変数のある変数の値に%A%という記述を行っても、その変数には「%A%という単なる文字列」が設定されてしまいます。
こぼれ話
Windows XPの時代までは、常用するアカウントも管理者にすることが半ば常識でした。管理者でなければアプリケーションのインストールもままならず、非常に使い勝手が悪かったからです。しかし、Vistaでユーザーアカウント制御という仕組みが導入されたことによって、アカウントの種類が「標準」であっても日用的な操作にはほぼ支障を来すことはなくなりました。これにより、マイクロソフトも常用するアカウントの種類は「標準」とすることを推奨しています。
PCの技術解説をしているサイトの製作者は、XP以前からのベテランユーザーが多くを占めているため、「システム」から環境変数を設定する操作を紹介しているものと思われます。しかし、Vista以降で初めてWindowsに触れたユーザーの割合も多くなってきたことでしょう。そして、マイクロソフトの推奨に従って「標準」でアカウントを作成した場合、参考にしたサイト通りの操作を行っても思った結果が得られないというトラブルに繋がっている事例も存在するのではないかと思います。
かく言う私も、このノートを全面改版するまでは、アカウントの種類が「管理者」であることが前提の記述をしていました。正直に申し上げると、「標準」のときに従来の方法では正しく設定できないことに気が付いたのは、つい最近のことです。これも「日常使うユーザーも管理者にするのが常識」という「悪しき慣習」の弊害と言えます。本ノートの手順であれば、アカウントの種類に左右されず設定をすることができます。
コマンドプロンプト操作による環境変数設定
Windows Vista以降では、setxという環境変数を設定するためのコマンドが提供されています(Windows XPでも追加ツールを導入することで利用可)。これはコマンドプロンプト上で環境変数を設定することができるコマンドで、これを用いることで上記のように長々とウィンドウを開かずとも設定ができます。しかし、長い変数値を設定しようとしたときに入力間違いなどをしてしまうと、取り消すことができません。特に熟練した人でなければ、この方法はお薦めできません。
Windows XP以前では
Windows XP以前では、デスクトップ上にある「マイコンピュータ」のアイコン上でマウスの右ボタンをクリックし、プロパティを選択することで「システムのプロパティ」画面を表示させることができます。そこで「詳細設定」タブを選択し、下方にある「環境変数」というボタンをクリックすれば、環境変数の設定画面を呼び出すことができます。以降の手順は同様です。
改版履歴
(2012/11/13)初版
(2013/03/08)体裁崩れの修正
(2013/07/28)関連知恵ノートの追加
(2013/11/27)全面的に改版
(2013/11/28)少し推敲
(2013/12/24)誤記述修正
(2014/04/06)記述修正
(2015/04/28)記述追加・修正