なーたのおぼえがき

なーたのおぼえがき

つくったものとか

「PATH」って何?

さて、PHPの環境のポータブル化についてまとめるにあたって、参考にさせていただいたサイトで「PATHわかんない人は調べてね」的な奴がありまして。
そういや、細かいこと知らねえぞ?と思い調べてまとめることにいたしやした。
例にもれず今回もapple?聞いたことないですねぇという勢いでいきます。
MacPC買ったらカテゴリ分けしようかな。そのうちMacのも書くよ(たぶん)

ざっくりと

ファイルシステムの住所のこと。USERPROFIREのところでも書いた「C:\User\」などがこれに当たります。目的のファイルまでの道のりみたいな認識でOK。
正確な言い方だと「ファイルシステムで特定の資源を示す文字列」のことかな。

ファイルシステムって何?

雑に言えば、「データを管理・整理し、保存・出力する機能」のこと。これも種類がいろいろあるけど、身近なところだとUSBフラッシュメモリを初めて使う時とか、TV番組をBDとかDVDとかに書き込むときに「フォーマットしてください」みたいな警告が出ますよね?「フォーマットする」ことによってファイルシステムが書き込まれて、よく見る挙動をするようになるんです。
まあ、詳しくその内ですがまとめるでしょう。その時はどっかこの辺にリンク張っておきます。

表記方法

ファイルシステムでは二つ、表記方法があります。現在地から目的地までのPATHとrootフォルダ(一番上の決まった位置)から目的地までのPATHです。
現在地から目的地までを「相対パス」、rootから目的地までを「絶対パス」と呼びます。rootからファイルまでのパス(メモ帳の「C:\Windows\System32\notepad.exe」みたいなやつ)を「フルパス」って呼んだり。

「PATHを通す」とは?

WindowsにPATHを記憶させて、特定のプログラム(アプリケーション)をプログラム名だけで実行できるようにする」こと。もしくは、その「PATHを記憶させる行為」のことを指します。
方法はいくつかあるけど代表的なものは
・コントロールパネル上で編集する
コマンドプロンプト
・なんらかのツールを使用する

ではまず「コントロールパネル上で編集する」やり方。
コントロールパネルは見てわかる通りここから開ける。(Win10使ってる前提)
f:id:Clairdeluna_eve:20190203004447p:plain
あとはWin+Sで「コントロールパネル」って検索するとか。
ちゃんとしたキーボード使ってる人はWin+Pause/Breakキーがショートカットだったはず。このキーはラップトップ(ノートPC)だと省略してあることが多いから気をつけてな。
んで、開けたら「システム」→「システムの詳細設定」→「環境変数」ってすると新しいウィンドウが開くので、そこのユーザーの環境変数の中にある「Path」に追加するとPATHが通る。

次はコマンドプロンプトだけどWin+Rで「cmd」ってすれば開ける。クリックで開くときはコントロールパネルと同じとこにある。
ここで、用途によってコマンドが変わる。一時的に使いたいときは「set」、ずっと使う時は「path」。で、もういっこ「setx」。これは本当に非推奨だけど使う可能性がゼロじゃないから。

まず「set」これは

$ set PATH=%PATH%;(通したいpath)

って書く。この有効範囲は「今開いているシェル/コマンドプロンプト、プログラム」と「そこから開いたシェル/コマンドプロンプト、プログラム」。最悪ミスってもウィンドウ閉じたら元通りっていう、本当に一時的に使う用のやつ。

次に「path」これは

$ path %PATH%;(通したいpath)

こっちは完全に追記。環境変数のところにちゃんと載るから一時的じゃなくて永続?かな。

で、問題の「setx」

$ setx PATH=%PATH%;(通したいpath)

が構文。前の二つはユーザーの(言い換えればローカルの)環境変数を変更するものだけどこれはグローバル、というのかな。ミスったら(デフォルト設定の部分とかまで消したら)今起動してるWindowsの挙動がやばいことになったりする。やったことはない。でも、コマンドでグローバル変更したかったら使うしかないからめっちゃ気を付けてやるんよ?ついでに言うと確かリモートコンピュータの環境変数とか設定とかいじれたと思う。

全部に共通して「%PATH%」って書いてるから何ぞこれ?と思うかもしれないけど、これは現在のPATHが全部入った変数で、上のコマンドは環境変数に「通したいpath」を追加してることになってる。ちなみに忘れると追加したやつ以外何もできなくなるよ。dir実行しても「そんなのねぇぞ?」って言われるの恐怖だかんな。

ツールは使ったことないから知らん。
「path ツール」とかで検索すれば出るんじゃね?

「PATH」の場所

んで、ここからはちょーっと詳しい説明。「わかんね☆」という人は飛ばそう。

ここまでで把握しているかもしれないけどPATHは環境変数です。レジストリのやつの最後にレジストリエディタの画像を載せているけど、そこでも編集できるよ。で、PATHに対応しているレジストリ
・HKEY_CURRENT_USER\Environment
・HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment
の二つ。勘のいいひとなら気づくと思うけど、上がログインしているユーザーだけのPATHで、下のが全体のPATHだね。
長く使っている人だと「どっちにも書いていないプログラムでも起動できるぞ?」と疑問に思うかも?そう、ここだけじゃない。
・HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\App Paths
・HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths
この二か所にも。まあPATH見て気づく通りアプリケーションソフトのPATHが入っているんですけどね。Chromeとか入れたときに「Win+Rで実行できるのに環境変数のとこに書いてないよ?!なんで?」とか思う人少ないと思うけど。

このあたりがわかると今度はAutoRun(起動時に自動実行)とかしたいなんて思う人いると思いますがそこは自分で調べてね☆
説明面倒とか言えない

「PATH」の仕組み

とりあえず、なんでプログラム/アプリケーション名で実行できるかっていう話。
端的に言うと総当たりの脳筋しぐさで実現してる。それであの速度。さすがコンピュータ。とりあえずメモ帳「notepad.exe」を例にして言うと

PATH=C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\WINDOWS\System32\OpenSSH\

が与えられたとき

「C:\WINDOWS\system32\notepad.exeってある?」
「C:\WINDOWS\notepad.exeってある?」
「C:\WINDOWS\System32\Wbem\notepad.exeってある?」
「C:\WINDOWS\System32\WindowsPowerShell\v1.0\notepad.exeってある?」
「C:\WINDOWS\System32\OpenSSH\notepad.exeってある?」
という風に総当たりしていく。最初に見つけたところのnotepad.exeを開いて終了。
これの問題点が一つ。実行ファイル名が被ったらはじめの一つだけが開くようになる。

改造したnotepad.exeをnotepad.exeとして保存したら?改造したメモ帳のpathを改造元より前に置けば改造元は開かないし、あとに置けば改造メモ帳は開かない。


なんとなく使ってる人で引っかかりを感じてる人、いるかもしれない。例えば「notepad.exeってしなくてもnotepadで開くよね?」そう、その通り。
それは拡張子を補っていく「PATHEXT」という環境変数があるから。ちなみにこっちも脳筋しぐさ。計算機ってスゴイナァ
つまりフォルダパスはPATHが、拡張子はPATHEXTが脳筋しぐさで補うことでメモ帳は「notepad」で実行できる、ってわけ。

これ、どこにPATH通ってるの?という疑問に答えるコマンドもあります。

$ where notepad.exe

とすればnotepad.exeがどこにあるのかすぐわかるっていう「where」コマンド。
そのままじゃん、って?わかる、私もそう思う。


というわけで長くなったけどここで終了。なんか見つかったら随時追記していこうかなと思ってるけど、いったいいつになるだろうね?