世の中にはどうしてそうなったか、
よく分からないことがありますよね。
Windowsのファイルのパスを区切る
¥記号もその一つです。
マイクロソフトが犯した、最も古く、最も重大な過ちって、MS-DOS 2.0で階層ディレクトリを導入したときに、デリミターをスラッシュではなくバックスラッシュにしたことじゃないかと思ってる。あれから何十年も経つのに、いまだに不便だ。— 岡田哲哉 (@t_okada) 2019年2月10日
というツイートをみて、
久し振りに頭を整理してみました。
デリミタ
この区切る文字のことをデリミタ(区切り文字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と直接関係のない分野でも
バックスラッシュに様々な役割が
付与されてしまったことです。
当初はそこまで不合理な決定ではなかったのですが、
結果として不合理な方式が残ってしまうというのは、
とても勉強になるケースだと思います。
誰も完全に未来を見通すことはできないので、
このような過ちは避けようがありませんが、
システムやルールを設計をするときには
覚えておきたいものです。