

@ Yuya Wada
今回はよく聞く「パス」や「PATHを通す」とは何か説明していきます。
何事もざっくりと概念を知らなければ細かい話は理解できないというポリシーの元で記事を書いています。
正確な表現より実践で必要なイメージを優先しています。
それでは頑張っていきましょう。
パス=PC内の住所
PATHを通す=パスを省略できるようにする
この言葉を理解するために必要な前提知識を解説していきます。
覚えておいて欲しいのは、PC内に存在するのはファイルかフォルダだけということです。
この意識はパスを理解する上で非常に大事です。
デスクトップやダウンロードフォルダを見てください。
拡張子は pdf や xlsx など様々ありますが、これらは全てファイルの一種です。
ショートカットも実はファイルの一種です。
私のデスクトップは4フォルダと1ファイルあります。
これをターミナル上で確認してみましょう。
cd Desktop
上記コマンドで、Desktopという名前のフォルダの中に移動します。
ls
というコマンドでファイルやフォルダの一覧が表示できます。
4フォルダと1ファイル確認できました。
このように普段見ているデスクトップ画面の実体は、Desktopという名前のフォルダです。
アイコンを使ってDesktopフォルダの中身を表示しているだけです。
PC内にはファイルとフォルダしかないんだな〜ということが分かればOKです。
PC内にはファイルとフォルダしか存在しないことが分かりました。
このPC内で保存されているファイルの場所のことをパスと呼びます。
ファイルの場所もしくはファイルの住所、分かりやすい方で覚えてください。
パスの意味合いは状況によって変わりますが、とりあえず以下の3つを覚えておけば問題ありません。
ここまでの話をまとめます。
ファイルパスの概念を説明しましたが、実際には2種類存在します。
絶対パスと相対パスです。
最初に絶対パスから理解する必要があります。
結論から示します。
絶対パス=正式な住所 です。
まずは実際にデスクトップフォルダの絶対パスを示します。
/Users/yuya/DesktopC:\Users\yuya\Desktop
※今回はバックスラッシュ(\)で表記していますが、円マーク(¥)と同じ意味です。
ここからはMac表記の /Users/yuya/Desktop を詳しく説明します。
サーバーで主に使用されるLinuxとmacの表記が同じだからです。
先頭文字のスラッシュに(/)は特別な意味があり、ルートディレクトリと呼びます。
ルートディレクトリはPCのフォルダの上を辿っていった一番上のフォルダです。
PC内の全ファイル・全フォルダはルートディレクトリの下に配置されています。
余談ですが、サーバーの管理者権限のことをルート権限と呼びます。/Users のUsersはルートディレクトリの下にあるUsersフォルダです。
この中には、PCを使う各アカウントの情報が入っています。/Users/yuya のyuyaはPCにログインした時のアカウントのフォルダです。
gestというアカウントを作成した場合は、/Users/guest というディレクトリが作成されます。/Users/yuya/Desktop はyuyaというアカウントのDesktopに表示するためのフォルダです。
複数アカウントにそれぞれのデスクトップ画面があるのは、この/Users/〇〇というフォルダを各アカウントで作成しているからです。
このようにPCはルートディレクトリの下にどんどんフォルダを作成して、ツリー上にデータを保存していきます。
この保存している場所を示すのがパスです。
この書き方は、フォルダが作られるごとにスラッシュが増えていきます。
ここまでの話をまとめます。
絶対パス=正式な住所 です。/Users/yuya/Desktop
上記のようにルートディレクトリから書いてあるパスを正式な住所すなわち絶対パスです。
次に相対パスを説明します。
相対パス=今いる場所からの住所 です。/Users/yuya/Desktop/GitHub/next-js/src/image/icon/line
このようにどんどんパスが長くなっていった場合、毎回全部書くのは大変です。
そこで省略して書く方法が相対パスです。
相対パスを書く上で2つ覚えてください。
,(ドット)1つと ,,(ドット)が連続して2つそれぞれに意味があります。
. (ドット ) は今いる場所を表します。
カレントディレクトリとよく言います。
.. (ドット2つ)は今いる場所から1つ上のディレクトリを表します。
これを踏まえて、/Users/yuya/Desktopにいる場合で考えていきましょう。/Users/yuya/Desktopを表す相対パスは ./
1個上のディレクトリになる/Users/yuyaを表す相対パスは ..//Users/yuya/Desktop/GitHub/next-js/src/image/icon/lineを表す相対パスは ./GitHub/next-js/src/image/icon/line
となります。
省略することができました。
この相対パスには記述量が減るというメリットだけではありません。
あなたがダウンロード式のアプリを作成したと仮定しましょう。
デスクトップに置いてある画像を表示するコードがあるとしましょう
絶対パスを使用した場合
<img src=”/Users/yuya/Desktop/icon.svg”>
このコードではあなたのPCのデスクトップに画像(icon.svg)を置いていても表示されません。
なぜなら、/Users/yuyaディレクトリはないからです。
相対パスを使用した場合
<img src=”./icon.svg”>
このコードでは実行時にDesktopにいてデスクトップにicon.svgという名前の画像を置いているPCなら、どのPCでも表示することができます。
つまり、
絶対パスは自分のPC上だけで実行するコードでは確実で良い、
相対パスは同じコードを他のPCでも使う場合に良い。
まとめます。
絶対パスは正式なファイルパス、相対パスは今いる場所からのパスです。
<おまけ>
UnReact本社の福岡県福岡市西区にいる場合における、博多駅のパスを示します。
絶対パス:福岡県福岡市博多区博多駅中央街1−1
相対パス:同じ市の博多区博多駅中央街1−1
PATHを通す=パスを省略できるようにする
です。
ここで説明するPATHは環境変数のPATHを意味します。(環境変数とは、いつでも使える変数のこと、グローバル変数)
会話で使う場合にはパスとPATHが完全に一緒なので要注意です。
これが分かりづらい大きな原因ですね!(怒)
まずは重要な前提を2つ説明します。
run echo.sh という文字を表示するプログラムを実行してみます。
ファイル名だけを入力した場合(1行目)
結果(2行目):command not found(コマンドがありません)
絶対パスを入力した場合(3行目)
結果(4行目):成功
相対パスを入力した場合(5行目)
結果(6行目):成功
このようにファイルパスを入力するとプログラムは実行されます。
プログラムを実行するほとんどの場合で、プログラムファイル1つだけでは実行できません。
プログラムの中で、別のプログラムを呼び出したり別のフォルダの画像を呼び出したりします。
このときに呼び出す先のプログラムやファイルのパスを明示する必要があります。
PC内に数百万もあるファイルやフォルダの中から、
「package.json を探してきて〜」
とファイルの名前だけ言われてもPCは困ります。
そのため常にファイルやディレクトリは絶対パスまたは相対パスで指定する必要があります。
ただし、よく使用するものにおいては名前だけで使えるようにしたら楽ですよね。
そう!この要望を叶えることをPATHを通すといいます。
まずはPATHの通っていることを実感してみましょう。
ターミナル上でdateと入力してエンターを押してみましょう。
現在の日付と時間を教えてくれるコマンドです。
Windows(コマンドプロンプト)も実行できます。
コマンドと言うと魔法の言葉のように思えますが、実際には現在の日時を教えてくれるプログラムが動いているだけです。
macでは、/bin/dateを実行しています。
つまり、/bin/dateと入力してエンターを押しても同じ挙動になります。
この現象について説明します。
ファイル名だけでプログラムを実行するときやファイルを使用するときに、PATHを通しておいたディレクトリを見に行って、見つけてくれるというものです。
そのため理論的に言えば、全てのディレクトリにパスを通すことで全てのプログラムやファイルを名前だけで実行することができます。
なお、同じファイル名が存在する場合は最近パスを通したものが優先されます。
では、実際にPATHの通してあるディレクトリ一覧を表示してみましょう。
ターミナルに $PATH と入力してエンターを押してください。
たくさん出てきました。
これが現在PATHの通っているディレクトリ一覧です。
:(コロン)で区切ってあります。
よ〜く探せば、一番下の行に /bin が書いてあります。
余談ですが、$PATH のように$で始まる大文字は、シェルにおいての変数を意味します。
macでターミナルを開くとzshというシェルが起動されています。
シェルの説明は割愛します。
ここで、dateが実行された流れを説明します。
①現在のディレクトリにdateというファイル名がないかを探す(※1)
②$PATHに記載されているディレクトリを上から順に見る
③/binの下にdateというファイルが見つかったので、dateを実行する
(※1) 現在のディレクトリにあるファイルやディレクトリを引数で指定する場合に限ります。
現在のディレクトリにあるプログラムの実行は、どの言語のプログラムなのかの宣言を求められる場合があります。
例) zsh echo.sh や python test.py
このように環境変数PATHに書いてあるディレクトリ内であれば、ファイル名だけを入力することでプログラムは実行されます。
一度まとめます。
PATHを通すとは、ファイルパスを省略して、ファイル名だけで実行できるようにします。
実際の挙動は、$PATHに書いてあるディレクトリ内に、入力したファイル名がないかを探して実行します。
PATHの通し方は簡単です。
環境変数PATHに代入するだけです。
ただ1つ注意ポイントです。
単純に代入すると上書きしてしまう恐れがあるので、追加する必要があります。
PATH=ファイルパス:$PATH
これでOK。
コロンの後に$PATHを入力することで追加できます。
実際にやってみましょう。/Users/yuyawada/Desktop/test を追加してみます。
1行目に追加されていることが確認できました。
ただし、これはターミナルを閉じる(シェルを閉じる)と消えてしまいます。
常にPATHを通したい場合は .zshrc や .bashrc に記載する必要があります。
今回は説明を割愛します。
今回の要点をまとめます。
パスとは、ファイルの場所を示す住所のこと。
ファイルはファイルパス、フォルダはディレクトリと呼ぶ。
PATHを通すとは、ファイルパスを省略してファイル名だけで良い状態にすること。
以上です。
一度では理解できないと思いますので、何度も読んで頂ければ幸いです。
お疲れ様でした。