Home日記コラム書評HintsLinks自己紹介
 

フィンローダのあっぱれご意見番 第128回「Infoseek統合大移転騒動」

← 前のをみる | 「フィンローダのあっぱれご意見番」一覧 | 次のをみる →

「トップページ以外へのリンクは保証しません」 と書いてあるWebページを見た経験があると思う。 保証って何、と考えると意味不明だが、 要するにコンテンツのツリーの奥深くに存在するようなページは、 配置変更や削除でアクセスできなくなったりするから、 いきなりNot Foundになっても知らないぞ、 ということなのだろう。

コンテンツのインターネット上の位置と URLとは密接に関係しているが、 Webページとしての構造は、全く別の話である。 極端なシナリオとしては、全コンテンツを1つのディレクトリに入れるというのもアリだ。 各ページの関係が整理してあれば、 見る側にとっては、URL はどうでもいいのである。 しかし、全部一箇所に入れたら管理が大変になるのでは。 意外とそうでもない可能性がある。 一般に、何にしてもきちんと分類すればそれなりのメリットがあるものだが、 そのためには、分類するというコストがかかる。 データが増えすぎたので分けなおすという面倒事の原因にもなる。 配置変更でアクセスできない状況が発生するのは、 まさにこのような時なのだ。

現実はどうだろう。 「トップページ以外へのリンクは保証しません」 と書いてあったページが移転、 暫くしたら 404 Not Found になったりするから世の中怖い。 確かに「トップ以外は保証しない」という文章は、 トップを保証するという意味ではない。 だったらわざわざ書かなくても…というのが実はレトリックである。 つまり、こう書いておけば、 何となくトップページを保証してくれそうな気になるではないか。 つまり、ちょっとズルいが、これはうまい表現なのだ。

個人的には、リンクをトップページだけにと書くのなら、 転送サービスという便利なものもあるのだし、 トップページ位は移転しない程度の覚悟を持って欲しいと思う。 ただ、恐ろしいことに、転送サービスのURLが変更になりました、 なんて訳の分からないことも意外とあったりするから、世の中油断できない。

§

自分の意志とは無関係に移転するしかないことも、よくある。 例えばプロバイダの消滅・移転。 これは仕方がない。 プロバイダの一方的な都合でURLが変わることもある。 これはちょっこ困る。 無料の個人ページでは大手の Infoseek JapanとHoops!が統合することになった。 Infoseek は freeweb からの URL 変更の時にも、 世界中の freeweb へのリンクを isweb に付け替える…というのは大袈裟だが、 一時的にドタバタした思い出がある。 無料ページだからユーザーもあまり強く出られないのが、 URL がこのように簡単に変更されると、 ページの開催者だけでなく、見る人も困る。 freeweb の URL を指定すれば、 自動的に isweb のどこに移転したかを知らせるページが表示されるのだが、 それがフレームの中のページだったりすると結構面白いことになってしまう。

§

プロバイダが URL 変更のデメリットを全然理解していないのか、 ドタバタ劇はまたもや演じられることになった。 再び isweb の個人ページの URL は、全て変更になったのだ。

実は、freeweb から isweb への変更では、 wwwNN.freeweb.ne.jp/* を iswebNN.infoseek.co.jp/* に変換するという、 機械的対応ができた。 今回は恐ろしいことに、この種の技が通用しないのだ。

今回の URL 変更は、 iswebNN.infoseek.co.jp/XXX/* を、 XXX.hp.infoseek.co.jp/* に置き換えるという基本ルールになっている。 そういえば、 Webが流行し始めた頃にHewlett-Packerd 社が「hpはhome pageではありません」という広告を出した。 伝説になっている。 同社はインターネットの普及に大きく貢献した企業の一つだったからか、 識者はこの要望を尊重したものだ。 今となっては hp というのはまず home page、 という社会的認識になってしまったのかもしれない。

さて、何が困るかというと、 この変換ルールだと、URL が衝突するのである。 統合するというだけでも衝突は避けられないが、 数字がカットされるために、衝突率はさらにupする。 もし衝突した場合、 Hoops! から移転したサイトなら XXX-hp.hp.infoseek.co.jp/*、 isweb からなら XXX-web.hp.infoseek.co.jp/* にすることで回避することになっている。 それでもまだ衝突したら XXX-webNNNN.hp.infoseek.co.jp/* にするそうだ。 但し、ここで NNNN はランダムな番号なのである。 これでは機械的に処理できそうもない。

どこに移転するか不明だというのなら、 元の URL のままにしておけば、 移転先にリダイレクトしてくれるのでは? 6か月間は転送するらしいが、その後どうなるかは定かではないというので、 それもダメ。 無料ページというサービスに多くを期待するのは傲慢なのかもしれないが、 URLがしばしば変更されるとWebの特徴を損なうというのも事実だし、 それを一番身近に感じるのはユーザーなのだから、 だとすると、一般論として、そういう発想のプロバイダの将来は暗いと思う。

§

あまり知られていないが、CGサイトのリンク集は健在である。 ただ、RIMNET のシェルサービスが事実上使えなくなってしまったので、 cgiはできるだけRIMNETから撤収して、自宅のサーバに置き換える予定にしている。 正確にいえば、シェルサービスは使えるのだが、 RIMNET のアクセスポイントから繋がないとダメ、という仕様に変更されたのだ。 こちらはBフレッツを@niftyで接続しているので、繋がらないことになる。 もちろん、ISDN からRIMNETのAPへダイアルアップすれば接続可能だが、 100Mbpsの回線があるのに64kbpsで作業しろというのは、 要するに「使うな」と遠まわしに言っているのに等しい。

もちろん、RIMNETの事情は分かる。 とはいえ、 実際、理論値100Mbpsで常時接続している回線上に、 自分で全てコントロール可能なサーバが稼動しているのだから、 今となっては、RIMNET内で限定された機能を使う必然性がないのだ。

§

そのCGサイトのリンク集だが、 iswebのサイトが数百含まれている。 最初は手作業でチェックしてみたが、 少しやってみて、すぐに馬鹿馬鹿しくなってヤメた。 「コンピュータにできることを人間にさせるな」という言葉がある。 人間が好きでやるのは構わないが、強制させられるのはたまらない。 という訳で、自動的にチェックするプログラムを書くことにした。

はて、どうやってチェックすればいいのか? 単純に考えてみる。 元のURLを指定して、レスポンスコードを受け取る。 移転していたら、isweb は 302 というレスポンスを返してくる。 これは移転したぞという合図で、ヘッダーの Location を見れば、 移転先が分かる。 簡単じゃないか、とか思ったあなたは甘い。

実はこの Location は、 isweb の統合によって URL がどう変更されたかを教えているだけなのだ。 先ほど、そういう発想のプロバイダの将来は暗いと書いたが、 それがここで実証される。 要するに、isweb やめて他のプロバイダにした、という人も結構いるのだ。 するとどうなるか。 ブラウザには「ご指定のページはありません」という趣旨の画面が表示される。 この画面、どうやって出しているのだろう? 実は、指定した URL に該当するサイトがない場合に、 サーバーは 404 Not Found とか、 403 Forbidden というメッセージを表示する画面にリダイレクトしているのだ。 そして、 この時のレスポンスコードは何と 200 なのである。 もちろん、リダイレクト先のエラー画面は正常に表示されるから、 そういう意味では200 というのは間違いではない。 ただ、少なくとも、 該当ページがアクセスできない場合に一番返ってきそうな400番台のレスポンスコードは絶対に返ってこないのだ。

という所まで分かれば実は簡単で、 リダイレクトで指定されたページに対して、 もう一度レスポンスコードを調べるるいい。 302 というレスポンスが返ってきたら、 そのページは消滅しているのだろう。 現存していたら、この時点で 200 が返ってくるだろう。 もちろん、 現存しているページが「引っ越しました」という内容かもしれないので、 油断はできない。 という感じで書いた大雑把なjavaのコードの断片が List.1 である。

--- List.1 移転チェック ----

  private String getNewURLString(String s) {
    URLStatusBean usb = new URLStatusBean(s);

    s = checkStatus(usb); // 移転していたら移転先URL
    if (s == null)
      return null; // 302 以外の場合

    // 移転先に対してさらにもう一レベル確認する
    usb.setURL(s);

    // 新しい URL がセットできたら、次の結果は0になる
    if (usb.getResponseCode() != 0)
      return null; // setURL に失敗した

    checkStatus(usb);
    if (usb.getResponseCode() != 200)
      return null; // 移転先アドレスが正常にアクセスできない。多分 302

    return s;
  }

---- List 1 end ----

URLStatusBean というのは勝手に作ったクラスなのでAPIのリファレンスとか見ても出てません。 すみません。 これは単に URL と int の2つの private なデータと、 それに対する setter、getterを持っているだけのクラスだ。 checkStatus というメソッドが、 その結果として移転先とレスポンスコードという2つの状態を呼び出し側に知らせたいためにややこしいことになっている。 書き方としては、URLの文字列だけ指定して、ursStatusBean = checkStatus(url) みたいな処理にすべきかもしれない。

結局、こうやって調べて、 リンク一覧から357サイトを自動変換することに成功した。 中には「探さないでください」というサイトもあるので、微妙ではあるが。 この種の引越し先データベースがあれば便利だと思う。 多分既にあるんじゃないか。

  

(C MAGAZINE 2003年2月号掲載)
内容は雑誌に掲載されたものと異なることがあります。

修正情報:
2006-03-02 裏ページに転載。

(C) Phinloda 2003-2006, All rights reserved.