パスを通すとは?


はじめに

こんにちは.
Life is Tech ! Tokai版 Advent Calendar 15日目担当の12期映像メンターのじゃぱおです!

今日は、環境構築においてよくある「パスを通す」ということについて噛み砕いてみたいと思います.

いつも、環境構築の解説記事では普段言われた通りやっている人も多いと思いますが、その意味がわかっていることも非常に重要です.今回で「パスを通す」ということについて、プログラミングを始めたばかりの人でもわかりやすいように例を用いながら説明してみました!

この記事の対象者

  • 環境構築でパスを通す時にいつもあまりうまくいかない人
  • プログラムがどのように実行されているのかあまりわかっていない人

“プログラムを実行する”ということ

みなさんはソフトウェアを実行する時には、どのように実行しているでしょうか?

デスクトップのアイコンをダブルクリックしている人もいますね.

スタートメニューから希望のプログラムを実行している人もいます.

さらには自分で書いた Python のmain.pyを実行する時には

$ python3 main.py

と白黒の画面に入力してプログラムを実行している人もいますね.

このように、様々な方法でみなさんはプログラムを実行しています.

しかし、実はこれら全て、内部ではほとんど同じ実行方法で実行されています

“プログラムを実行する”ということは「どこかにおいてあるファイルにアクセスする」ということ

みなさんが主に使用しているWindowsやMac OXなどのOS(オペレーティングシステム)は基本的に ファイル という構成単位で動作しています.ファイルには大きく分けてふたつの種類があります( http://kj01.kgu.mydns.jp/fujimoto/tips/extension.html ).

  • プログラムファイル --- Google ChromePythonXcode, etc...
  • データファイル --- Word文章、TeXファイルのほか、XXX.pyやXXX.javaもこれに含まれます(プログラム文を記述したファイルそのものだけではプログラムを実行することはできません、コンパイルという作業をしてプログラムファイルを生成して初めてプログラムと言える物になります)

プログラムファイルは、コンピュータ上で動作することのできる手続きを記述している物、データファイルはユーザがプログラムファイル中で利用する情報を記録するためのファイルとなります.

難しい話ではありません.

これらの全てファイルは、コンピュータ上のファイルシステムいずれかの位置に必ず格納されていてます.必ずです.

Windowsの場合にはエクスプローラーMac OSの場合にはFinderというOS(オペレーティングシステム)に備わっている「ファイルというものを一覧表示することができるプログラム」を使用すると覗くことができます.

それらのファイルにアクセスするには、「家の住所」に相当するパスというものを指定してアクセスします.みなさんの自宅がファイルとすると、その住所を指定すれば目的の家にたどり着けることと同じです.

// WindowsでGoogle Chromeのプログラムファイルを指定する例
C:\Program Files (x86)\Google\Chrome\Application\chrome.exe

// Mac OSでGoogle Chromeのプログラムファイルを指定する例
/Applications/Google Chrome.app/Contents/MacOS/Google Chrome

さて、少し話が長くなりましたが、題名を思い出してみてください.

“プログラムを実行する”ということは「どこかにおいてあるファイルにアクセスする」ということ

基本的にプログラムを実行する時には次の流れで実行します.

  1. プログラムファイルファイルシステムのどこにあるかを調べる
  2. プログラムファイルの住所であるパスを調べる
  3. OS(オペレーティングシステム)に教えてあげる

という流れでプログラムを実行することになります.

もしあなたがGoogle Chromeのプログラムを起動したい時、上記に示した“住所”の現地に赴いて、呼び鈴を鳴らす必要があるということです.

実際に住所をOS(オペレーティングシステム)に伝えて、プログラムを実行してみましょう.

自分でプログラムファイルのパスをWindowsならコマンド プロンプトMac OSならばターミナルでそのパスをコピーしてEnterを押してみてください.

コマンド プロンプトターミナルと呼ばれるものは、起動したいプログラムファイルのパスを入力するとそのプログラムを起動するようにOSに依頼することができます.

上記のGoogle Chromeのパスに存在するプログラムファイルをOSに実行するように依頼したため、Google Chromeが起動しましたね.(それぞれの保存場所によりますがデフォルトは同じです)

今までデスクトップ上のアイコンをダブルクリックしていた人も、スタートメニューから選択していた人も、実はこのようにして、プログラムファイルの位置をOS(オペレーティングシステム)に教えてあげて、希望のプログラムファイルを実行していたということになります.

ちなみに、あくまでパスというのは、画像の格納位置をプログラムに教えてあげたり、Wordの[開く]からWordファイルを開くだけに使うのではないということは以上の説明からもお分かりだと思います.

毎回、長〜いパスを指定するのが大変だから「パスを通す」

さて、そろそろタイトルの答えにまいりましょう.

先ほどまで示したように、プログラムファイルというのは、あくまでとあるディレクトリに存在していて、プログラムを実行するというのは、そのプログラムファイルにアクセスするということです.

しかし、Google Chromeとか、Pythonとかは頻繁にアクセスしますよね?

毎回の実行ごとに

$ /usr/bin/python main.py     //Macのターミナルの場合
$ C:\Users\username\AppData\Local\Microsoft\WindowsApps\python3.exe main.py    //Windowsのコマンド プロンプトの場合

と打つのは大変です.

そこで、実行したいプログラムファイル名(上記コマンドであれば pythonとなります)がありそうな箇所を予め登録しておこうというアイデアが「パスを通す」ということになります.

住所の例であれば、「住所を全て言わずにマンション名だけを指定した時、そのマンションがありそうな場所を予めメモに記して順番に回ってみよう」ということになるかと思います.「パスを通す」時には、そのメモに対してプログラムがありそうな箇所としてプログラムファイルが存在しているディレクトリを登録することになります.

パスを通す実際のやり方(Windows)

Windowsの場合は非常に簡単です.設定から環境変数(いわゆるパスです)がGUIで設定できます.
参考:https://itlogs.net/windows-10-path/

パスを通す実際のやり方(Mac OSX Catalina以降)

MacはGUIを用いてパスを通すのはデフォルトでは不可能です.

また、厄介なことに多くのMacへの環境構築を解説している記事やインストーラーによって、プログラムファイルがありそうな場所としてメモをする先が正確ではなく混乱を生むものがあります.(これは記事が悪いのではなく、Mac OSの仕様変更、シェルの種類の変更が理由です).Macにおいて環境構築を行う場合はなるべく最新の記事を参照する癖をつける必要があります.

vi ~/.bash_profile
vi ~/.bashrc
echo 'export PATH="$PATH:(プログラムファイルが存在するディレクトリ)"' >> ~/.bash_profile
echo 'export PATH="$PATH:(プログラムファイルが存在するディレクトリ)"' >> ~/.bashrc

このようにして bash_profilebashrcに記述を追加しようとしている記事はCatalina以降のOSXを使用している場合はパスを通したと思っていても、うまくいかない可能性があります.

もし、あなたのターミナルの上部にzshと書かれていて、bash_profileと書かれている記事を参照している場合はそのbash_profileと書かれている部分をzshrcに置き換えるとうまくいくかもしれません.

Macでパスをとおすときのお勧めのやり方

$ echo 'export PATH="$PATH:(プログラムファイルが存在するディレクトリ)"' >> ~/.zshrc
$ source ~/.zshrc

詳しくは https://qiita.com/k3ntar0/items/eb8cdbd8eba9da388def が参考になるでしょう.

まとめ

さて、「パスに通す」ということの概念を噛み砕いて説明してみましたがいかがだったでしょうか.

よくわからずなんとなくパスを通していた人も多いかもしれませんが、これを理解すると、パスが通せていない時に現れるエラー文のzsh: Command not foundの意味がわかると思います.

予め記したはずのメモに「プログラムファイルがありそうな場所」いわゆる「マンションのありそうな場所」が書いていなければ、見つけるよう指示されたマンションを膨大なファイルの中から探さなくてはいけなくなるということです.あなたが郵便配達員だったとしたら探すの諦めちゃうでしょ?「そんなマンション探すの無理だ〜」って言わなければいけません.
コンピュータも見つからないものは見つからないと教えてくれているわけです.

エラー文は、無理難題を押し付けられてしまったコンピュータによるひそかな叫びです.

どうぞ、お手柔らかに、エラー箇所を直してあげてくださいませ.