小難しい理屈

フォルダー名の付け方

 今回も、ファイラーというより、管理運用の部類に含まれる一般教養ネタです。
 フォルダー名の付け方=ファイル名の付け方と、勘違いしてる人が意外と多かったので補足です。

※注意
 今回の記事は、偏った主張と、怪しい記憶が入り混じった乱暴な表現を多分に含んでいる内容であることを、あらかじめご了承いただいた上で参照ください。
 決して鵜呑みにしてはいけません。



 「ファイル名の付け方」という章では、名が体を表すような、中身を見ないでも推測できる名前にするんだよーという方法論を語りました。
 よそ様のサイトでも良く扱ってるので参考にしてみると良いですよ・・・と案内しました。
 それで素直に、よそ様のサイトで勉強してきて「勘違いして帰ってきた方」が結構いらしたので、ちょろっと補足しておきます。

 何をどう勘違いしてきたか?と言うことなんですが、その方は「ファイル名・フォルダ名の付け方」と併記されてたサイトを見られたようです。
 確かに、語呂も良いですし、エクスプローラなどでは操作が一緒ですし、混同しちゃうのも致し方ないと思います。
 ですが、「フォルダー」と「ファイル」は全く別物です。
 同じように考えてはならんシロモノだったりします。


 ちょっと昔話で、Windowsよりもずっと前の時代「フォルダー」なんて言葉が無かった時代まで遡ります。

 あるところに、CP/MというOSの「ディレクトリ」で階層付けをするという画期的な概念をパクった影響を受けた86-DOSと呼ばれる、OSがありました。
 若き日のビルゲイツ青年はコレをお買い上げして、当時は巨人と呼ばれていた超大企業のIBMに右から左へ転売OEM販売しました。
 これが後のPC-DOSと呼ばれるものでして、その後IBMとMicrosoftが仲たがいした結果で生まれたのがMS-DOSです。

 まぁ、初期のCP/Mのディレクトリは複数階層が使えなかったとか、色々と問題がありましたが、基本的な考え方は今も変わってません。
 例えば、パス区切り記号には「\」(バックスラッシュ)が割り当てられていますが、CP/Mの時代からの名残りといって良いでしょう。
 (日本語環境ではパス区切り記号が「¥」になってますが、単なる表記上の問題で文字コードは一緒です)

 これ何するものかというと、1個のディレクトリに1万ファイルあったら、その中から目的のファイルを探すって大変ですよね。
 当時のコンピュータって、とんでもなく非力でしてメモリが1KBを切ってる環境すらゴロゴロ存在していました。
 1万個・・・膨大すぎて絶望しそうな数字です。

 そんな非力な世界で上から順番に見ていって、目的のファイルが9,999番目にあったりしたら、相当ショックです。
 最悪のケースでは1万件のファイル名を確認しなければなりません。

 一見して、どこの階層に含まれているか?というのが分かるように格納されているルールを適用しておく必要がありますが、これを100個ずつに小分けにして(=ディレクトリに分散させて)、2階層に仕分けをすれば100個のディレクトリを特定して、100個の一覧からファイルをを探せばよくなります。
 最悪のケースでも合計200回の比較をすれば良いのです。
 もっと小分けにして10個ずつ、4階層に分けていれば、最悪のケースでも30個のディレクトリ名と10個のファイル名、最大でも合計40回の比較をすれば良いのです。

 配置を工夫すれば、ものすごく比較する回数が減っていきますよね。
 こういうのをコンピューターの世界では計算量と言いまして、OとかNとかの文字を使って表現するんですが(O-記法 O(log n)みたいな表記)難しい話はおいときます。
 ざっくりと計算して「平均して50倍の作業の効率化」とか「平均して250倍の作業効率化」が実現できたということになります。

 もちろん、特定のルールに従った「並び順」が適用されてると、さらに「2分木」などの検索手法によって桁違いに比較回数を減らすことも可能です。
 「2分木」の場合は、計算量がO(log2 N)といった対数で表現されるんですが、平たく言うと1000個の中から任意のアイテムを探すのに、わずか8回の比較で見つけるというテクニックでして、一般的にコンピューターの世界では「アルゴリズム」って言ってます。
 まぁ、数学パズルみたいなもんです。

 ちょっと知ったかぶった感じに、「O」とか「log」とか「N」とか、数学みたいな計算式が出てきましたが、あまり気にする必要はありません。
 文字通り「桁違いに作業量が減らせる」ということが、数学で証明できる普遍的な定理であり、それを知らない or 活用しないのは、「時間」を、ひいては「人生」を無駄にしてますねぇ・・・というのが数学的に証明できるってことです。

 そして、この作業量ってぇモノは、コンピューターにやらせるものも、人間がやる作業であっても全く同じ法則が成り立ちます。
 普遍的な定理なんで、当たり前ですよね。
 まぁ、人間の場合は「やる気」とか「気合」とか「慣れ」とか、数値化が難しいものがありますが、ディレクトリにて小分けにする事がいかに効率的であるかというのは、数学的に証明できることなのです。




 このディレクトリに小分けってモノをイメージしやすいものはコレですかね。
 最近は紙媒体の需要も減ってきたと思いますが、こんな感じのタックインデックスを見たことがある人もいるんじゃないでしょうか。

コクヨさんのホームページはこちらです。

 これも、あるルールに従って見出しを付けることで、後から目的の情報を一発で探し出すという目的のものです。
 ディレクトリ管理ってのは、このタックインデックスを貼り付けるような行為に近いものと言えるでしょう。

 またこのファイル自体も、何かしらの分類方法で分類して棚にしまいますよね。
 それはディレクトリの階層化ってぇ概念と近いものと言えるでしょう。
 棚の場所さえわかっていれば、その目的の資料を、「後から」「誰でも」探し出せるというわけです。
 ルールを知っていれば「誰でも」です。重要なので2回言いました。



 ちょっと小難しい話になりますが、モノを分類するには「抽象化」という行為が必要になります。
 下から見ていくと、「ペプシ」は「空き缶」で「アルミ」で「金属」で「資源ごみ」なわけです。
 資源ごみ
  ┣プラスチック
  ┣ガラス
  ┗金属
    ┣鉄
    ┣銅
    ┗アルミ
      ┣窓枠
      ┗空き缶
        ┣ファンタ
        ┗ペプシ
 上の階層になればなるほど、含まれるモノの数が増えてますよね。
 わりとここがキモでして、上の階層に「範囲の広い概念」の「単語」を持ってくると、分類がしやすく、分類そのものを推測しやすいという特徴があります。
 このように連想ゲームの要領で、概念の階層を作って抽象化していきます。

 これがディレクトリによる階層管理の基本です。
 ついでに応用も語っておきますが、日付や連番といった数字を使ったり、何かしらのコード体系を使うといったアレです。
 考え方としては、ファイル名のときに語った「名が体を現す」という方向でして、抽象化の反対の具体化ってぇ表現もできますね。

 まぁ、理屈で語るとファイルの整理ってめんどくさいですよね。
 そのめんどくささの本質は、この連想ゲームで脳を使う必要があるからなわけで、後から苦労しないようにあらかじめ整理しとけということです。
 ・・・私のリアル生活を知ってる方は、お前がゆーなという突っ込みを今はご遠慮ください。




 一応、フォルダーとディレクトリについても、ちょろっと語っておきます。
 フォルダーとは、記憶違いでなければ、もともとApple社さんが親子関係を持つオブジェクトの階層を示すのに使い始めた造語だと思います。
 WindowsはMacintoshのパクリ強い影響を受けていますので、そういった言葉も広く継承されているものだと思います。

 一言でいうと、フォルダーは実体がなくてかまわないんで、ファイルとディレクトリ以外に、ごみ箱とかマイコンピューターなども含まれます。
 ディレクトリは逆に、実体が存在しないものは含まれないので、ごみ箱とかマイコンピューターはディレクトリでありません。
 まぁ、あんまりこだわるべき内容じゃないですが、教養ネタということで。

※ディレクトリは任意のパスのファイルの一覧を持つファイルの一種という考え方もありますが、ここでは省略します。
 興味がある人はディレクトリとサブディレクトリの語源も意味も全くの別物ですので、「サブディレクトリ」に「サブ」が付く理由を考察してみてください。

※本当に実体が無いのか?というツッコミが入ったので補足です。
 一応、例にあげたフォルダーも実体名は存在しています。
 ごみ箱は「::{645FF040-5081-101B-9F08-00AA002F954E}」ですし、マインコンピュータは「::{20D04FE0-3AEA-1069-A2D8-08002B30309D}」です。
 これらはGUID表記といって、生成したPCのMACアドレス+作成日時を種に生成したダイジェスト値であり、わざと同じ名称のものを作成しない限り統計的にユニークとなるとされている値です。
 本当に全く名前がないと区別がつかなくなるので、こういった真の名称を持っています。
 そして、この名称はOS側で特別なものとして扱っているというわけです。

※上記のフォルダーの説明に、実体を持たない「ファイル名」を含めた記述にしています。
 例えばサンプルピクチャに存在する「菊.jpeg」ですが、実体名は「C:\Users\Public\Pictures\Sample Pictures\Hydrangeas.jpg」となっており、OSのロケール設定(現在どの地域で使われているか)によって表示が変わります。
 このようにOSが国ごとによって別名を表示させるようなものが存在しますので、あえてフォルダーの中に含めた言い回しをしています。
 正確には仮想オブジェクトって言ったほうが、より正確だと思います。


 ついでに、突っ込みが入ったので補足です。
 対極的なソリューションとしては、デスクトップ検索といった、適当に放り込みまくって検索・・・というファイル管理の方法が提案された時代もありますが、近年では用途が限定的になってきていますし、メーカーも減ってきましたし、下火になってしまいましたね。
 メリットもデメリットもあるので、どちらも良い悪いと述べるつもりはありません。
 気軽にガンガン放り込めるのはメリットですが、バージョン管理をしていて「同一っぽい」ファイルが大量に存在するような場合など、世代管理とか、よく似た内容がたくさんあるような同一グループのファイル群を探すのが困難だったりします。
 バージョンごとにソースコードのバックアップを取っておくとか、週報を大量に放り込んだディレクトリとか、事例はいくらでも挙げられますね。
 まぁ、万能な方法なんてないので、そういったメリット、デメリットを理解した上で使い分けするのが最強と言って良いでしょう。