合理的な決定が不合理な結果になってしまう事例 ~Windowのデリミタ

こんにちは。

世の中にはどうしてそうなったか、
よく分からないことがありますよね。

Windowsのファイルのパスを区切る
¥記号もその一つです。

というツイートをみて、
久し振りに頭を整理してみました。



デリミタ

この区切る文字のことを
デリミタ(区切り文字delimiter)といいます。


初めて見た時から、
なんでWindowsでは円マークを
フォルダのデリミタにしたんだろう
と疑問に思っていました。

実はこれには合理的な理由はありません。

¥マークをファイルのデリミタとして
使うことを決めた人というのは
存在しないからです。

じゃあ、なんでそうなってしまったかと言うと、
そこにはOSや文字コードの歴史があります。

MS-DOS 2.0と文字コードの簡単な歴史

OSの役割の一つに
ファイルデータの管理がありますが、

Windowsの前身となるMS-DOSには
当初は階層フォルダーという構造が
ありませんでした。


ディスク容量が少なかったころは
それでもよかったんですが、

徐々に保存するファイルが
多くなってくると
管理がしにくくなります。

ディレクトリ構造

そこで、MS DOS 2.0の時に、
UNIX などの他の OS を参考に、
フォルダ(あるいはディレクトリ構造)を
導入することになりました。

ちなみに当時はパソコンの黎明期で
「ディレクトリ」という名前は
パソコンに初めて触れる人々には
とっつきにくい単語でした。

そこで、ある時期から
現実のオフィスにある道具「フォルダ」と
名付けなおされました。

スラッシュにすればよかったのに

参考にした他のOS、とくにUNIXなどではデリミタとしては、スラッシュ(/)を利用していました。

しかし、残念なことにMS DOS には
スラッシュ記号は、既に
特別な記号として利用していました。

コマンドを制御するオプションを
示すために利用していたのです。

そこで、スラッシュに似ている
バックスラッシュを使うことに
したのが、不幸のはじまりです。

利用頻度の少ない文字コード

さて、昔のパソコンは
たくさんの文字種類を扱うことが
できませんでした。

もともとアメリカで生まれた
パソコンの文字コードには、
¥記号がありませんでした。

そこで、日本ではあまり使われない
バックスラッシュの文字コードを
通貨記号に置き換えて表示することにしました。

したがって、日本語環境での¥は
英語環境でのバックスラッシュと
同じコードになります。

そこで、日本語環境ではバックスラッシュではなく
円記号でフォルダ構造の区切りが
ディスプレイに表示されるように
なってしまいました。

エスケープ文字

もう一つの問題もあります。

それは、バックスラッシュは
プログラムの中では「エスケープ文字」
としても使われいることです。

多くのプログラム言語では、
文字列にタブ記号や改行などの
一部の文字は含めにくかったため、
バックスラッシュと組み合わせて
表記するという使い方が採用されています。

この使い方をエスケープシーケンスといい、
エスケープシーケンスを示す記号として
このバックスラッシュが使わたのです。

このような使い方がされるのも、
そもそも英語圏でも
バックスラッシュの使用頻度が
少ないからだと言えます。

合理的な決定が不合理な結果につながる

さて、MS-DOS 2.0の時にシステム変更で
階層ディレクトリを導入するのですが、
すでにユーザーがいて、システムが稼働しているので、
なるべく影響が出ないようにする必要がありました。

そうでないと、ユーザーからクレームが来ますからね。

そこで、なるべくファイル名とバッティングしないように、
デリミタとしてバックスラッシュは最適でした。


しかし、逆にこの使用頻度の少なさが
「あだ」になります。

日本語環境やプログラム言語など、
MS-DOSと直接関係のない分野でも
バックスラッシュに様々な役割が
付与されてしまったことです。

当初はそこまで不合理な決定ではなかったのですが、
結果として不合理な方式が残ってしまうというのは、
とても勉強になるケースだと思います。

誰も完全に未来を見通すことはできないので、
このような過ちは避けようがありませんが、

システムやルールを設計をするときには
覚えておきたいものです。