素歩人徒然 円記号 技術者のエゴ
素歩人徒然
(13)

円記号


── 技術者のエゴ

 最近の私は、専らHTML言語で文書を作りそれをまとめてFTP(注1)でサーバーマシン上に転送(インストール)することを繰り返している。インストールする先は自分の個人ホームページだったり、会社の一般向けホームページあるいはイントラネット上の社内ホームページだったりと様々である。社内のちょっとした連絡や情報の公開などはイントラネット上にファイルを置くだけで済ませることの方が多くなってきた。しかし最初の頃は幾度となく同じ間違いを繰り返したものだ(もう二度と同じ間違いはしまいとその度に心に誓ったものであるが‥‥)。
【注1】File Transfer Protocol の略。

 文書作成に用いている自分のマシン環境ではブラウザで正しく表示されていたのに、サーバーマシン上にインストールしてみると不具合が発生するのである。特に画像ファイルが未定義となり画面に表示されないことで事が露見するケースが多かった。そしてその度に、私は心の中で舌打ちしながら嘆息するのだった。「あれまぁ、またやってしもうた!」

 間違いの原因は実に他愛のないことなのである。ディレクトリを区切る記号(ディレクトリセパレータ)として“\”を使ってしまうからなのだ。私のマシン環境(Win95)では円記号でよいのだが、サーバーマシンはUNIXマシンであることが多く、ディレクトリセパレータとしては斜線“/”を使わなければならない約束になっている。特定のファイルにアクセスする経路を示すファイルパスは、両OSでたとえば以下の様に表現方法が異なる。

..\..\mydoc\netsoft\index.html(Win95の表現)
../../mydoc/netsoft/index.html(UNIXの表現)

 MS-DOSやWin95を使っていて、ディレクトリセパレータの“\”を見る度に私は思うのである。これはまた、何と汚らしい表現なのだろうかと。

 Multicsのファイルシステムで、初めて階層構造を持つディレクトリという概念が導入されたとき、ディレクトリセパレータは“>”と“<”が使われていた。“>”で階層構造を下方にたどり、“<”で上方にたどるのである。これは視覚的にも納得がいく表記法である。先の例をMultics流に表現すると以下のようになる。

<<mydoc>netsoft>index.html(Multicsの表現)

 あぁ、何という美しい表現であることか!

 Multicsを真似てUNIXを作った連中は、Multics流の表現法をそのまま受け継ぐことを嫌い、ディレクトリセパレータとして斜線“/”を使うことにした。何しろ彼らはMulticsを批判するところから事を始めたのだから、Multicsの仕様を真似るのを潔しとしなかったのは当然のことであったろう(私には、単に技術者のエゴとしか映らないが)。実は不幸はこのときに始まったのである。

 “/”は“>”と同じで、ディレクトリを下方にたどることを意味する。一方、上に向かう“<”の記号は“../”を用いることにした。何というお粗末な表現法であることか。彼らは“..”を親ディレクトリを表すものと定義したのであるが、それにしても“../”がどうして上にたどる意味になるのか、視覚的に見て私にはどうにも合点がいかないのである。何とも不思議な表記法ではある。

 一方、UNIXを真似てMS-DOSを作った連中は、UNIX流の表現をそのまま受け継ぐことを嫌い、ディレクトリセパレータとして逆斜線“\”(注2)を使うことにした(これも、エゴ以外の何物でもない)。
【注2】正確には半角の逆スラッシュ(reverse slash)である。
後で説明するように、不幸にして日本ではこれを表現することができない(!)。

 MS-DOSを作った連中は、ディレクトリセパレータの表現を変えただけでなく、スイッチ文字の表現も変えてしまった。UNIXでは、コマンドのオプションを指定する文字としてマイナス記号“-”が使われていたが、彼らはこれすらも採用することを潔しとせず(これもエゴじゃ)、わざわざ(何と!)“/”に変えてしまったのである!

who -all  (UNIXの表現)
who /all  (MS-DOSの表現)

 しかしファイルへのパス名は、インクルードファイルの表現などとしてCのプログラム中で直接記述されることが多い。UNIX環境で作られたプログラムをそのまま他のOS上でも使えるようにしたければ、ディレクトリセパレータとして“/”も受け付けるようにしないとCプログラムの互換性を保つことができない。マイクロソフト社といえども、勝手にディレクトリセパレータの表現法を変えることはできないことに彼らは後になって気が付いた。その結果(パソコン系のCコンパイラに限っては)Cプログラム上ではディレクトリセパレータとして“/”も“\”も許すようにせざるを得なくなったのである。

          Multics   UNIX   MS-DOS/Win95
 セパレータ文字   >, <    /     \(日本では \)
 スイッチ文字    -       -     /

 したがって、パソコン環境下でCプログラムを作る人は、ディレクトリセパレータとしては“/”を使っていれば問題は起らないように思える。しかし残念ながらこの表記は、MS-DOSのコマンドレベルでは通用しない。そういう訳でパソコンユーザは、“/”と“\”とを適宜使い分けなければならないことになった。まことに不幸なことではある。その不便を避けるため、MS-DOSではUNIX流の表記に切り替えるオプションが用意されていた(今はどうか知らない)。

 では、なぜ日本ではディレクトリセパレータとして“\”ではなく“\”が使われているのか。それはJISコードを定めたときの、信じられないような判断ミス(?)によるものである。JISコード決定の際に参考にしたのはANSIコード(当時はANSと言った)であるが、その通貨記号の欄のドル記号$をそのまま素直に円記号¥に置き換えればよかったのである。しかし、日本では円記号もドル記号も両方とも使いたいという無茶な要求があり(「無茶ではない!」と反論する人は多かろう)、それを認めてしまったことが後の混乱を引き起こす元凶となったのである。ドル記号の欄はそのままにして、円記号をどこかあまり使い道のなさそうな記号の欄に押し込んでしまおうと謀ったのである。その結果、逆斜線“\”がやり玉に上がってしまった。こんな変な記号は、まず誰も使わないだろうと彼らは考えたのであろう。

 MS-DOSの開発に携わっていた頃のことであるが、ディレクトリセパレータとして“\”を使うのに、美的感覚からいってどうにも我慢できなかった私は、ものは試しとマイクロソフトの技術者に向かってこう主張してみた。「東芝は“\”(日本では“\”)の代りに“/”を使うことにしたい」(前述したように、切り替えるオプションが用意されていたから、省略時解釈を変えたいと主張したのである)。すると彼らは「構わないけれど、それではMS-DOSではありませんよ」とぬけぬけと言うのであった。マイクロソフト社から“MS-DOS”というお墨付きがもらえないとしたら、これは一大事である。そう言われて私はたじたじとなり、残念ながらそれ以上の抗弁はできなかったのである。しかしその時のことを後で思い返すたびに、あの時すかさずこう言い返してやればよかったと再々思うのである。「なら、東芝はMS-DOSの契約料を払わなくてもいいんですね」と。

 こういった長い長い経緯があり、その結果として私は今なお“/”と“\”とを間違えるという醜態(我ながらドジだなぁ)を日々演じている有り様なのである。あぁ。

 HTMLを使って書いた文書は、どんなマシン上でも、どんなブラウザ上でも支障なく動作すると言われている。しかし我々はこれを安易に信じてはなるまい。HTML言語はネットスケープ社とマイクロソフト社の争いの中で(誰が決めているのかは知らないが)仕様変更を繰り返しているように見える。両社の技術者は、他社の導入した新規の仕様を“そのまま採用するのを潔しとしない”エゴをまる出しにして必ず独自の表記法を導入してくるであろう(Java言語では既にそうなりつつある)。ディレクトリセパレータの二の舞にならなければよいのであるが。

 ただ、HTMLはプログラム言語である。プログラム言語というものは(私の拙い経験によれば)必ず互換性の問題を引き起こすよう運命づけられている(Javaといえども例外ではなかろう)。したがってこれは技術者のエゴだけではなく、プログラム言語として決して避けては通れない宿命のようなものなのかもしれない。■