Macでプログラミングするための開発環境を作る際、環境変数やPATHが出て来ますよね
よく分からないけどネットで検索してその通りに設定してうまく動くようになったけど・・・、
結局環境変数とかPATHとかってなに?????
って人も多いのではないでしょうか
この記事では、環境変数と環境変数のPATHを説明しています
Macで開発環境を作るなら環境変数やPATHの知識は必須です!!
(LinuxやWindowsでも環境変数の知識は必須ですよぉ~)
この記事では環境変数PATHの事を説明しますね
Contents
環境変数ってなに?
環境変数を一言で言うと、コンピューターの中にあるメモ帳みたいなものです
全てのアプリケーションから参照することができるメモ帳と思ってください
環境変数という言葉がなんか難しそうですけど、そんな複雑に考えなくて大丈夫です
ホントにただのメモ帳と思ってください
忘れないように書き留めているメモ帳みたいなもんです
●コンピューターを使う上で必要な情報を
●環境変数としてコンピューターの中に置いておけば、
●いつでも誰でも必要な情報を取り出せるよね、
っていう感じのものです
環境変数については、MacもLinuxもWindowsも全て考え方は同じです
基本的にはこの意識(←環境変数なんてメモ帳みたいなもんだ)だけ持って入れば充分です
更に詳しく知りたい場合はWikipedia見てください
自分のMacの中に存在している環境変数を見るには?
環境変数はたくさんあります
PATHだけではありません
MacやLinuxは、ターミナルでprintenv
と打ってみてください
Windowsは、コマンドプロンプトでset
と打ってみてください
たくさん出てきますよね
僕の環境ではこれだけ出てきます
> printenv
TERM_PROGRAM=Apple_Terminal
SHELL=/bin/bash
TERM=xterm-256color
TMPDIR=/var/folders/_89oj32ouro2jr2eoore2oiioe2rorjoi/R/
Apple_PubSub_Socket_Render=/private/tmp/com.apple.launchd.eojeYiJIjU/Render
TERM_PROGRAM_VERSION=361.1
USER=MyUser
PATH=/Library/Frameworks/Python.framework/Versions/3.5/bin:/Users/MyUser/.rbenv/shims:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin
PWD=/Users/MyUser
LANG=ja_JP.UTF-8
XPC_FLAGS=0x0
RBENV_SHELL=bash
XPC_SERVICE_NAME=0
SHLVL=1
HOME=/Users/MyUser
LOGNAME=MyUser
_=/usr/bin/printenv
> set
ALLUSERSPROFILE=C:\ProgramData
APPDATA=C:\Users\MyUser\AppData\Roaming
CommonProgramFiles=C:\Program Files\Common Files
CommonProgramFiles(x86)=C:\Program Files (x86)\Common Files
CommonProgramW6432=C:\Program Files\Common Files
COMPUTERNAME=MYMACHINE
ComSpec=C:\Windows\system32\cmd.exe
FP_NO_HOST_CHECK=NO
HOMEDRIVE=C:
HOMEPATH=\Users\MyUser
LOCALAPPDATA=C:\Users\MyUser\AppData\Local
LOGONSERVER=\\MYMACHINE
NUMBER_OF_PROCESSORS=2
OS=Windows_NT
Path=C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\
PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC
PROCESSOR_ARCHITECTURE=AMD64
ProgramData=C:\ProgramData
ProgramFiles=C:\Program Files
ProgramFiles(x86)=C:\Program Files (x86)
ProgramW6432=C:\Program Files
PROMPT=$P$G
PSModulePath=C:\Windows\system32\WindowsPowerShell\v1.0\Modules\
PUBLIC=C:\Users\Public
SESSIONNAME=Console
SystemDrive=C:
SystemRoot=C:\Windows
TEMP=C:\Users\MyUser\AppData\Local\Temp
TMP=C:\Users\MyUser\AppData\Local\Temp
USERDOMAIN=MYMACHINE
USERNAME=kn
USERPROFILE=C:\Users\MyUser
windir=C:\Windows
windows_tracing_flags=3
windows_tracing_logfile=C:\BVTBin\Tests\installpackage\csilogfile.log
環境変数のPATHについて説明するよ
ここからはPATHについて説明します
環境変数はたくさんあるので全てを説明するとエライコッチャ状態になります
一番よく使うPATHだけ説明しますね
環境変数を理解するには、まずPATHから入るといいでしょう
まず、コマンドって何なの?
ターミナルで打つコマンド、「コマンド」「コマンド」ってよく言いますが、
コマンドの正体って一体なんなの?
って思いませんか?
答えは・・・
● スマホで言えばアプリです
● Windowsで言えばEXEファイルです
● Linuxで言えば実行ファイルです
グラフィカルな画面がなくて、
ターミナルで使える実行ファイルを、
コマンドと呼んでいるだけです
もうちょいちゃんと言うなら「命令」でしょうし、そう説明している本や記事が多いでしょうけど、それだと結局正体分からないないですよね
命令と言っても、アプリ(実行ファイル)と考える方がスッキリ理解しやすいかと思います
コマンドも誰かが作ったアプリ(実行ファイル)なんですよ
もちろん自分でコマンドを作ることも可能です
コマンド名だけで実行できちゃうのはなんでなの?
ターミナルでコマンド名(実行ファイル名)を打つとその実行ファイルが実行されます
でもですね、よく考えてみてください
ターミナルで打つのはコマンド名(実行ファイルの名前)だけですよね
コマンドを実行させるためには、本当はファイル名だけじゃなくフルパスを書く必要があるんですよ
例えば、コマンドがhogehoge
の場合、
- MacやLinuxなら、
/usr/local/bin/hogehoge
- Windowsなら、
C:\users\username\myapp\hogehoge.exe
という感じで打たないと、本当は実行できないんです
でも、実際のところコマンド名(実行ファイル名)だけで実行できますよね
ってことは、HDD/SSDの中からいちいち検索してる!?
いや、そんなことを毎回すると時間かかりすぎる・・・
じゃ、どこかに「コマンドの居場所」を書いてるのかっ!?
そうです、どこかにコマンドの居場所を書いてあるのです
そのどこかが環境変数(のPATH)なのです
以下のコマンドをターミナルで打ってみましょう(PATHは大文字)
> echo $PATH
※大文字小文字に注意
> echo %path%
もしくは
> path
※大文字小文字は不問
こんな感じのが表示されるでしょう
/Users/myuser/.rbenv/shims:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin
「:」は単なる区切り文字です
分割してみましょう
/Library/Frameworks/Python.framework/Versions/3.5/bin
/Users/simauma/.rbenv/shims
/usr/bin
/bin
/usr/sbin
/sbin
/usr/local/bin
これらはディレクトリ(フォルダ)です
居場所の分からないコマンドを実行させるとき、OSはこのディレクトリを上から順番に探してくれます
目的とするコマンドが見つかったらそこで実行です
全部のディレクトリを探しても見つからなかったら、command not foundというエラーが出ます(もちろん何も実行されない)
んで、、、、、
もしも、目的とするコマンドが複数の違う場所にあったら?
先に見つかった方を実行します
当然ですけど、
echo
というコマンドは実行ファイルです
ターミナルで
> which echo
と打ってみてください
echo
の居場所がわかります
whichコマンドは、いろいろなコマンドの居場所を教えてくれるコマンドです
ターミナルで、以下のように打ってみてください
> which printenv > which vi > which vim > which emacs > which ruby > which rbenv > which brew
それぞれの実行ファイルの場所が出てくるはずです
※PATHに登録されているディレクトリに存在している実行ファイルやコマンドであれば場所が表示されます
which
コマンドも実行ファイルなので、
> which which
と打ってみてもいいです
※Windowsではwhere
コマンドになります
最新バージョンをインストールしたのに、なぜか古いバージョンのままってことがあるよね?
よくあるのが、最新版をインストールしたのに、古い方が動いて最新版の方が動かない!というトラブル
これは、
- 最新版と古い方が別々の場所にインストールされている
- 古い方が入っているディレクトリが、環境変数PATHで先に設定されている
↑ってのが原因であることが多いです
じゃぁ、それを解決するためには環境変数PATHに登録するディレクトリの順番を入れ替えればいいってこと?
YESです!
環境変数PATHの書き換え方
簡単編
環境変数PATHに登録するディレクトリの順番を入れ替えるには、以下のどちらかのファイルを書き換える(or 追記)が必要です
※よく分からない人は、ファイルの最後に追記がいいでしょう
全てを細かく説明すると分からなくなると思いますので、簡単に説明します
- PATHへの設定コマンドを作る
仮に、/usr/hoge/ban
が先に登録したいディレクトリだとします
以下のようなコマンドを、エディタとかに書きますexport PATH=/usr/hoge/ban:$PATH
- 書いたコマンドを以下のどちらかのファイルに追記します
※もしそのファイルが無かったら、作ればいいよ.bash_profile
.bashrc
- 追記の方法
- viとかemacsが分かる人はそれで書き換えてください
- viとかemacsが分からない人は、ターミナルで以下のどちらかを打ってください
echo 'export PATH=/usr/hoge/ban:$PATH' >> .bash_profile
echo 'export PATH=/usr/hoge/ban:$PATH' >> .bashrc
細かい説明は避けたいけど・・・・
.bashrc
に記述する場合、.bash_profile
から.bashrc
が呼ばれている必要がある・・・
- 追記された事の確認
more .bash_profile
more .bashrc
more
コマンドで、指定したファイルの中身が見られます表示はcatコマンドじゃないの?
ようく表示にcat
コマンドを使いますが、別にそれでも問題ないんですが、cat
コマンドはファイルを連結するためのもの
コマンド名の由来がconcatとかconcatenateだったりするので、本当の意味では、ファイルの中身を見るのにcatコマンドを使うべきではない・・・という感じで人によっては怒られることがあるので、
more
コマンドにしています
cat
コマンドでもファイルの中身を見られるのは見られますよ
余裕ある人編
ディレクトリの/etc/paths.d
か/etc/manpaths.d
、
ファイル/etc/paths
か/etc/manpaths
、
↑のどこかにPATHに設定しているディレクトリが列挙されています
これを書き換えればOKです
環境変数PATHを書き換えた後、有効にするためには?
環境変数PATHを書き換えた後それを反映させるには、以下のいずれかを実行します
- ターミナルを再起動
一旦終了させて、再度起動
command+Nで新規のターミナルウィンドウを表示でもOK - ターミナルでsourceコマンド実行
> source ~/.bash_profile
※PATHの設定を変えた時、これではうまくいかない場合があるので、ターミナルを再起動する方をオススメします
- 環境変数PATHの確認
> echo $PATH
で表示される内容を見て、ディレクトリの順番が思ったような順番になっているかを確認する
まとめ
- コマンドとは、結局は実行ファイルのこと
- フルパスじゃなくて実行ファイル名だけで実行させるには環境変数のPATHにディレクトリを設定しておく必要あり
- PATHの設定は
.bash_profile
か.bashrc
で調整 - PATHへの設定順序は
/etc/paths
等で調整 - PATHの設定を変えたら、ターミナルを再起動
さいごに、
Macは簡単・使いやすい・優れていると言う人が多いですが、実際のところUNIX系OSですので全くの無知ではきちんと使うことはできません
また、Macだと開発環境を作り易いという評価があります
僕もそう思います(と言っても、Windowsで開発環境を作りにくいとは全く思わないですけど・・・)
でもそれはUNIX系OSに対しての知識があってこそです
今回は環境変数だけ解説しましたが、OSの仕組み、UNIX系OSの仕組みをしっかり勉強することをオススメします
今後、シェルやコマンドについて勉強するには、
こういった本で勉強することをオススメします
プログラミング のレッスンに興味がある方、レッスン内容を聞いてみたい方、なんなりとお問い合わせください。
無料体験レッスンもありますのでお気軽にどうぞ!!!