パスの話
Feb 17, 2022
こんにちは.北山です.学生も結構実装フェーズに入ってきて,プログラム関係の話題がちらほら出てくるようになりました.割と多いのが「相対パス,絶対パスってなんですか?」とか「パスを通すってなんですか?」とかの話です.はい,PASSじゃないですよ.PATHですよ.つまり,ここで言うパスは「経路」のことです.
う〜ん.僕のときは,割とWebページ作成にHTML直書きしていた時代なので,自然と絶対/相対パスは理解していたというのもあるし,ソフトウェアのインストールも「自分で環境変数いじってね」って感じのものも結構あったので,パスを通す機会が結構あって,これもなんとなく理解して行ったという感覚なのよね.まあ,時代がきっと違うということで.この手の話を時間作って全員集めて解説するのも面倒なので,ここに書き残しておいて,必要に応じて読んでもらうということにしましょう.
まず,相対パス/絶対パスの話からしていきましょう.まず,絶対パスというのは,ある物がある場所に関する全ての経路が記載されたもののことです.フルパスと言ってもいいでしょう.物理的な住所で言えば,「東京都新宿区西新宿1丁目24−2」のように示すやり方です.電話番号で言えば,市外局番(もっと言えば国番)から書くようなやり方ですね.コンピュータの中のファイルの場所でいえば...これはOSによって作法が違うので分けましょうか.Windowsであれば C:¥hogehoge¥booboo¥exercise¥ch01.pyのように,C:¥というディスクの中の,hogehogeフォルダの中の,boobooフォルダの中の,exerciseフォルダの中にあるch01.pyってファイルって示し方になります.Macとかであれば, /hogehoge/booboo/exercise/ch01.pyですね.出発点の表記の仕方が違うだけで,言っていることはWindowsとかわりありません.
脱線ですがそう言えば,hogehogeとかboobooとかの「無意味文字列」が学生に通じないっていうのも最近増えて来ました.なにか意味のあるおまじないだと思っているような節を感じるときがあります.この手のやつは「何でも良い」とか「環境によって違う文字だよ」みたいなことを言っている「意味のない文字列」ってことをわかっておくと良いこともあるでしょう.
さて,お次の相対パスですが,ある物がある場所に関するある場所(多くの場合は現在地)から見た経路が記載されたものです.物理的な住所で言えば,今新宿区にいるなら「西新宿1丁目24−2」とだけ言えば場所は伝わるでしょう.もしくは,今千代田区にいるなら「新宿区西新宿1丁目24−2」のように区名も言う必要が出てきますね.電話番号で言えば,同じ市外局番ないなら,市外局番を省いた番号で電話がつながりますね.コンピュータの中のファイルの場所で言えば,今boobooフォルダにいるのであれば, ./exercise/ch01.pyとだけ示せばch01.pyのある場所はわかるでしょう.ちなみに ./ は「現在地」を示す表現です.../ だと「一つ上のフォルダ(ディレクトリ)」って意味になります.
コンピュータAで書いているプログラムをコンピュータBでも動くようにするには,多くの場合,プログラム内で呼び出す他のファイルの位置は「相対パス」で記述します.絶対パスだと,フォルダ構造が全く同じじゃないと動かなくなってしまいますね.
後は「パスを通す」ですが,これは上記の話とは少しトピックが違っていて,環境変数のPATHという箇所に,経路を書いておくということになります.環境変数は,OSが参照する変数だと思って貰えばいいです.PATHという変数には「ファイルやプログラムが見つからないときはここを見てね」って経路を書いておきます.コマンドプロンプトやターミナル上で,プログラムを実行する時(例えば pythonを呼び出す時)なんかは,pythonって打ち込むと思います.これはひとまずは,今いるフォルダ内にある「python」っていうプログラムを実行させてねってことに等しいです.ただ,普通は今いるフォルダには「python」って名前のプログラムはありません.そこで見つからないので,OSはPATHにかかれている経路の場所を見に行き「python」ってプログラムを探します.それで見つかればそのまま実行するわけです.それでも見つからないときは「そんなプログラム知らんよ?」って感じのエラーを返すわけですね.
まあ,ここまで書いておいてなんですが,30分くらいレクチャする時間作っても良かったかもしれんなぁって思いました... まあ,ええか.それでは今日はこのくらいで.ではでは.