AJAXは洗剤の名前!?
スパムメールの“スパム”が、もともとアメリカに古くからあるハムの缶詰の商品名をもじったものだと知らない人はいまどき少ないだろうが、最近話題の“Ajax”(エイジャックス:Asynchronous JavaScript and XML)が、アメリカで販売されている洗剤のブランド名をもじったものだと知らない人はいるのではないだろうか。
AJAXは、米国で1947年から販売されている洗剤のブランド名でもある |
WikipediaでAjaxの項を引いて、もう少し“Ajax”という名前の元をたどると、それはギリシア神話に出てくる英雄の名前だったり、小惑星の名前だったり、はたまた16世紀末にイギリスで発明された水洗トイレのことだったりするようだが、ここでは、それはどうでもいい。
IT業界では昔から製品名やプロジェクト名を付けるときに、まず略称ありき、という遊びがよく行われる。たとえば東京工業大学の大規模分散スパコン、“TSUBAME(ツバメ)”という名称は“Tokyo-tech Supercomputer and UBiquitously Accessible Mass-storage Environment”の略だと説明されているが、このもっともらしいフルネームが、偶然ツバメという名前と一致したなどということは当然ない。一種の言葉遊びだ。
Ajaxも“非同期のJavaScriptとXML”などともっともらしい名称の頭文字を取ったように見えるが、真相は「あの洗剤のブランド名でピッタリいける!」ということで、名付けられたのだろう。同じくWikipediaの記述によると、1970年代後半から1980年代前半にかけて「Armed...with Ajax!(装備は……、Ajaxで!)」というCMのコピーが、ずいぶん人口に膾炙(かいしゃ)したというから、ある年齢以上のアメリカ人なら、このAjaxというのは脳裏に焼き付いた洗剤名なのだろう(私自身はバウンスという洗剤の愛用者で、米国在住時にもAjaxという洗剤を見聞きした覚えはないのだが……)。
長々と名称のことを書いたが、それだけネーミングというのは重要だと言うことを言いたかったからだ。
Ajaxブームの最大の理由は“名前を付けた”こと
Ajaxがベースとする技術は、JavaScriptにしろDOMにしろXMLHttpRequestにしろ、数年前から存在していたものだ。個々の技術はあったが、何年もの間、こうしたアプローチが取りざたされることはなかった。
顧みられていなかった技術がにわかに脚光を浴びた理由はいろいろあるだろう。常時接続ネットワークの普及や、クライアントの処理能力アップ、あるいは異なるブラウザー同士の互換性が許容範囲にまで収まってきた、という要因もあるだろう。しかし何より、Ajaxブームは“Ajax”というネーミングが果たした宣伝効果に負うところが大きいのではないだろうか。その後、GoogleがGoogle Mapsを斬新なUIで実装し、「Ajaxなら地図がスムーズに動く」という好例が出て一気にAjaxの知名度が広まった感がある。人間は名前のない対象は曖昧にしか認識しない。大げさに言えば、呼び名(固有名詞や普通名詞)がなければ、対象も存在しない。
Web2.0は、宣伝効果を狙ったアクセサリー的な“バズワード”として嫌う向きもあろうが、Ajaxと同類の技術用語であるLAMP(Linux、Apache、MySQL、Perlを組み合わせて素早くウェブシステムを構築する開発スタイル)の例を考えてみれば、コンセプトに名前を付けることの重要さは分かる。
“Comet(彗星)”と呼ばれる新たな概念
前置きが大変長くなった。
まだAjaxほどではないが、今後ウェブシステムの一大潮流となりそうな比較的新しい技術用語がある。Ajax技術者たちが“Comet”と呼ぶ技術だ。
Ajax同様に、Cometというのは何か特定の新しいプログラムやプロトコルを指す技術というよりも、サーバー・クライアント通信方式でリアルタイム性を重視した「HTTPコネクションの管理作法」という実装スタイルを指す。特定の実装スタイルに過ぎないが、Cometというネーミングを得たことは、きわめて重要な意味をもつだろう。
Cometの何が新しいか、少し解説してみたい。
通常HTTPを使ったやりとりでは、クライアントからサーバーへ送られたリクエストに対し、サーバーはなにがしかのデータをクライアントに向かって送信する。この一連のやりとりは“セッション”と呼ばれ、ウェブページの表示が終わると通常はセッションは閉じられる。ショッピングサイトなどでは、クッキーを使ってクライアントを同定できるため、サーバーとクライアントは仮想的に長い通信をしているように見えるが、実際にはブツ切れの通信を繰り返している。
このHTTPのセッション管理モデルが問題となるのは、サーバー側からクライアントにリーチしたい場合だ。いったんHTTPコネクションが切断されると、クライアントからアクセスがない限り、情報の更新ができない。このため、従来からあったウェブ上のチャットシステムでは、定期的にリフレッシュを行ない、強制的にクライアントからサーバーにポーリングせざるを得なかったわけだ。ウェブでチャットしたことのある人なら、誰も発言していないのに文字がリロードされる画面を見つめた経験があることだろう。
Ajaxという動的なUIを実現する技術が普及する以前はそれでも良かった。Ajaxはブラウザーの画面表示や、表示の変更といったアクションと、ブラウザーとサーバー間の通信を切り離して、サーバーとの通信が終了する前に画面書き換えてしまう技術だ。Google Mapsの例で言えば、マウスで地図をドラッグして表示位置を変更すると、新たに必要となった地図データを受信する前に地図を描き直してしまって、データが届き次第、追加分を画面に表示する。
表示と通信を“非同期”にしたため、遅いサーバーをブラウザー越し使っていても、体感的にはローカルのアプリケーションのようにサクサク反応するというわけだ。
Ajaxでウェブアプリケーションのレスポンスが良くなると、“クライアントからのリクエスト→サーバーのレスポンス”という一方通行だけの通信より一歩進んで、逆方向の通信も行ないたい、というニーズが生まれた。それが、HTTPコネクションをあえて切断せずに“つなぎっぱなし”にしてしまう実装スタイル、通称Cometというわけだ。サーバーとクライアントはつながったままなので、複数ユーザーがウェブを介してコラボレーションするチャットプログラムで、遅延のないやりとりが可能になる。あるいは、IP電話の企業内システムで、内線がかかってきたことをブラウザー画面内の座席表にアイコンを表示して知らせるといったことも、Cometのモデルを使えば可能だ。
Cometの威力を体験できるチャットサービス“Lingr”
米インフォテリア社が開始したチャットサービス“Lingr(リンガー)”は、Cometの威力を体験できる優れたサービスだ。これまでにあったCGIベースやJavaベースのチャットに比べると、圧倒的にレスポンスがいい。ブラウザーだけで動作するので、メッセンジャーやIRCといった既存のコミュニケーションツールと比べて、敷居も低い。
Lingrのトップ画面 |
使い方は簡単で、トップページにアクセスして、キーワード(タグとして表示)から気になるものを選ぶか、テキストウィンドウから検索するなどして、まず参加したい部屋を探す。現状ではサービスが始まったばかりで参加者が少ないので、できるだけ大所帯の部屋に行くほうがいいかもしれない。英語圏と日本語圏からのアクセスがあるようで、そこが混在しているのは気になるが、すでに日本語話者のための部屋も多い。話されている内容は技術系のネタが多く、ブラウザーのテストだといってLinuxやMacintoshのマイナーなブラウザーで試している人が多いが、それはまあ今だけだろう。
チャットのメイン画面。画像や動画を貼り付けるのもカンタンだ |
チャットルームの検索画面。テーマごとに部屋がある |
ブラウザーでさくさく動くという以外にも注目すべき点は多い。開発に携わったインフォテリアの江島健太郎氏のブログから、特徴を引用してみよう。
- お手軽さ。Lingrでは何もインストールしなくてもブラウザ(Firefox、Safari、IEをサポートしています)だけでサクサクと軽快な操作感でチャットができます。この感覚は実際にさわってみないとわからない!
- ホット・タグ。各チャットルームにはタグ(キーワード)をつけることができ、これが常時リアルタイムに集計されているので、「今、どういう話題がアツいか」をタグ・クラウドを通じて知ることができます。たとえば今だったら「皇室」とか「Paris Hilton」がデカい字で表示されている、というような感じ。
- 匿名アクセス。チャットを見物したり参加するだけなら、ユーザ登録の必要すらありません。チャットルームのURLにジャンプし、ニックネームを入力するだけで即座にチャットが開始できます。
- プライベート・ルーム。ユーザ登録すると、自分のチャットルームをいくらでも作れるようになりますが、友人や家族や職場の同僚といったメンバーに参加者を限定するために、オープンな場所から見えないプライベートなルームを作ることも可能です。さらに、ルームをパスワードで保護することも可能です。
- 画像と動画の貼り付け。チャットルームの中で「http://」で始まり「.jpg」などで終わるURLを貼り付けると、画像がその場で表示されます。また、同様にしてYouTubeのURLも自動展開されます。
- チャット・ログの保存。チャットした内容は、そのルーム自体が削除されない限り、すべて保存されます(このログのことを「アーカイブ(archive)」といいます)。いつでも過去にチャットした内容を確認することができます。
- パーマリンク。ブログなどと同様に、チャットルームや各種アーカイブにはそれぞれ固有のURLが割り当てられます。このパーマリンクによって、興味のある部分にダイレクトにリンクしたりブックマークすることができます。
- 無料です。
顔文字や文字に色を付けるといったファンシーな機能は現在のところないが、画像の貼り付けが可能であるなど、使ってみると、かなり新鮮なオドロキを感じる。画像はURLをテキストボックスに入力すれば表示される。“http://”で始まり“jpg”で終わる文字列は自動的にimageタグに展開されるようになっている。当たり前だがLingrサーバーや、画像を貼り付けたユーザーのクライアントは画像の送信に関わらない。同様に、YouTubeのリンクも貼り付けられるのだが、こうなってくると、ウェブ上にあるコンテンツであれば、何でもインクルードできるのではないかと、いろいろと妄想がふくらむ。
パーマリンクや過去ログの保存と活用ができるといった点は、今どきのCGM(コンシューマー・ジェネレーテッド・メディア)的で、今後どういう会話が蓄積されていくのか興味が尽きない。ポッドキャスティングの個人ラジオ局で、地理的に離れた人同士がSkypeで会話を録音してコンテンツを作るという例がよくあるが、それと似たようなコンテンツ制作手法で“対話ブログ”のようなことも可能かもしれない。
Lingr登場以前から、すでにGmailなどで同様のリアルタイムチャット可能なサービスは存在していた。そういう意味ではLingrは画期的な技術やサービスというわけではないかもしれない。しかし、誰にでも分かりやすい形でCometの威力を見せつけてくれるサービスとして、とても興味深い実装例であることは間違いない。Lingrを使ってみて、CometありのAjaxは、Ajax2.0と名付けるぐらいのインパクトがあるのではないかと感じるのは記者だけだろうか。
ちなみにCometも、Ajax同様に洗剤のブランド名だ。