2010/04/16 ■ ディレクトリに置くWebページはなぜ「index.html」なのか Xでつぶやくこのエントリーをブックマークに追加このエントリーを含むはてなブックマーク


自分でWebサイトを作ったりしたことがある人ならおなじみの、そしていろんなページを見てまわっていても見かけることが多いファイル名に「index.html」というものがあります。これ、何かといいますと「URLが特定のディレクトリだった時に、自動的にチェックされるファイル名」です。つまり、


というURLを入力すると、


と同じものを表示するわけです。下のURLが本来正しいのですが、上の表記でも(index.htmlが省略されているとみなして)表示してくれるという仕組み、そんなファイル名が「index.html」。
では、これ、なんで「index.html」という名前が使われているのでしょうか。


…という導入から入りましたが、実のところ「index.html」という名前は規約などで決まっているわけではなく、サーバ側の設定でどうにでもなるものでしかありません。たとえば、MicrosoftのWebサーバであるIIS(Internet Information Service)では「Default.htm」というファイル名が標準となっていて、あえて設定しないと「index.html」は使えなかったりします。


しかし、そうは言っても「index.html」という名前は非常に広く使われています。広く使われているからには、何か理由があるはず。なぜなのか、調べてみることにしましょう。

今世界中で使われている「ウェブ」は、1991年、当時欧州原子核研究機構(CERN)に在籍していたティム・バーナーズ=リー氏が世界初のサーバと世界初のブラウザを発表したのが始まりです。この「世界初のウェブサーバ」CERN httpdはバージョン3.0で更新が終了していますが、情報はもちろんしっかりと残っています。
CERN httpd
http://www.w3.org/Daemon/
このCERN httpdの更新履歴を見てみると1994年4月5日にリリースされた2.17betaの更新内容に興味深い記述を発見することができました
・Welcome directive to specify the name of the overview page of the directory; default values are Welcome.html, welcome.html and, for compatibility with NCSA server, index.html.

「Welcomeディレクティブでディレクトリの概要ページを設定可能に;デフォルトはWelcome.htmlとwelcome.html、そしてNCSAサーバとの互換性のためにindex.htmlである。」そう、ここで「ディレクトリの概要ページ」として「index.html」が登場するのです。その理由は「NCSAサーバとの互換性のため」

古くからインターネットを使っている人はこの記述で色々思い出したかもしれません。当時ウェブの発展を牽引したのは生みの親たる「CERN」よりもむしろ「NCSA(米国立スーパーコンピュータ応用研究所)」だったのでした。NCSAが最先端のサーバやブラウザをどんどんと開発していき、CERNはむしろそれを追いかけているような立場だったのです。そしてCERN httpdは「NCSAとの互換性のため」にindex.htmlという名前を導入したのでした。

では、NCSA httpdのほうの歴史はどうなのか。ひとまずぱっと手に入る最も古いバージョン「NCSA httpd 0.5」(1993年9月)のソースリストを見てみることにします。(こちらからダウンロードしました)

httpd.h
/* Define this to be what your HTML directory content files are called */
#define HTML_DIR_CONTENT "index.html"
おおお?

http_request.c
        strcpy(name,file);
        /* Bugfix in case there's no trailing slash. */
        if (name[strlen(name)-1] != '/')
          strcat(name, "/");
        strcat(name,HTML_DIR_CONTENT);
        if(stat(name,&finfo) == -1)
            /* index file not found; get dir. list and send it back as HTML */
            index_directory(file,fd);
        else send_file(name,fd);
おおおおおお?

…というわけで、読める人はこれだけでもわかると思いますが、このころから既にNCSA httpdには「URLとしてディレクトリを指定した場合は、index.htmlがあればそのファイルを、無ければファイルの一覧を送る」という機能がついていました。今のウェブサーバと同じ動作ですね。
ここで「index.html」というファイル名が登場しますが、この「index.html」という名前は、当時は設定による変更が可能なものではなくソースコードで最初から指定されていた名前だったのです。

そして、このNCSA httpd-0.5のREADMEを見るとこんなことが書いてありました。

FEATURES
--------
o Automatic directory index files and on-the-fly index generation.
If the server finds that the client is requesting a directory, it first checks for a file, by default called "index.html" but which can be compiled to any name, and if it does not find such a file it generates an HTML index of the directory and sends it back to the client.

「NCSA httpdの機能として、ディレクトリの目次ファイルを使うことができますし、目次ファイルが無ければなんとその場で目次を生成することもできますよ!」とアピールしているわけですね。これは、NCSA httpdの「売り」の機能だったんですねえ。

つまり…

  • ウェブの歴史が始まったころは、URLというのはあくまでも「ファイルを指し示すもの」であって、ディレクトリ名を指してファイル名を省略するという使われかたはされていなかった(CERN httpd)
  • そこへNCSA httpdという新星があらわれ、URLとしてディレクトリを指すと「ディレクトリの目次ページ」を送ってくれる機能が搭載された。もし目次ページのファイルが無ければ、自動的にディレクトリの目次を生成してくれる機能も。この際の「目次ページ」のファイル名は、「目次(index)」なので「index.html」とされた。
  • 高機能なNCSA httpdが普及するにつれ、同様の機能を本家CERN httpdも採用するに至った。その際、「Welcomeページ」という意味でWelcome.htmlを採用したが、NCSA httpdとの互換性を考えindex.htmlも使えるようにした。
  • 結果として、「index.html」がデファクトスタンダード(事実上の標準)となった。
  • まとめると、「なぜindex.htmlという名前なのか」は「本来そのディレクトリのファイル目次(index)を書くものだったから」

という感じでしょうか。
ちなみに、この「NCSA httpd」はその後プロジェクトが継承され、今でも幅広く使われているウェブサーバ「Apache」となります。また、この「NCSA」という組織が作ったウェブブラウザ「NCSA Mosaic」はまさしくウェブの時代を変えた画期的なブラウザで、そのDNAはいたるところに残されていたりします。


短いようで長いインターネット・ウェブの歴史ですが、こう見るといろいろなところに昔の技術の痕跡を発見することができるものなんですねー。


■ほかの豆知識系記事
「~」←この記号の“本当の”名前
迷惑メールをSPAMと呼ぶ事なかれ。それは肉の缶詰だ。
「携帯電話が心臓ペースメーカーを誤動作させる」という話
納品を半日延ばすライフハック
自宅サーバを無届けで設置すると逮捕される?
東京タワーに隠れたもうひとつの東京タワー