パス(path)とは

 

 パスという言葉がしばしばコンピュータ用語として使われます。パスワードという言葉もあります。ただ、このパス(pass)は通過を表し合言葉の意味、ここで説明するパス(path)は道を意味します。紛らわしいですが混同しないでください。

 
多くの初心者用の参考書では説明を楽にするためだいたい同じディレクトリにHTMLと画像ファイルをいっしょに置くことが多く、逆に専門書ではパスの概念など既に承知のものとして説明されていたりし、パスの概念は宙に浮いた感があります。
 ところが現実にホームページを開く場合、プロバイダからCGIファイルはcgi-binの中に置くように指示されたり、少し慣れてくるとファイルの管理やパーミッションの指定を楽にするため種類別にディレクトリを分けたくなったりします。初心者は往々にしてここでつまずきます。
 これからパスの説明のため左下図のようにWindowsのフォルダを使いますがフォルダとサーバ内のディレクトリとは、この場合ほぼ同じ概念で考えていただいて差し支えないと思います。

 

 左の図はpathディレクトリの中に2つのファイルindex.html、title.gifと3つのディレクトリが存在し、3つのディレクトリはそれぞれcgi-binにcounter.plが、dataにcount.txtが、そしてimageにtitle.gifが存在しています。

フォルダとはファイルの入れ物のことです。


 
さて、上の図をご覧いただくとおわかりのように、title.gifという同じ名の画像ファイルが2つあります。しかし、実際にはこの2つの画像は全く別のものです。
 人にたとえたら同姓同名というところです。

 コンピュータの場合、同姓同名のときにクローン(コピー)であることがあります。
  異姓のクローンもありますが(内容は同じで名前が違うファイル)、ここではクローンであろうとなかろうと別のものと考えます。

 この2つのファイルを区別するためにもパスが必要になるのです。
 会社でいえばパスとは所属のことです。
 次からファイルを人、パスを所属として上の図を用いて説明していきます。

 ある会社にpathという部があります。path部に直属で配属されている人が2人おり、それぞれindex.htmlさん、title.gifさんといいます。
 cgi-bin、data、imageの各課には上のように1人ずつの人が配属されています。
 ある日、index.htmlさんからtitle.gifさんに連絡箋が送られました。この手紙は差し出し元である部直属の係員が処理します。原則としてその部課の係員は自課の郵便しか取り扱わないためpath部image課内にもう一人のtitle.gifという人がいるにもかかわらず同じ部直属にいるtitle.gifさんに届けました。これはこれで間違いではありませんでした。
 次の日、index.htmlさんはimage課のtitle.gifさんにも連絡箋を送りました。昨日、直属のtitle.gifさんに送ったから今日は係員が気をきかせてもう1人のtitle.gifさんに届けてくれるものと考え再び課名を書かずに送りました。ところがこの会社はセクショナリズムが強く、係員は上司の承認状により別の課の係員に届けてもらわなければなりません。係員はもう一人のtitle.gifさんの存在には気づいていたものの課名がないので再び部直属のtitle.gifさんに届けました。
 その翌日、index.htmlさんは昨日の係員の誤配を知りimage課のtitle.gifさんに再度、今度は承認状とともに連絡箋を送りました。ところが、遅れていたこともあり、宛名にimage課と書くべきところ誤ってdata課と書いてしまいました。連絡箋はpath部の係員からdata課の係員に手渡されましたがdata課にtitle.gifという社員がいなかったdata課の係員から差し戻されました。
 index.htmlさんは間違いに気づき、その日のうちに再送しましたが、あせっていたためうっかりとimage課のtit
ole.gifと名前のスペルを間違えてしまいました。結局、係員は上司の承認を受けimage課まで届けながらもimage課の係員が事務的だったため、そのような人はいないとして連絡箋はtitle.gifさんには届けられませんでした。

 現実の会社でこのようなことがあれば組織が硬直化しているとか係員が気が利かないといって咎められるのでしょうがコンピュータのなかではこれがあたりまえなのです。

 上の例文で3つの規則が出てきています。

@宛先にディレクトリ(課名)の指定がなければ差し出し人と同じところにいる人とみなす。
Aディレクトリ(課名)を間違えたら宛先には届かない。
Bディレクトリ(課名)や名前(ファイル)のスペルを1字でも間違えると届かない。

 さて、先にカレントディレクトリという言葉が出てきましたが、@がこれを表しています。
 通常、呼び出し側のHTMLファイルが実行されている時点でのカレントディレクトリはそのHTMLファイルが置かれている同じ階層位置を表します。(カレントとは「現下の」とかいう意味です) そこから派生するディレクトリは含まれません。
 したがって、上の図でpath内のindex.htmlからtitle.gifを指定する場合、特にパスを指定しなければカレントディレクトリ内のtitle.gifが対象とされます。
 imageフォルダ内のtitle.gifを指定したいのであれば必ずimageフォルダを記述しなければなりません。この際、Aフォルダの誤りやBスペルの誤りは許されません。

 では実際にHTMLにおける記述のしかたを説明しましょう。
 ここではよく使われるであろう<IMAGE>タグで例示しますが、他のタグでも同様です。
 

[カレントディレクトリーの指定]

 先にも説明したように同じ階層ディレクトリにあるファイル間で呼び出し合う場合にはカレントディレクトリであることを特に指定しなくても呼び出すことができます。

 例 <IMG SRC="title.gif">

 カレントディレクトリを明示するときは

   <IMG SRC="./title.gif">とします。

 ファイル名の前に./をつけることによりカレントディレクトリ内に存在するファイルを表します。どちらも同じ動作が行われます。
 正確には.がカレントディレクトリを表し/は分離記号です。(詳細は次の項で)

 
サーバによっては同じディレクトリにある場合でもカレントディレクトリを明示しないと呼び出せないことがあるので常に記述することをお勧めします。
 

[子ディレクトリの指定]

 子ディレクトリという言葉を使ったかどうかは忘れましたが親ディレクトリという言葉は確かにあったので、ここでは子ディレクトリという言葉で説明します。(言葉はとにかく概念のみ覚えてください)
 先のようにindex.htmlから子ディレクトリ(そのディレクトリ内に含まれる下位のディレクトリ)であるimageディレクトリ内のtitle.gifを呼び出したい場合にはファイル名の前に/記号をつけてディレクトリを記述しなければなりません。パスというのはその道筋を説明するためのものです。

 例 <IMG SRC="image/title.gif">

       特にカレントディレクトリであることを明示するときは

      <IMG SRC="./image/title.gif">とします。

 ファイルとディレクトリの区別は拡張子がついているかどうかでわかりますが、パスの途中にファイル名が入ることはないのでファイル名は一番右側のものです。


 ディレクトリはその構成により、次のように何層にもなることがあります。
 Perlファイルの冒頭に記述するusr/local/bin/perlなどもその一例です。サーバのusrディレクトリの下のlocalディレクトリのさらにその下のbinディレクトリにperl.exeという実行ファイルがありますよと宣言しているのです。拡張子の記述がありませんが、ここではデフォルトとして実行ファイルをあらわしています。プロバイダによってusr/bin/perlだったりするのは単にPerlプログラムの設置位置が違うというだけのことです。
 また、この場合、ルートディレクトリからの道筋を表しています。ルートディレクトリとはそのデバイス(例えばハードディスク)の最も上の階層部分です。
  今、可能ならばWindowsエクスプローラ(IEではなくファイルを閲覧するもの)を開けてください。
 アドレスバーに表示されている「C:¥×××\×××」がパスです。その際の\記号はHTMLでの/を表します。右に行くに従いディレクトリの下層になります。(×××はディレクトリ名です。)
 一番左に記述されている「C:」というのはCドライブすなわちこの場合はハードディスクを表しています。
 このようにルート(根っこ)からパスを指定するのが絶対指定といいます。この場合、たとえ呼び出し元のファイルの位置を移動しても呼び出し先を移動しない限り同じファイルを表せます。しかし、フォルダごと別の位置に移動した場合、絶対位置が変わるので呼び出せなくなります。
 通常、HTMLでファイルを指定する場合には相対パスを使います。
 相対パスとはあるファイルから見てどの位置にあるかということです。いうなれば人の続柄にあたるものです。aさんの子供bさんがbさんの子供cくんからみてお父さんであっても、aさんから見た場合、子供です。
 つまり、当事者(見る側)から見てどの位置にいるかで指定するのが相対指定なのです。(一方、絶対指定なら初代から初めて本人までのすべての系図により示すことをいいます。)
 上の2つの指定方法「カレントディレクトリの指定」と「子ディレクトリの指定」はともに相対指定です。

 さて、再びたとえに戻ります。今度はある課から別の課に連絡箋が送られる場合を考えます。右の図は先の図にpathディレクトリの親ディレクトリであるeigyoディレクトリを加えたものです。
 今度はcgi-bin課のcounter.plさんがdata課のcount.txtさんに連絡箋を送ろうと思っています。
 ところが先にもいったように各課の郵便係は自課内の配達しかできません。

 counter.plさんはdata課count.txtさん宛に連絡箋を出しましたが係員は上司の承認状がないため結局届けられませんでした。そこで、counter.plさんは承認状を持たせ再度配達させました。
 cgi-bin課の郵便係はpath部の郵便係に承認状とともに連絡箋を手渡し、path部の郵便係はdata課のcount.txtさんに連絡箋を届けました。

 なんと事務的なと思うでしょうが、これがコンピュータです。
 つまり呼び出し元と先のディレクトリが違うといちいち場所を教えてやらないとそこへはいかないのです。気をきかすとか規則を破るということは皆無です。ただし、承認状を持たせれば確実に届けられます。この承認状にあたるのが次で説明する親ディレクトリの指定なのです。

 では実際に
HTMLにおける記述のしかたを説明しましょう。
 再度<IMAGE>タグで例示しますが、他のタグでも同様です。

[親ディレクトリ・他のディレクトリの指定]

 例でもあげたようにコンピュータは自分の子ディレクトリ以外のディレクトリについては承認状がなければ届けません。
 したがってその組織上部への承認状を作らなければなりません。この承認状にあたるものが親ディレクトリの指定なのです。

 次のタグがcounter.plからdataディレクトリのcount.txtを呼び出す記述の仕方です。

 例 <IMG SRC="../data/count.txt">

 よく見ないと子ディレクトリの指定とかわらないように見えます。ただ、よく見るとdataディレクトリの前の記号が点1つから点2つになっています。微妙な違いですが../が親ディレクトリへの移動(例でいう承認状)を表しているのです。cgi-binからpathディレクトリに配達をお願いにいったと考えてください。そして、pathディレクトリの位置から子ディレクトリの指定同様、dataディレクトリ、count.txtと進む訳です。図のようにpathディレクトリの上に更にeigyoディレクトリがありその中にjinji.htmlというファイルがある場合、counter.plから呼び出す場合には

 例 <IMG SRC="../../jinji.html">

 と親ディレクトリへの移動を2回繰り返し2階層上のディレクトリに移動した上でそこに存在するjinji.htmlというファイルを呼び出す訳です。
 もしeigyoディレクトリの下のkeiriディレクトリのsiwake.txtファイルを指定するなら

   <IMG SRC="../../keiri/siwake.html">となるわけです。 

 他にもいろいろと知っておいた方がいいことはありますが、HTMLを扱う上ではこれで十分だと思います。簡単ですが以上でパスの説明は終わります。
 もっと詳しく知りたい人はUNIXやMS-DOSなどの基本書籍や開発言語のマニュアルなどから知識を得てください。(Windowsの利用にもこの知識は必要です。)
 この知識は記述こそ違え、ほとんどのマシンやOS、開発言語で共通の必須知識です。当面は使うことがなくとも確実にマスターしてください。