プログラミングをやってると必ずどっかで「PATHを通す」という言葉に出くわすと思う。初心者にとってはターミナルの操作をしていくので難解だし、毎度毎度、「PATHを通す」って何だよって思っていたので自分用にまとめます。
結論
まず、結論を一言でまとめる。PATHを通すとは「環境変数$PATH」に「パス」を突っ込むこと。と自分はこう解釈している。
プログラミングをしているとよくわからない単語ばかりでてくる。その単語の意味を丸ごと覚えようと思っても、またわからない単語が出てきてしまったりしてそのうちプログラミング自体挫折してしまう。解釈は人それぞれなので自分の落とし所を見つけられることが大事だと思う。
ちょっと脇道にそれてしまった。これだけだと意味がわからないと思うので下をそのまま読んで欲しい。
環境変数PATHとは?
そもそも「PATHを通す」で使う「PATH」自体の意味だが、この場合のPATHは環境変数$PATHのことで、いわゆる「パス」とは意味が違う。ややこしいけど、全て大文字の「PATH」とカタカナの「パス」で言葉を使い分けていく。
カタカナのパスは「あるフォルダまでの道のりを表したもの」と自分は解釈している。プログラミングは勉強していなくても、HTMLやCSSを勉強する段階で絶対パスと参照パス必ず通るはず。(/Desktop/practice/index.htmlみたいなやつ。もし知らなければまずはそこからググって勉強しよう。)
環境変数$PATHは、パスが入っている入れ物の名前だ。
変数はプログラミングをちょっとかじってれば、わかると思うけど「箱」のことで、この箱の中に色々突っ込んでいく。例えばPHPだと、$ramen = "二郎"
と突っ込んで、echo $ramen
とすれば二郎
が出力される。どのプログラミング言語でも変数の意味自体はただの箱だと思って良い。そこに何かを突っ込んでくわけだ。
$PATHも変数でこの箱の中には何がはいっているかというと、"パス"が入ってる。ターミナルを開いてecho $PATH
と打ってみて欲しい。そうすると、$PATH
の中身が表示される。
$PATHの中身がずらっと出てきて混乱すると思うが、要はここにこれだけのパスが保存されていることになる。ちなみにどこで区切るかというと:
の部分だ。/usr/local/bin:/usr/bin
となっていたら、/usr/local/bin
と/usr/bin
で分けられている。実際にこのフォルダをファインダーから見てみよう。/
に移動しよう。(ファインダーでcommand+shift+G
で任意のフォルダに移動できる。)
/
に移動してもらって確認できただろうか?ちなみにMacの隠しフォルダはcommand+shift+ .
で表示できる。
つまりここまでまとめると、「$PATHにはたくさんのパスが入っている。」ということがわかった。
PATHを通すと何が良いの?
これでPATHにはたくさんのパスが入っていることはわかったが、一体ここにパスを追加すると何が良いのだろうか?
結論から言うとPATHを通すことで、どこのフォルダからでも実行したいファイルを呼ぶことができるということだ。
例えば、ターミナルで試しにramen
と打ってみて欲しい。たぶん、command not found
となってそんなコマンドないよと言われてしまうだろう。
なぜなら、このramen
コマンドは$PATHに登録されていないからだ。
もちろん、この段階ではまだ意味がわからないと思うが、理解していくためにramen
コマンドと入力されたら、I Love ramen!
と出力されるようにramenファイルの作成からPATHの追加までをやっていく。
つまりramen
コマンドが打たれた時に、ramenファイルが呼び出されてその中身が実行されてI Love ramen!
という風にしたいってこと。
ここからファイルを作成していく操作はまた別の知識が必要なので、今はこんな感じでファイルが作れるのね、ふ〜んくらいでみて欲しい。
コマンドが入力されたら、実行するファイルを作成する
①viでramenファイルを作成。
viはターミナル上のエディタ(メモ帳みたいなもん)で、vi ファイル名
と書けば、新しくファイルを作成できる。適当なフォルダでvi ramen
としてみよう。
②ramenファイルに記述
この最初の行は正直自分もよくわかっていないので、詳しくは調べて欲しい。このramenファイルが実行された時の処理を書く感じだ。#!/bin/zsh
のzsh部分は自分が使ってるシェルによって変更するっぽい。
③catコマンド
で中身を確認
ramenファイルができたら、一応catコマンドを使って中身を確認しておこう。cat ramen
とすれば中身を確認できる。
④ramenファイル
に実行権限を付与してあげる。
ファイルは作成できたが、このままだと実行権限がないので権限を付与してあげる。ここらへんはそのうち勉強すればおk。ls -lコマンド
でそのファイルの権限を確認できる。最初は権限が与えられていないが、chmod u+x ramen
コマンドで実行権限を与えてあげる。そうするとファイルを実行できるようになる。
⑤ramenファイル
を実行する。
権限を与えたのであとはこのファイルの実行だけだ。まずは、ramenコマンド
と打ってみよう。以下のように表示されるはずだ。
そう、普通にramen
と打つだけではcommand not found: ramen
でそんなコマンドないよと言われてしまうのだ。
では、次に./ramen
と打ってみて欲しい。そうすると、「I love ramen!」と表示されるはずだ。
いったいなぜ./
をつけるだけで表示できたのだろうか。順番に見ていこう。
まず、./
の意味だがこれは自分がいる現在のフォルダを示してる。(この場合はWebPracticeフォルダ)つまり、この場合「今いるフォルダのramenというファイルを開いて」という命令だから起動ができた。もちろん、ramenファイルがないフォルダに移動してからこのコマンドを打ってもうまくいかない。あくまでramenファイルがあるフォルダに移動してこのコマンドを打つ必要がある。
PATHを通す
ではここから、「どこのフォルダからでもramenファイルを起動したい」とする。ここで$PATHが関係してくることになる。PATHを通すことで、どのフォルダからでもramenファイルを起動することができるようになるのだ。以下の順でPATHを通していこう。
①ramenファイルがあるパスを$PATHに格納していこう。export PATH=パス名:$PATH
コマンドを入力する。パス名のところには起動させたいファイルがあるパスを指定しよう。(この場合はWebPracticeフォルダ)pwdコマンド
で自分がいるフォルダのパスが返されるのでそれをパス名にいれよう。
②echo $PATH
でちゃんとパスが入っているか確認する。
①を行うと、$PATHにパス名が入るはずだ。echo $PATH
で指定したパスが表示されるか確認しよう。
③ramenコマンド
を、好きなフォルダで入力しよう。
PATHを通すことができたので、これでどのフォルダからでもramenコマンド
を実行できるはずだ。試しにデスクトップに移動してみてramen
と打ってみよう。ちゃんと出力されるはずだ。
$PATHにパスを加えていること、これがいわゆる「PATHを通す」ということだ。デスクトップ意外にも試しに違うフォルダに移動してramenコマンドを打ってみよう。再度成功するはずだ。これでパスを通すメリットがわかっただろうか、どこのフォルダからでもそのファイルが実行されているということだ。
しかし、一体なぜ、どこのフォルダからコマンドを入力してもramenファイルが実行できるようになったのだろうか?
分かってしまえば簡単なことだが、ターミナルで何かしらのコマンドが打たれた時、まず、$PATHの中身を確認していき、そこのパス以下に該当のファイルがあればそれを実行するというのが一連のプロセスになる。
コマンド入力→$PATHに登録されているパスを上から順に確認していきそこのパス以下に該当のファイルがあれば実行される。
なければcommand not foundが返されるというわけだ。
「PATHを通す」コマンドを細かく見る
では今度はPATHを通したコマンドexport PATH=パス名:$PATH
を切り分けて見ていこう。
左辺のexport PATH
は環境変数を設定するコマンドで、この場合「PATHという環境変数を設定してください」という命令になる。環境変数はPCが用意した変数のことで、この場合$PATHのことだと思って良い。
右辺のパス名には、実行させたいファイルがあるパスを書く。(この場合はramenファイルがある、WebPracticeフォルダだ)パス名に続けて:$PATH
となっている部分は、これまでの環境変数$PATHの中身を展開しているだけだ。
だからパス名と$PATHの前後を変更してexport PATH=$PATH:パス名
としてもオッケーだ。前か後ろにパスを付け足すかの違いだけである。
ちなみに、ramenファイルが違うフォルダにそれぞれあったとして、さらにどちらのパスも$PATHに設定していた場合、ramenとコマンドを打つとどちらのファイルが起動するだろうか?答えは$PATHでより上に登録されているパスからだ。上に登録した方から先に処理されることも覚えておくとよい。だから、export PATH=パス名:$PATH
として前に追加した方が基本的には良いと思う。
永続化の設定をする
実は、export
で付け加えた場合ターミナルを終了させてしまうと、せっかく$PATHに設定したパスも消えてしまう。
これを永続的に設定するには以下のファイルを作成して(ない場合)そこに記述していこう。シェルの種類によって読み込まれるファイルや読み込まれる順番っていうのがかわるみたいなのだが、ここらへんは割愛。また違う記事にでもまとめる。
今回自分が使っているシェルはzshなので、homeフォルダ(ログインした時のフォルダ のこと。よく「~」でも表される。)以下に.zshrc
ファイルを作成する。(シェルがbashの人は.bash_profile
や.bashrc
に記述しよう。なければ作成)そして、export PATH=パス名:$PATH
を記述すればOKだ。
書き込んだ後は忘れずsource
コマンドを入力しよう。zshシェルを使用している場合は、source ~/.zshrc
でOKだ。
まとめ
以上の流れで「PATHを通す」ということがなんとなく分かったのではないだろうか?ただ単に「$PATHにパスを追加する」っていうだけなんだが、色々説明するとめちゃくちゃ大変だ。本当は.zshrc
とか.bash_profile
とかももっと調べたかったけど疲れたのでまた別記事でまとめられたらいいなと思う。
あとはこれをどういう時に使うかだが、プログラミングを勉強していればそのうち出くわすことだろう。ちなみに自分は今のとこhomebrewや、composerなどのパッケージ管理ツールでパスを通しておいたり、Flutterの勉強時に通したりくらいだろうか。一度通しておけば、どのフォルダからでも起動できるので便利だよということだ。
この記事が理解できれば、今後パスを通すという指示には立ち向かえるのではないだろうか。みなさんの参考になっていれば嬉しい限りです。勘違いしている部分もあるかもしれないので見つけたら都度修正・変更していきます。