Ad Network

あわせて読みたい

  • あわせて読みたい

« ビル・ゲイツの面接試験-クイズ編 | Main | ビル・ゲイツの面接試験-クイズ編・模範解答 »

Ajaxの本質、「非同期メッセージ型ウェブ・アプリケーション」のススメ

050405_190837  最近、「これからのウェブ・アプリケーションはAjaxだ」という声を良く聞く。ソフトウェアを生業としているエンジニアとしては、この手の「流行もの(hype)」に触れた時には、表面的なものに踊らされずに、その本質を自分なりにしっかりと捕らえて消化・吸収して自分のものにしなければいけない。今までも、「オブジェクト指向」、「マルチ・ティアー・アーキテクチャー」、などの言葉が一人歩きするたびに、「これからは○○だ」とか「○○の時代は終わった」などと、過激なことを言って読者の目を引こうとだけするマスコミや企業のマーケティング戦略に数多くの人が踊らされてきた。

 そんなノイズだらけのメッセージに混乱させられた結果、「Cではオブジェクト指向のプログラミングは出来ない」と信じているエンジニアがいまだに沢山いることは全く嘆かわしいことだ。「オブジェクト指向のプログラミング」は、設計姿勢・プログラミングスタイルに関わることであり、C++やJavaと言った言語に依存しなければ出来ないものではない。つまり、Cでろうとアセンブラーであろうと、「オブジェクト指向のプログラミング」は可能なのだ。にも関わらず、組み込み系のプロジェクトで、Cコンパイラーしかない環境でプログラムを書かせようとすると、「C++で書かないとコードがスパゲッティ状態になってしまいます」などと甘ったれたことを言うエンジニアが多いので困ったものだ。

 Ajaxに関しても、全く同じ誤解が生じそうなので、ここで一言書いておく。Googleなどが進めている第二世代のウェブ・アプリケーションのアーキテクチャーの本質は、XHTMLやXMLやJavascriptにあるのではない。その本質は、

(1)アプリケーションの明示的なインストールが必要ない。
(2)サーバーとの通信を非同期に実行することにより、通信遅延によりUIをブロックしない。
(3)サーバーとのやり取りは、RPCではなく、メッセージで行う。
(4)データ・バインディングはサーバー側ではなく、クライアント側で行う。
(5)UIにインテリジェンスがあり、ある程度はサーバーに戻らずにユーザーとやり取りをする。

の5点にある。この5点さえしっかりと守れば、開発言語はJavaであろうとFlashであろうとも良いし、サーバーとのメッセージにXMLを使わなくともかまわない。その意味で言うと、Ajaxという名前(J=Javascript、x=XML)がそもそもふさわしくしくないとも言える。単に、「非同期メッセージ型ウェブ・アプリケーション(Asynchronous Message-driven Web Application)」と呼ぶ方がずっと明確だし、特定の言語にしばられなくて済む。

 これらの5つの点については、自明だとは思うが、学生や初心者のために付け加えておく。

(1)アプリケーションの明示的なインストールが必要ない。
 こうでなければ、ウェブ・アプリケーションとは呼べない。

(2)サーバーとの通信を非同期に実行することにより、通信遅延によるUIのブロッキングを避ける。
 第一世代のウェブ・アプリケーションがリッチ・クライアント・アプリケーションと比べて圧倒的に使い勝手が悪くなるのは、、ハイパーリンクをクリックするたびにユーザーを待たせるためである。通信を非同期にして、ネットワーク遅延をユーザーからできるかぎり隠し、ストレスの少ないユーザー・インターフェイスを提供する点が第二世代のウェブ・アプリケーションだ。

(3)サーバーとのやり取りは、RPCではなく、メッセージで行う。
 サーバーとの非同期通信には、大きく分けて非同期RPC(Remote Procedure Call)と非同期メッセージングの二通りがある。RPCのそもそもの利点は、「あたかも呼び先の関数がローカルで実装されているかのようにシームレスにプログラムが書ける」点であることに注意すれば、どちらを使えば良いかは自明である。ローカルの関数呼び出しとリモートな関数呼び出しのスピードの開きが1000倍にもなる今の環境では、プログラマーにシームレスにプログラムを組まれては困るのである。その意味で言って、メッセージを使ったプログラミングスタイルでは、プログラマーはネットワーク遅延を強く意識しながら作るので、結果として使い勝手の良いアプリケーションができる。

(4)データ・バインディングはサーバー側ではなく、クライアント側で行う。
 第一世代のウェブ・アプリケーションは、データとビューのバインディングをサーバー側で行っていたため、新しいデータが必要になるたびに、UI(HTMLページ)全てを再度サーバーに取りに行き、再構築していた。第二世代のウェブ・アプリケーションは、まずビューをクライアントに取り込み、次にデータをメッセージの形でサーバーから取ってくる仕組みであるため、データだけを変更する場合の使い勝手は格段に向上する。

(5)UIにインテリジェンスがあり、ある程度はサーバーに戻らずにユーザーとやり取りをする。
 ユーザーの入力に対して、クライアント側でレスポンスが可能なものに関しては、それを処理するようなインテリジェンスをUI自身(上で述べたビュー)に持たせておき、サーバーとのやり取りなしで処理してしまう。

 最後にもう一度繰り返すが、オブジェクト指向のプログラミングに必ずしもC++やJavaが必要ないのと全く同じ理由で、「非同期メッセージ型ウェブ・アプリケーション」のプログラミングには必ずしもHTML、Javascriopt、XMLは必要ないことを覚えておいて欲しい。もちろん、「ブラウザー上でプラグインなしで動かしたいからHTML+Javascriptを使う」とか、「ウェブ・サービスとの連携にHTTPを介してXMLをやり取りする」などの理由はもっともなので、それを否定するつもりは全くないので誤解しないで欲しい。実際、メッセージに"XML over HTTP"を使うことには私も大賛成だが、その議論と「非同期メッセージ型ウェブ・アプリケーション」の議論とは全く独立したものである。

 言い換えれば、Ajaxの提唱者たちは、「非同期メッセージ型ウェブ・アプリケーションを作ろう」という主張と、「HTML+Jascript+XMLを使ってウェブ・アプリケーションを作ろう」という主張を一緒くたにして発信しているだけなのである。受け取る側としては、それが二つの独立した主張が混ざったものであることをきちんと理解した上で、消化・吸収することが大切である。

[追記] 読者の一人に「ここに書かれている考えはどこから来ているのですか?」と聞かれたので、お答えします。実は、現在米国 Google で活躍している Adam Bosworth と Gary Burd と私は、マイクロソフトで Internet Explorer 4.0 を一緒に開発していた仲です。マイクロソフトが XML と DHTML の機能を初めて導入したブラウザーです。あの当時から、彼らとは「次世代ウェブ・アプリケーション」の話ばかりしていました。非同期通信の話とか、UIをブロックしないだとか、XML over HTTP の話はその時に始まった話です。ある意味で、Adam も私も、10年近く同じことを言い続けているわけですね。Gary が私の誘いを蹴って Google に行くと言ったときに、あやしいと思ったのですが、案の定あんなことが始まってしまいました。私も人のことを言える立場ではありませんが(笑)。

[お願い]ソシアル・ブックマーク・サービスをお使いの方がこの記事をブックマークするさいには、何か一言コメントを添えていただけると助かります。ブックマーク・コメントに関しては、恋はブックマークをご覧ください。

[このブログの記事で良く読まれているもの]
日本語とオブジェクト指向
ビル・ゲイツの面接試験-私の場合
愛すべき理科系人間たち
自分が少数派になるだろう項目ベスト10

TrackBack

TrackBack URL for this entry:
http://www.typepad.com/services/trackback/6a00d8341c4f9853ef00d83422994553ef

Listed below are links to weblogs that reference Ajaxの本質、「非同期メッセージ型ウェブ・アプリケーション」のススメ:

» 「だからAjaxってなんなのさ!」への答え from アルカンタラの熱い夏
だからAjaxってなんなのさ! ということを聞きまわっている僕にとって、これまででもっとわかりやすかった説明がこれ。こういうことが知りたかったんだよなあ。 [Read More]

» [ajax] Ajaxはプログラマの復権か? from えみきん日記
Ajaxの本質、「非同期メッセージ型ウェブ・アプリケーション」のススメ サーバとのデータのやりとりに必ずしもXMLを使う必要はないのでAjaxのxはおかしいというのは同感。実際、遊びで... [Read More]

» Ajax from 外部記憶
Ajax(エイ-ジャクス)という技術が流行っているとか。 Ajax=Asynch... [Read More]

» シンクロニシティ三題−−Ajax、Web2.0、G-Cluster編 from KAI_REPORT
自己組織化アプリケーション問題のシンクロニシティ三題です。 非同期メッセージ型ウェブ・アプリケーション まず、Life is beautifulのSatoshi Nakajimaさんのエントリー『Ajaxの本質、「非同期... [Read More]

» http://horse-mackerelitation.com/blog/archives/001704.php from 鯵、環境民俗学ヲ嗜ム
 Ajaxってなんなのさ。 Life is beautiful: Ajaxの本質... [Read More]

» Ajax討論 from KoshigoeBLOG
Ajax [Read More]

» [プログラミング] Ajaxの本質…かあ from Guitarist's Paperplane
 まあ一応,ボクもAjaxに関心を持っていたんで,この議論はなかなか興味深く拝見した。NakajimaさんのAjaxの本質、「非同期メッセージ型ウェブ・アプリケーション」のススメと,それに��... [Read More]

» アルファギークに学ぶAjaxの本質(そしてビジネス上の価値) from 満足せる豚。眠たげなポチ。
奇しくも、同じ時期に同じテーマのエントリがあがっていた。 一つは、Adam Bosworth's Weblogの"Ajax reconsidered". そしてもう一つは、Life is beautifulさんの「Ajaxの本質、「非同期メ��... [Read More]

» Ajax とか RSS とか from マツモット・ハージメの日記
先日、お知り合いの方からMIXIへ招待して頂きました。 1年ほど前にGREEのほうへ招待頂いたことが あるのですがなんとなく面白くなくて放置してました。 GREEとかMIXIをご存じない方�... [Read More]

» AJAX関連記事(メモ) from Over 40
解説記事(日本語) はてなダイアリー - Ajaxとは IT用語辞典 e-Wor... [Read More]

» AJAXのメモ from JubiLog - weblog -
マイクロソフト、AJAXアプリ開発用ツール「Atlas」を準備中 http://japan.cnet.com/news/ent/story/0,2000047623,20084802,00.htm AJAX、要は非同期ウェブアプリケーションが注目されている。マイクロソフトが... [Read More]

» Web2.0を巡る議論とその周辺技術 from I sort my thought...
ゼミでの発表で使用したレジュメです。ほとんどは後に述べるサイトを参考にして話をしました。 *従来のWeb 情報をつなげるのは人 意識的につなぐ必要 技術の壁 *Blogのもたらしたもの *Permal...... [Read More]

» Web2.0を巡る議論とその周辺技術 from I sort my thought...
ゼミでの発表で使用したレジュメです。ほとんどは後に述べるサイトを参考にして話をしました。 *従来のWeb 情報をつなげるのは人 意識的につなぐ必要 技術の壁 *Blogのもたらしたもの *Permalinkの概念 一つのページにまとまった内容 *RSSの普及 メタデータ(RDF)の普及 情報のRemixが可能に 技術からの開放 誰もが簡単にWebを作成 *Forksonomy Fork(民族)+T...... [Read More]

» Web2.0を巡る議論とその周辺技術 from I sort my thought...
ゼミでの発表で使用したレジュメです。ほとんどは後に述べるサイトを参考にして話をしました。 *従来のWeb 情報をつなげるのは人 意識的につなぐ必要 技術の壁 *Blogのもたらしたもの *Permalinkの概念 一つのページにまとまった内容 *RSSの普及 メタデータ(RDF)の普及 情報のRemixが可能に 技術からの開放 誰もが簡単にWebを作成 *Folksonomy Folks(民族)+...... [Read More]

» [プログラミング]Cでデザインパターン from DELPHIER@はてな
最近友人と会話していて、 「ぼくがすごいと思ったアプリはほとんどCで書かれている」 「どれくらい違うの?」 と聞かれて、そういえば詳しく調べたことがなかったな、と思った。 また、以下のことを思い出した。 http://satoshi.blogs.com/life/2005/06/ajax.html 「Cではオブジェクト指向のプログラミングは出来ない」と信じているエンジニアがいまだに沢山いることは全く嘆かわしいことだ。「オブジェクト指向のプログラミング」は、設計姿勢・プログラミングスタイルに関わ... [Read More]

» Ajax討論 from KoshigoeBLOG
Ajax [Read More]

» [Programming]Ajax とは? from 近況報告を兼ねた独り言
「Ajaxの本質」という非常に明確に説明されたエントリを発見したのでメモ。引用すると... [Read More]

» Ajax/関連記事 from apus (PukiWiki/TrackBack 0.3)
日本語で読めるAjax関連情報のリンク集 XMLはメタデータというより生データとしての利用価値が高まりつつあり、AjaxによるUIの切り離しがそれを加速する Ajax: Web アプリケーション開発の新しいアプローチ Webアプリのユーザビリティを改善しまくるAjax Ajaxの本質、「非...... [Read More]

» 非同期メッセージ型Webアプリケーションを考える from Go The Distance
Ajaxの性質を鋭く突いたエントリがあったのでTB&ご紹介。 Ajaxの本質、「非同期メッセージ型ウェブ・アプリケーション」のススメ GoogleMapが単にすごいってわけじゃなく、こういったアーキテクチャだからできるんだってことを理解しないといけません。すごい分かりやす... [Read More]

» 技術の本質。 from Akt One.
IT 関連の仕事をしていて、技術の流行廃りに敏感な人や会社はよく見かけますが、いったいどれだけの人がその本質を掴んでいるのでしょうか。どんなに優れた技術や道具があっても使い手次第でいかようにもなります。"本質を知る"という事についてひとこと言いたい。 ... [Read More]

» AJAX でサーバにあるファイルの内容を表示したい。 from Perl Tips
Ajax (エイジャックス)とは、Asynchronous JavaScrip... [Read More]

» Web2.0 J (3) from らくちんのつれづれ暮らし
日本でのWeb2.0について、これまで二回、説明してきた。((1)、(2))前回では、ビジネス面での説明が多かったが、今回は、技術面を、インターネットの世界で最近話題になっている技術と、インターネットビジネスに限らずシステムとかソフトウェアのとかの領域で起こっている変化とについて説明したい。言い換えると、前回までは、大部分のユーザーにとって近い過去に起こったことだが、今回は、これからの近い未来に起こることをかなり示している。... [Read More]

» Ajaxで何が出来るんだろう from N/A 3rd mix
最近流行のこのコトバなんですが、何ができるのか、どういう技術なのでしょうか。 ひ... [Read More]

» 技術の本質。 from Akt One.
IT 関連の仕事をしていて、技術の流行廃りに敏感な人や会社はよく見かけますが、いったいどれだけの人がその本質を掴んでいるのでしょうか。どんなに優れた技術や道具があっても使い手次第でいかようにもなります。"本質を知る"という事についてひとこと言いたい。 ... [Read More]

» [PDA][スマートフォン]PDA2.0続き from takahanomoriの電脳小箱メモパッド
 PDAは定型的な情報(PIM)を扱うためのもので、他の機器との連携といえばPCコンパニオンとしてPC情報を切り出す程度のことしかできなかった。でもPDAは通信機能を手に入れ、スマートフォンとなった。スマートフォンは、通信機能付きPDAではない。ローカルのソフトウェアとローカルのデータから解放された、広大なネット空間を背後に持つ全く新しいデバイスだ。スマートフォンがPDAと同じシゴトを行う必要はない。インストールされているソフトと、自分が入力したデータだけに縛られる必要は全くない。ネットを通じて自由... [Read More]

» AJAXが大事何ではないはず from OPC Diary
XMLHTTPそのものが大事なのではなく、XMLHTTPによってもたらされるもの... [Read More]

» ネーミングって大事だよね Ajaxについて from 10000000円のブログ
GoogleVideoとYouTubeをまとめるサイト を構築するにあたってAj [Read More]

» 理想と、理想を実現するツール from Stack Stock
Life is beautifulのAjaxの本質、「非同期メッセージ型ウェブ・... [Read More]

Comments

Shin

はじめまして。
Google Maps に大変興味を持っている者です。
プログラミングは門外漢なので、この5つのポイントについて「理解した」などとは口が裂けても言えないのですが、本質を捉えることが重要だということはよくわかったように思います。

追記の「10年前から・・・」というお話もおもしろかったです。技術って、水面下で醸成されていたものが、ある日突然のように表舞台に出てくることってあるんですよね。

Shin

すみません。こちらでエントリを書いたのですが、なぜかTrackbackがうまくできないので、URLを書かせて頂きます。
http://blog.skys.jp/archives/200508/21-1618.php

イプログダイレクトの店長

梅田さんのところからやって参りました。
どれもこれも、大変興味深い記事で、ワクワクしております。梅田さんが一押しするのも、超納得です。^^;ひとまず、御礼申し上げます。ありがとうございます。

satoshi

イプログダイレクトの店長さん、コメントありがとうございます。このブログも書き始めて、もう二年になります。好き勝手なうんちくばかり書いているのですが、こうやって励ましのお言葉をいただけると、「これからも書き続けよう」と元気が出ます。

けも

Ajax の本質。私的には(擬似)サーバープッシュと見ています。
後は、特性がマッチする処にうまく使えば良いかな、と。
個人的には、クライアントサイドで何も動かしたくないので、Google Map も
見ていませんが。

na0001

WEB2.0を実現する一つの手段かな

muyu

とても参考になりました。
今後も読ませていただきます

山本

正に正論だと思います。(といってもこの記事は3年前に書かれたものだったのですね・・・・)。私的にはつきつめると「ユーザーが必要とする情報を事前にクライアントへロードしておく」ってのがAJAXが流行ったコアな部分かと思います。(=ユーザーが必要ない情報を非同期通信やPreLoadしても意味ないので。)そういう意味も込めて、以下のURLのサイトを作っています。検索キーワードを入れて、Google、Yahoo、Technoratiを同時に検索して、かつ検索結果のページを事前にロードしておくというのは、まさにAjax的。(私の場合はたまたまJavascriptを使いましたがこれは必須じゃないですね。)

soulram

オブジェクト指向を学んでいるうちに、「プログラミングには向いていない・・・」と学生の頃感じたものです。ご説明がシンプルで感銘を受けました。1990年代後半にオブジェクト指向を大学でチョコチョコやっていましたが、その頃から書籍でも「CではOOAは無理。C++で!」みたいなこと書いていましたが、実際、C++でならできるというわけでもなくあくまでアプローチであることを感じた覚えがあります。
もう、ITの営業職である私には全くわかりませんが・・・。

だるだるぱんつ

勝手ながら、生まれて初めて書いたBLOG記事に引用させて頂きました。多謝!!
http://d.hatena.ne.jp/darupants/

Post a comment

This weblog only allows comments from registered users. To comment, please Sign In.