2018-08-29

Imageタグとはなんなのか

私は古い時代のネット文化に並々ならぬ興味を持っている。しばらく前にCSSで使われているカラーネームの由来を調査したが、最近ブラウザで画像を表示する時のHTMLタグについて新たに気になることを見つけてしまった。

ブラウザでインライン画像(つまり文章中の画像)を表示するとき、以下のように記述する。

<img src="https://example.com/image.png"> 

閉じタグをどうするかとかCSSでも表示できるとかあるが、しかしみんな概ねこうやってかく。ところでこのimgタグ、なんとエイリアスが存在している。上のタグは、以下のようにも記述できるのだ。

<image src="https://example.com/image.png"> 

実はimgではなくimageでもブラウザは画像を表示させるマークアップであると解釈し、imgに変換して表示するのだ。HTMLタグには似た要素もたくさん存在するが(<em><strong><b>みたいなね)、全く同じ意味合いで、ただのエイリアスとして存在するタグはこれ以外にはない。HTML5の仕様にはこのようなタグは存在しないものの、主流なブラウザでは軒並み実装されている。

Web系の開発者が日々参考にしているMDNには以下のような記述がある。(引用は日本語版から) https://developer.mozilla.org/ja/docs/Web/HTML/Element/image

廃止されたHTML 画像要素 (<image>) は、時間の霧の中で失われた古代版の HTML の廃止された残骸です。 これは一旦は仕様書に入る可能性がありましたが、誰も覚えていないようです。確かにそのようになっていません。ペストのように避けてください。

right時間の霧の中で失われた古代版のHTMLの廃止された残骸」「ペストのように避けてください」という風変わりな表現で非推奨タグであることを説明している。誰かが過去HTMLにこのタグを追加したものの、現在に到るまで使われることなくブラウザの深層でひっそりと生きながらえてきたようだ。しかしそれも時間の霧の中で忘れ去られそうになっている。一体なぜこのようなことになっているのだろう。

まずはじめにHTMLの最初期のバージョンにおいて、画像がどうやって表示されていたのかを調べてみよう。現在主に使用されているHTMLは2014年に勧告されたバージョン5というもので、W3Cによって勧告されている。W3Cが生まれる前までのHTMLは、その仕様をRFCで管理されており、つまりIETFによって策定されていた。現存する最古の公式な仕様はバージョン2のもので、内容は以下のURLで確認できる。

Examples of use:
    <IMG SRC="triangle.xbm" ALT="Warning:"> Be sure
    to read these instructions.
    <a href="http://machine/htbin/imagemap/sample">
    <IMG SRC="sample.xbm" ISMAP>
    </a>

https://tools.ietf.org/html/rfc1866

Section 5.10を見ると、すでにこの段階でIMGタグが存在していることがわかる。そしてそのIMGタグにエイリアスは仕様上で定義されていない。サンプルコードで使われている画像ファイルの拡張子がXBMなのがなんとも趣深い。ソラリスなんかを使っていたおじさんたちは懐かしく思うのではないだろうか。そんなHTMLのバージョン2が策定されたのは1995年。というわけでさらに古い仕様を探す必要が出てきた。さてバージョン1の仕様はどこにあるのだろう。調べてみると、1993年の6月にIETFのIIIR Workingグループによって提出されたHTMLのアンオフィシャルな仕様書がインターネットドラフトとして公開された。当たり前のことだけど、バージョン1を作る時点ではそれをバージョン1と呼ばれることはあまりない。バージョン2が現れたときに初めて旧存在がバージョン1と呼称されるのだから、この時点ではバージョン番号はついていないが、ここでは便宜上バージョン1と呼ぼう。公開は1993年6月となっている。

  EXAMPLE
  
        Warning: < IMG SRC ="triangle.gif" ALT="Warning:"> This must be done by a
        qualified technician.
        < A HREF="Go">< IMG SRC ="Button"> Press to start</A>

17ページを見てみると、なんとここで使われているタグも<IMG>だった。エイリアスも定義されていない。一番最初のHTMLですら<IMAGE>タグは使われていなかった。現存する最古のHTML仕様書にも存在しないタグだったのだ。エイリアスを追加する理由が見つからない。 さらに調べてみると、IMGタグ誕生の瞬間が古代のメーリングリストのログに残っていた。マーク・アンドリーセンという当時22歳の男子学生の投稿が以下である。あのティムバーナーズリーも議論に参加している。

Marc Andreessen ([email protected])
Thu, 25 Feb 93 21:09:02 -0800
I'd like to propose a new, optional HTML tag:
IMG
Required argument is SRC="url". 

というわけで、IMGタグについてはそれが提唱された当時からずっとIMGタグのままだった。どこかのタイミングでIMAGEだったものがリネームされたわけではないことだけはわかる。余談だが、この投稿をしたマーク・アンドリーセンはこの直後に起業してNetscape Navigatorというブラウザを開発し、1995年に株式公開をしたことでアメリカを代表する大富豪になった。世界初のインターネット長者だろう。彼はその後、AOLやFacebook、HPの取締役を経て現在はベンチャーキャピタルを運営している。

HTML1にも2にも存在しないタグであることはわかった。希望は薄いが、ついでにHTML3系の仕様も確認してみる。3.0のドラフトは策定中に破棄されてしまい勧告にはいたらず、3.2は勧告された年に4.0が勧告されたため、結局どちらもほとんど使われないまま消えていってしまった。そんな仕様書を探してさぐってみてもIMAGEタグについての記述はない。

HTML3.0の仕様書 https://www.w3.org/MarkUp/html3/html3.txt
(3.1は欠番)
HTML3.2の仕様書 https://www.w3.org/TR/2018/SPSD-html32-20180315/#img

となるとIMAGEタグが導入されたのはHTMLではないのかもしれない。HTMLの拡張にもいくつかあるので、それらの仕様をのぞいてみよう。きっとそのHTML拡張にNNやIEが対応した結果、明確なHTML仕様に組み込まれないままぼんやりと受け継がれているような気がしてきた。IEもNNも先進的な機能をどんどん生み出し、「これがHTML3だ!」と言い張るような状態が続いた。次世代のWebはこうあるべきだ、という想いと次世代Webブラウザのシェアを賭けた争いがこれ以上なく盛り上がっていたころで、のちにこれは第一次ブラウザ戦争という名前で呼ばれるようになる。

そんな中、HTML3とは別のルートで発展を遂げたマークアップ言語も存在した。その一つにHTML+という初期の(勧告されなかった)拡張規格がある。数式をかけたりフットノートを記述できたりといった、学術論文を書くための改良が多数加えられた規格だったらしい。ごくわずかながら発展の兆しについて語る記述も見つかるが、それでもやはりほとんど利用した形跡は見つからない。 私がみた中だと、インターネットマガジン バックナンバーアーカイブに小さいが紹介があった。多くの人々の記憶からは失われてしまったであろうこのHTML+の仕様は、現在でもW3Cで配信されている。

その中のセクション5.9 Imageに以下の記述を発見した。

Not all display types can show images. The IMAGE element behaves in the same way as IMG*1
but allows you to include descriptive text, which can be shown on text-only displays:
<image align=top src="http://spoof.cern.ch/people/tbl.gif">A photo of
 Tim Berners-Lee</image> Before coming to CERN, Tim worked on, among
 other things, document production and text processing. etc.
On text-only displays, the text within the IMAGE element can be shown in place of the image:
[A photo of Tim Berners-Lee] Before coming to CERN, Tim worked on, 
among other things, document production and text processing. etc.

画像の表示できない環境では、画像の代わりにテキストを表示させることができるタグです、ということらしい。今でいうところのimg[alt=ここの文字列]のことだろう。やっと見つかった。

当時のプロプライエタリなブラウザがどのように開発されていたのかわからない以上、ここから先は想像する他ないがおそらくはこういうことだろう。HTML+で策定された代替テキスト表示機能を備えたIMAGEタグを当時のブラウザに実装したが、その後HTML3.0で代替テキストを表示する機能が現行のIMGタグに実装された。HTML+の中でデザインされたものが適宜形をかえHTML3.0へシフトしたのも1993年のことだった。そんなごくわずかな時期に実装されていたが、その後のHTMLでは仕様からは削除されたものの後方互換性を保つためなのか残り続けていると。これならMDNに書かれていた言葉も合点がいく。

廃止されたHTML 画像要素 (<image>) は、時間の霧の中で失われた古代版の HTML の廃止された残骸です。

まさしくその通りだ。夢いっぱいのHTML+規格に含まれていたたくさんの要素のうち、実装の簡易なIMAGEタグを時のブラウザが実装し、その後HTML+自身が時間の霧の中で失われてしまったのだ。初期のブラウザが中途半端に実装してしまったために今もインターネットの一部であり続けている素片の由来、それがやっとわかった。

HTML+の仕様書(というかこれはデザインの紹介に近い)の奥付には、作者の名前が記されている。

David Raggett, Hewlett Packard Laboratories, October 1993.

David RaggettはHTML+がHTML3に発展的に受け継がれた時も、そしてその後のHTML4.0やXHTMLにも仕様策定者として参加していた。現在もUKにすんでおり、60歳を超えた今もW3Cのメンバーとして精力的に活動しているようだ。

HTMLというマークアップ形式が現れてからすでに25年経過している。ティム・バーナーズ・リーという一人の物理学者がCERNで作ったマークアップ言語がこれほどまでに我々の生活に染み渡り、一体化した状態にあることには感動を覚えるほかない。この時代に生まれたことに感謝するばかりだ。インターネット最高!