Kentaro Kuribayashi's blog

Software Engineering, Management, Books, and Daily Journal.

Ajax が切り開く Web アプリケーションの進化

新しいものに目がない誰もが、Google の各プロダクトや Flickr, A9.com 等が提示する新しい Web インタフェイスに触れ、殊更な興奮に満ちた書きぶりでエントリを起こすことはないまでも「これはなんかすごい! かっけー!」とその動向を密やかに探っていたのは、それらのアプローチが Ajax と名付けられた途端、それまで間歇的にしか口にされることのなかったその技術が、Ajax という名のものとしてみるみる間に人口に膾炙したことからも明らかです。

この Blog においても、Ajax というか、それ以前に Google によって喚起された JavaScript の新たな面白さに発奮させられ、ほんの些細な実験等を行ってきました。主に海外のリソースにあたり、その周辺技術を調べていた最中、ma.la と名乗る方による日本語のリソース群を発見するにいたります。

Google 等が垣間見せた Web インタフェイスの新たな姿、パラフレーズすれば Web アプリケーションのプレゼンテーション層は今後大きく変貌することになります。その中の一部のアプローチが先日 Ajax と名付けられ、広まりつつあるわけです。今後、たくさんのひとが具体的な実装、またフレームワークという形での統合を進めていくでしょう。しかし、しばらくの間は上にリンクした Blog, Wiki で ma.la 氏が(数年前から)提示してきた実装・アイディア・ヴィジョンを超えることはありません(断言)。ma.la 氏は、次回の Wiki ばなのプレゼンタとして、とんがった機能を持つ、Wikiの未来を見せるアプリ群について、そのとんがり部分について存分に見せることになるようです。なにがなんでも参加したいけど、無理です……。

先日、この Blog で行った antipop2.0 のタイトル全文インクリメンタル検索は、それはそれで全く面白くないわけではない、それなりに好意的な反応を得られたものでした。しかし、そんなものは ma.la 氏が数年前から実践していることの、劣化コピーに過ぎません。エントリのタイトル「Movable Type な Blog の全エントリを JavaScript with XMLHttpRequest でインクリメンタル検索する」が示すとおり、実際には、これは Ajax というようなものではありません(Asynchronous ではないので)。また、この程度の実装であれば、わざわざ対応ブラウザの限られる XMLHttpRequest を使うことなく、サーバ側で JavaScript の配列をコードとして書き出し、それをクライアント側にロードさせてやる方が、アクセス性という観点からは優れています。

しかし、それをなぜ JavaScript with XMLHttpRequest という形で実装したのか。それは、Ajax と呼ばれもするアプローチが示す可能性の一部である、検索やナヴィゲーションにおけるパラダイムの変化の兆しを自分でも実際にサンプルを作ってみることにより、実感するためです。その変化とはつまり、ナヴィゲーションの解釈や検索を実行する主体のサーバサイドからクライアントサイドへの移行ということです。具体的に考えてみましょう。

まずはナヴィゲーションについて。たとえば Google で検索を行う場合、一画面におさまり切らない検索結果は、ページ下部にて数字や「前へ / 次へ」といったナヴィゲーションにより、次以降が存在することを知らされます。そして、次ページへ移る際には、「次へ」あるいは数字によるリンクをクリックし、サーバがなにか処理しレスポンスを返すのを待ちます。これは、「Ajax: Web アプリケーション開発の新しいアプローチ」で述べられている、典型的な旧来型の Web アプリケーションの動作です。ここで、考え方を変えてみます。Ajax の発想によれば、「なぜそこで待たなければならないのか」ということになります。次ページ・前ぺージの結果などというものは、クライアントに先読みしてしまえばいいわけです。これまでサーバ側で行っていた処理を、いまや通信回線も処理能力も飛躍的に高まってきているクライアントへ委譲すること。先読みとはいっても、必要とするデータはたかが画像一枚程度のものです。

検索について。これはこの Blog で行ったタイトル全文インクリメンタル検索の例が示す通り、1,000 件あるいは数千件程度の小さなレコードの固まりを検索するのに、クライアントからのリクエストがあるたびにサーバサイドでいちいち処理をしてやる必要はないのです。そのとき、サーバはあらかじめ作成しておいたデータの固まりをぽんっとクライアントにわたしてやるだけでよい。検索を実行するのは、クライアント上で動く Ajax エンジンです。そして、サブミットされたデータを処理したり、インタフェイスを生成するコードが追加で必要になったり、新たにデータを取得したりするためになにかをサーバに任せる必要があったりした場合に、ユーザとアプリケーションとのやりとりを失速させることなく、エンジンは、通常は XML を用いて、非同期にリクエストを発行すればいいのです。

この、検索とナヴィゲーションにおけるパラダイムシフトは、しかしまだ一般化されているわけではありません。そもそも実装するにも、多大な困難が立ちふさがるであろうことは目に見えています。しかし、Google のインタフェイスがこのようになったとしたら……と考えてみると、触っていてとても気持ちのいい、使いやすいものになることが容易に予想しうるのではないかと思います。Web の限界について我々が知っていると思っていることを忘れ去ること。そして、もっと広く、豊かな可能性に思いを馳せること。ここで述べたのは(また、僕が理解し得ることは)ほんの触り程度のことですが、しかし、Web はこれから間違いなくもっと、ずっと楽しくなります。