Hatena::ブログ(Diary)

winplusの日記 このページをアンテナに追加 RSSフィード

2011-04-17

WebアプリケーションとWebサイト

先日につづいて、『RESTful Web Services Cookbook』の著者であるSubbu Allamarajuさんの記事Subbu’s Blogを適当訳しました。

私はやっと最近の「hashbang」批判の騒動に追いついたところだ。すべての批判のなかで、Ben Cherryの記事がいちばん興味深かった。Benが指摘するポイントはこうだ。Webは「昔ながらのWebサイト」から、HTTPをつかって提供される「デスクトップ級のアプリケーション」へとゆっくりと移行してきており、「hashbangは(この移行の:引用者)伝達者という不運な位置にある」。そのあと彼はこのような主張を続ける。

しかしながら、twitter.comをhashをつかったアプリケーションに仕立てるなかでトレードオフを行った。twitter.comはいまのところ、同時にwebアプリケーションとwebサイトの両方であることはできない。

この手の議論はよく見かけるし、厄介なものだ。ブラウザーの「戻る」ボタンの管理が困難なことに気づいたり、「単一ページのアプリケーション」を弁護したり(ありがたいことに、Web 2.0は昔話になった)、メモリー上のセッションがタイムアウトしたときにサイトのページの状態が初期化される経験をしたりしたweb開発者から似たような議論を聞くことがある。これらはどれも利用者にとって都合が悪い。どれをとってもインターネットの相互運用性とユーザビリティを損なっている。インターネットは相互運用性をもつ数多くのプロトコルとフォーマットに合意することで機能している。だからこそ、エージェントやサーバー、それにそれらのプロトコルを理解して利用者に一貫した振る舞いを提供するような媒介物のコードを書くことができる。「アプリケーション」としてブランド化することが、ユーザビリティを、さらに重要なことに相互運用性をトレードオフすることにそのままつながるべきではない。

webアプリケーションはwebサイトと別物だろうか?webアプリケーションの開発者ならYesと答えるだろう。でも利用者はNoと答えるだろう。リッチな機能をひとつのページにまとめようとしている開発者にとっては、静的な一直線のHTMLページを提供することとUI/UAのイベントに結びついた複雑なユーザーインターフェースとの違いは大きな影響があるだろう。でもほら、ユーザビリティの議論を開発者の帽子をかぶったまま行ってはいけないんだ。利用者の帽子をかぶるようにしよう、利用者の視点から考えるようにしよう。利用者にとって、インターネットはたったひとつしかない。利用者が「インターネットに接続する」のはものごとを行うためだ。リッチな操作性を提供するためにどんなテクノロジーを選んだかなんて、利用者には関係ない。

hashbangの場合のほんとうのトレードオフは何なのか?トレードオフは2種類のクライアントのあいだにある。Javascriptをサポートしているクライアントと、サポートしていないクライアントのあいだだ。それは合理的なトレードオフだ。Twitterはhttp://twitter.comをJavascript対応のブラウザーのために表示することを選択した。たぶん、Javascript非対応のブラウザーをつかう利用者の割合をみて、その選択を行ったのだろう。

Twitterの場合、Benがいうことによれば、HTML5のHistory APIが助けになるかもしれない--でもそれは一部にすぎない。またGawkerのようなサーバーはURIのフラグメント部分もふくめてページが同一かどうかを決定している--これは残念なことだ。たとえば、コマンドラインからの2つのGETリクエスト

curl -v http://gawker.com/
curl -v http://gawker.com/\#\!5769800 # escaped hashbang

は、サーバーから同じレスポンスを持ち帰ってくる(いくつかのタイムスタンプとヘッダーは別として)。フォワードプロキシーがクライアントの前にあれば、だぶったレスポンスでキャッシュをいたずらに消費してしまう。大したことなのか?そうであることもあれば、そうでないこともある。インターネットのポイントは相互運用性にあるんだ。相互運用性がないと想定外の再利用が妨害される。サイトをアプリケーションとしてブランド化することは、意味のない気休めにすぎない。

WebアプリケーションとWebサイトを区別しないという考え方は、id:yoheiさんの『Webを支える技術 -HTTP、URI、HTML、そしてREST』にも記述されています(P243〜243)。

リソースを設計する際にとても大切なことがあります。それは、WebサービスとWeb APIを分けて考えないことです。(中略)同じ技術を使って同じアーキテクチャのもとで作られているのに、なぜ両者を分ける必要があるのでしょうか。

id:yoheiさんの場合はリソース設計に焦点をあてているために上記のような記述になっているのでしょう。Subbu Allamarajuさんの場合はインターネットの相互運用性とユーザビリティに焦点をあてて、両者を区別しないように勧めています。先日の記事でも、そうでした。もちろんリソースだけでは役に立たなくて、リソースの操作方法やそのフォーマットにも相互運用性が必要なのでは間違いないので、id:yoheiさんの立場も、Subbu Allamarajuさんとそう離れたものではないでしょう。さらにいえば、Ben Cherryさんもトレードオフだとしているのですから、原則としてはSubbu Allamarajuさんの立場を支持するでしょう。

Subbu Allamarajuさんの立場はまさに正論なのですが、この記事の場合からは、あまりにRESTafarian過ぎる印象も受けます。でも、その頑固さこそがインターネットを成功させた要因でもあるのです。うーん、どうなのでしょうか?

※「hashbang」批判については、以下の記事に見事にまとめられています。

さらなる「#!」URL批判 - karasuyamatenguの日記

Tim Bray: 「URLに#!入れるな」 - karasuyamatenguの日記