デベロッパーあるいはデベロッパーの卵たちは、次のプログラミングの流行に乗りたいと考えるなら、絶対にAJAX(Asynchronous Javascript + XMLの略)に取り組むべきだ。今朝、その理由について再認識させられた。今朝の体験についてはもうちょっと後で説明する。これまで私が目を通したAJAXの説明のなかで、最も分かりやすかったのは、Adaptive PathのJesse James Garnettによるものだ。Garnettは、AJAXによるインタラクティブウェブプログラミングのテクニックについて、次のように説明している:
ユーザーとサーバの間に仲介役--Ajaxエンジン--を設けることによって、Ajaxアプリケーションではユーザーとサーバの間での開始-停止-開始-停止というインタラクションを無くすことができる。アプリケーションにレイヤーを1つ追加するというと、システムのレスポンスが悪くなるように思われがちだが、実はその逆である。
セッションが開始されると、ブラウザはウェブページをロードするかわりにAjaxエンジンをロードする。これはJavaScriptで書かれていて、たいていは隠れたフレームの中に収められている。このエンジンは、ユーザーの目に触れるインターフェースを描くことと、ユーザーの代わりにサーバと通信することの両方の役目を果たす。Ajaxエンジンによって、ユーザーはサーバとの通信には関係なく、非同期的にアプリケーションとやり取りすることができる。したがって、ユーザーは、空白のブラウザウィンドウや回転する砂時計を見つめながら、サーバが応答するのを待つ必要がなくなる。
ところで、このレベルのインタラクティブ性を実現するのに、プラグインは必要ない。経験豊富なウェブプログラマだったら、名前こそ違ったかもしれないが、AJAXの技術はこれまでも長い間存在したと言うだろう。しかし、XMLに依存するAJAXのようなものが注目を集めるようになるまでには、XMLの本格的な普及を待つ必要があった。そしてついにその時が到来した。今、人々はGoogleによるAJAXの実装に注目している。Garnettによると:
例えば、Google Suggestを見てみよう。Google Suggestの検索ボックスに文字を入力すると、それとほとんど同時に、検索候補の言葉が表示される。次にGoogle Mapsで目的地をズームインしてみる。カーソルを地図のどこかに持って行ってクリックし、マウスで地図を少しスクロールしてみる。この動作でも、ページが再描画されない。スクロールとほとんど同時に画像が表示される。
この技術を使っているのはGoogleだけではない。先進的な考え方を取り入れているもう1つの企業としてScalixの名が挙げられる。多くの企業ではOutlook、Exchange Server、Windows Serverという具合にMicrosoftの製品に大きく依存していて、この状況からなかなか抜け出せずにいる。そういう企業をどうにかして救いたいという思いから、同社はAJAXを使った電子メールクライアントプログラムを開発した。Outlook似の同プログラムは、完全にブラウザベースで提供されるうえ、インタラクティブな機能も備える。このアプリケーションのデモを見た人は、間違いなく「ブラウザの中で、しかもプラグイン無しで、こんなことができるのか?素晴らしいじゃないか!」と言うだろう。
プラグイン無しでこういうレベルのインタラクティブ性を達成することがいかに大変なことか、ほとんどの人は知らないかもしれない。Internet Explorer用に書かれたプラグインは簡単にFirefoxでは使えない。それぞれのブラウザには専用のプラグインが必要だ。ユーザーは、異なるプラグインのアーキテクチャやAPIのためにある1つのブラウザを使うように強制されるよりも、自分の好みのブラウザ(あるいはWindows以外のOSのこともある)を自由に選びたがる。そのため、IE以外のブラウザやプラグインを開発する人達は、エンドユーザーにしわ寄せが行かないように、いろいろと苦労しなければならなかった。
すべてのブラウザでインタラクティブなウェブエクスペリエンスを得るという私たちの望みが叶わなかった要因は、互換性のないプラグインのアーキテクチャだけではない。Dynamic HTML(DHTML)は、折りたたみ式のメニューなど、ウェブページを多少動的に見せるために広く採用されている技術だ。しかし、これにも対象ブラウザごとに複数の種類があり、それぞれがすべてのブラウザに対応しているわけではない。(互換性に関するもう1つの問題点であるCascading Style Sheetと同じように)プロプライエタリなDHTMLを活用する方法を理解するために書かれた書籍のなかには、同時に、どうやって一部のユーザーを締め出すか(あるいは、使いたくない技術をユーザーに強制するか)をウェブプログラマに教えているものが多い。
O'Reillyから出版されているJavaScriptの本を最初から最後まで読み通し、中にある例も実際に試してみたことがあったが、これらの例はすべてのブラウザできちんと作動した。実際のところ、ブラウザ間の互換性の問題を解決してくれたのはJavaScriptだった。JavaScriptは、クライアントサイドのウェブスクリプト作成用の、唯一の真の標準(ECMAScriptというのがその正式名称)としてウェブデベロッパーに利用されてきた。たとえば、サイトを利用するユーザーがブラウザの種類には関係なくみんな同じ(あるいはできるだけ近い)エクスペリエンスが得られるように、ユーザーの使用ブラウザのバージョンレベルまで調べて(同じブラウザでもバージョンによって互換性がないこともあったため)、それに適合したHTMLページを表示するために使われた。しかも幸運なことに、JavaScriptはMicrosoftが攻略することができなかったウェブインフラの一部だ。Microsoftは、JavaScriptに自社技術を追加して拡張したJScriptという技術を普及させようと努力したが成功しなかった。
この取り組みをMicrosoftがあきらめた理由の1つは、ウェブや、ダイナミックでインタラクティブなブラウザベースのアプリケーションを攻略する戦略としてJavaScriptが優れたものだとは誰も考えなかったからだ。MicrosoftやSunにとっては、Java、ActiveX、VBScript、Active/Java Server Page(ASP、JSP)などの技術の方がより戦略的に魅力があった。しかし、XMLが成熟し、AJAXが登場した今、JavaScriptのちょっとしたリバイバルブームが起きている。JavaScriptはインタラクティブ性の再発見を促しているだけでなく、ブラウザに関係なく、ユーザーがみんな同じエクスペリエンスを楽しむことができるようにしている。素晴らしいカムバックではないか。
AJAXは、ウェブ関連業界のいろいろな分野に大きなチャンスをもたらしてくれる。まずは、ブラウザ互換の問題があるようなサイトを運営していて、しかもよりインタラクティブなエクスペリエンスをより多くのユーザーに提供したいと考える人は、AJAXの利用を真剣に検討したほうがいい。今日、Cingularが取り扱っているResearch In Motion(RIM)の携帯デバイスBlackberry 7100(7100g)をテストしているときにこのことが頭に浮かんだ。BlackBerry Web MailのアカウントをFirefoxで見ようとしたら、以下のエラーが表示された:
ここに収まるように画像を切り取ってしまったので見えなくなっているが、古いバージョンのNetscapeも互換性のあるブラウザとしてリストされているのだ。問題は明らかだ。このウェブサイトを利用するには、自分の使いたくない技術を使う必要があるのだ。RIMのパートナー企業(Cingular、T-Mobile、その他)は、使用するブラウザに関係なく、すべてのユーザーにウェブメールを提供したいはずだ。(GoogleのGMailで証明されているように)電子メールこそ、もうちょっとインタラクティブ性を持たせたいウェブベースのアプリケーションであることを考えれば、RIMこそ、AJAXを理解してプログラムを開発すべき企業であると言える。こういう企業はRIMだけではなく、他にもたくさんあると思う。
AJAXは、デベロッパーたちも注目すべき技術だ。ほとんどのウェブデベロッパーはJavaScriptをよく知っているが、簡単なスクリンプティングの作業にしかこれを使っていない。多くのデベロッパーは寝ていてもHTMLコードを書くことができるし、もっと経験のある人は、Javaや.NETのほかに、Perl、Python、PHPなどのサーバサイドのプログラミング環境を使って、かなり面白いプログラムを開発することができる(PHPは「LAMP」(Linux-Apache-MySQL-P)のPだ)。一方で、これらの才能のある人々の多くは仕事を探すのに困っている。Salesforce.comなどのアプリケーションサービスプロバイダを見ても、インドに業務をアウトソースする企業が増えていることを見ても分かるように、彼らの仕事がだんだん減ってきているのだ。特に、生活を支えるために、昔とったきねづかでプログラミングの仕事に戻らなければならないシニアレベルのIT技術者たちはもっと厳しい状況にある。彼らが使ったことのある言語はCやCOBOLであり、彼らがコードを書いていたころはネットワーク指向やオブジェクト指向のコードは存在しなかった。
私は、こういうベテラン技術者からだけではなく、IT関連の仕事に進むように親から言われる高校生などからもメールを受け取る。彼らはみんな同じ質問をする。「今後求められるプログラミングスキルは何か」だ。しばらくは、(モバイル、デスクトップ、サーバのすべての場面において)その答えはJavaだと言っていた。だが、Javaができるだけでは十分ではなかった。たいていの場合、Javaはデータベース、ウェブページ、ウェブサーバなど他のものと連携するので、これらの分野でのしっかりした知識も要求された。いずれにしても、これまでかなりの間Javaができれば問題はなかったし、今でもそれで間違いはないと思う。
最近では、上記のJavaだけでなく、XMLとWebサービスも推薦するようにしている。私は、Javaと.NETの間でインタラクションの発生するアプリケーションを作って実験することを人々に勧めている。その理由は、サービス指向のアーキテクチャが注目を集め、自社のシステムを(社外のものを含めて)別のシステムと統合することの利点に企業が気付くようになれば、これらの2つの環境を統合できる実力を備えた人々が重宝されるようになるからだ。LAMPを知っていても無駄ではない。Perlは非常に融通のきく言語なので、能力のあるPerlプログラマは今でもひと山当てることができる。C/C++を操れる人であれば、世界でも最大規模のもっとも面白い仕事を提供する企業が、オープンソースの分野から一流の技術者を引き抜いていることに注目すべきだ。彼らの目にとまりたければ、一番人目に付くプロジェクトに参加して、そこでどんどん目立った活躍をすることだ。
GoogleやScalixなどの企業が実施していることの意味を今日再認識したので、推薦する技術のリストにAJAXを追加することにした。RIMの広報担当が言っていた。「RIMでは、今年の秋にはFirefoxとSafariのサポートを開始する計画だ。RIMはAJAXの利用を検討しているが、現時点ではこのことについて何も断言できない」。RIMのような会社がAJAXの良さに気付いていないのであれば、今すぐでも目を覚ました方がいい。さもなければ、これらの企業からは、0から時速60マイルまで4.2秒で加速できるようなデベロッパーが全くいなくなってしまうだろう。このウェブの世界で生き残るためには、そういう優秀なデベロッパーが絶対不可欠だ。そういうデベロッパーは、AJAXのベストプラクティスを本当に理解している人たちだ。これこそ大きなチャンスではないか。