2012/11/11

文系のための「ディレクトリ構造」(1)

パソコンの多くは、ハードディスクUSBメモリCD/DVDSDカードなど、
様々な種類の記憶媒体の中にデータを保存している。
そして、必要に応じて、必要なデータをそこから呼び出す。

深く考えた事は無いかもしれないが、考えてみれば当たり前。
では、どこに保存されていて、どのようにしてそれを特定し、アクセスしているのか?
今回は、この仕組みを大雑把に整理してみる。これが本日のテーマ。

パソコン上で扱うデータは、通常「ファイル」と呼ばれるものを単位とし、
そのファイルを格納しているものを「フォルダ」と呼ぶ事が多い。
ということで、今回の話では「フォルダ」の話から整理していくことにする。

さて、多くの人には「フォルダ」という言葉の方がなじみ深いかもしれないが、
パソコンのより深い部分に関わっている人は「ディレクトリ」という言葉を使う。
今の段階では、同義語として理解していて問題はない。

「フォルダ」=「ディレクトリ」

ディレクトリというのは、英語では「directory」と表記する。
日本語に訳すると「住所録」という意味。「ファイルの住所」とも言える。
実は、プログラムを書く人々には、この表現の方が直感に合っているのである。

さて、日本の住所表記の場合、「◯◯県××市△△町□□丁目」というように記述する。
ここで注目するべきことは、「都道府県」の階層「市町村」の階層
「大字町丁目」の階層の組み合わせで、住所が表記されていること。

実は、パソコンのディレクトリも、基本的には同じように階層的に表現する
ただし、実際の住所と異なることは、階層の深さが未知であり、また、
各階層のディレクトリの数も不明であるという点。これが重要。

ここで、先ほどの例をもう一度確認。各階層はある「区切り文字」で表されている。
すなわち、「」と「」と「丁目」というのが該当する。
パソコンのディレクトリにも、これらに相当する「区切り文字」が存在する。

Windows の場合は「であり、Mac と Linux の場合は「/がその「区切り文字」。
Windows の場合には「ドライブ名」を最初につけて、
c:¥dir1¥dir2¥dir3」といったように表記する。

もちろん、いわゆる「デスクトップ」画面に配置されているファイル類も、
ディレクトリで指定することになる。WindowsMacLinux、のいずれでも同様。
パソコンのあらゆるデータは、ディレクトリ構造によってその位置を特定する

ところで、この「」マークは、欧米の環境では「\(バックスラッシュ)」であり、
場合によっては、このブログでも文字化けする可能性があるため、
本ブログでは、少々、見にくいかもしれなが全角の記号で表すことにする。

さて、ここまでの話を一旦整理し、簡単な図を提示する。
つまりは以下のような階層構造となっているのである。
なお、区切り文字には「/」を使っている。


パソコン上で、ある「フォルダにアクセスする」というのは、言い換えれば、
ある基準となる最上位のディレクトリからの「パス(道筋)」を辿ることである。

このとき、最上位のディレクトリのことを「ルート・ディレクトリ」と呼び、
あるシステムが現在参照中のディレクトリを「カレント・ディレクトリ」と呼ぶ。
この二つの用語は、後々にも登場してくるので、ここで覚えておいた方が良い。

なお、「ルート」は、英語表記では「root」。つまり、「」の意味。
あるディレクトリを指定するということは、
その「根」からの「道筋」を指定することに他ならない。

カレント」に関しては、説明する必要は無いかとも思ったが、一応。
英語では、「current」と表記し、日本語では「現在の」の意味。
意味そのまま。特に、納得することでもない。

さて、色々と話が逸れてしまった。毎度のことか...。

あるディレクトリやファイルを指定することを「パスを通す」と呼び、
パスの通し方には、「絶対パス」と「相対パス」の二種類が存在する。
例えるならば、「住所を国名から書くか?」、「市から書くか?」の違い。

絶対パス」が、ドライブの直下をルートとしたパスの指定方法であり、
相対パス」は、ある既知のディレクトリをルートとしたパスの指定方法である。

絶対パスルート・ディレクトリは、ドライブ直下のディレクトリであり、
この場合のルートディレクトリを包含する上位ディレクトリは存在しない。
また、絶対パスで指定されるディレクトリは、一つしか存在しない

次に「相対パス」の場合。絶対パスの場合、ディレクトリを移動すると、
目的のファイルを参照できなくなるという問題がある。
以下のようなエラーメッセージを見た人は少ないはず。

指定されたファイルがみつかりません。

システムに関わるファイルの場合、問題は深刻。要するに、「相対パス」は、
移動しても良い部分と、移動してはいけない部分を分けるという考え方。
移動先の最上位のディレクトリを指定してやれば通常通りに動くことになる。

この場合のルート・ディレクトリは、移動しても良い部分の最上位のディレクトリ。
最初に、ルート・ディレクトリの場所さえ指定おけば、
システムの処理に深刻な影響は与えない。

さて、ここまでの説明を聞いただけでは、イマイチ、理解しにくいことも多いはず。
ということで、次回は、簡単なプログラムを書きながら
ディレクトリについて理解してみようと思う。

これからの文系は、プログラミングも必要不可欠。折角の機会なのでチャレンジする。
プログラマレベルを目指す必要は無いが、簡単な処理は出来た方が良い。
ということで、次回に向けた準備を。

次回から、プログラミング言語のPython というのを使う。
ダウンロードとインストールは、下記のホームページから。
http://www.python.org/getit/

英語のページではあるが、さすがに、解らない人はいないであろう。
Python 2.7.3」というのが現在の最新バージョン
Python 3.3.0」というのは別ものなので不可

なお、Google検索で「python インストール」などと調べれば、
いくらでも、方法は出てくるので、ここでは説明を省く。
私の説明よりも解りやすいのは、かなり一杯あるだろうし。

基本的な使い方は、本ブログのデータ型の話の所で述べているので、
プログラミングの経験の無い人は、練習も兼ねて、
そこから始めることをお勧めする。

4 件のコメント:

  1. 相対パスの説明が「町丁目から書く」というのはちょっと誤解を与えるかも。むしろ、「ある点に立って、そこから道案内される(次の角を右に曲がって…のような)感じ」じゃないですかね?そういう意味では、絶対パスは緯度経度で示されるような感じでしょうか…。

    返信削除
    返信
    1. この部分の説明は結構、迷ったんですよね。ただ、directory なので、住所表記的に説明したかったのです。相対パスであっても、結局、内部的にはドライブ直下からのパスが解らないとデータにアクセスできないですからね〜。この状況って、例えば、「京都市上京区」のように前に「京都府」を付けなくても、京都府であることは解るのと似ていると思うのです。さらに、住所書かなくても「同志社大学京田辺キャンパス〇〇研究室」だけで、手紙は届いちゃうんですよ。あぁ、ただ、「町丁目」は良くないですね「市」の方が解り易いかも。

      削除
  2. 実際に書く時を考えると、例えば絶対パスは「http://www.abc.jp/d/e/f.html」だったりするわけですが、相対パスで、カレント・ディレクトリがe直下だったりすると、「http://www.abc.jp/g/h/i.html」を指定したい場合は「../../g/h/i.html」とかだったりするのは、道案内に似てるのかな、と思ったのです。どうでしょう?

    返信削除
    返信
    1. う〜ん...難しいですね。確かに、「道案内」という考え方もできそうです。絶対パスが緯度経度というのは、私には逆に解りにくいです。プログラムを書いていると、やはり、相対パスのルートディレクトリは内部的に指定していて、手紙を配達する時の住所の書き方ような感じなんですよね。人によって理解しやすい説明の仕方が変わってくると思います。しばらく、このまま放置しておいて、他の人たちの反応を見ながら説明の仕方を考えていこうと思います。コメント、ありがとうございます。

      削除