Terry Jones、Nicholas H. Tollervey『Learning jQuery Deferreds: Taming Callback Hell With Deferreds and Promises』(O'Reilly)を読了した。jQueryバージョン1.5から導入されたdeferred API(deferred.js)について使用法から拡張まで、詳細に解説した本だ。

まず、予備知識としてウェブページで使われるJavaScriptとjQueryについて説明しておきたい。ブラウザでウェブページを表示した場合、さまざまな動きが表示されることがある。もともとのウェブページには動きがない(ウェブページを記述するHTML言語には動きを表す方法がない)。そこに動きを持ち込むには大きく分けて2つの方法がある。1つは動きのある画像を埋め込むことだ。初期の頃はGIF(ジフ)アニメーションしかなかったが、現在はAdobe Flash(アドビ・フラッシュ)を用いてビデオ映像も埋め込むことができる。

もうひとつはプログラムを用いて画面の構成要素(エレメント)を変化させる方法だ。ブラウザ上で実行できるプログラミング言語は複数あるが、現在はほとんどJavaScriptに統一されている。JavaScriptは画面の読み込みと同時に実行されたり、時間の経過やユーザの操作によって起動されたりして、エレメントを移動させたり、消したり、表示したりといった画面操作だけでなく、ユーザとやり取りしたり、サーバと通信したりもできる。

jQueryはそのような頻繁に行われる作業を簡単に記述できるように作成されたJavaScriptライブラリである(http://jquery.com/)。たとえば、画面内にアニメーション付きでエレメントを表示する場合、普通にプログラムを書くとかなりの行数になるが、jQueryではエレメントの後に.fadeIn(200)と付けるだけで200ミリ秒(0.2秒)のフェードイン(徐々に現れる)が実現できる。

JavaScriptライブラリは一時期さまざまなものが競っていたが、現在ではjQueryが圧倒的に多く使用されている。Web Technology Surveyという調査サイトの統計では、2014年2月23日現在で、JavaScriptライブラリを使用しているウェブサイトが調査対象の62.0%で、jQueryを使用しているサイトは57.8%だった。 JavaScriptライブラリを利用するサイトの93.2%がjQueryを使用していることになる(http://w3techs.com/technologies/overview/javascript_library/all)。傾向を追ってみると市場占有率は徐々に上昇しており、jQueryがデファクトスタンダードになったと言っていだろう(http://w3techs.com/technologies/history_overview/javascript_library)。ちなみにWeb Technology SurveyはAmazonの関連会社が公表するウェブサイト人気ランキングの上位1千万サイトを自動解析しており、統計的な信頼性は高いと見なすことができる(http://w3techs.com/technologies)。

JavaScriptはブラウザによって実行されるプログラミング言語なので、ブラウザによって少しずつ仕様が異なる。また、画面のエレメントの表示も、大きさの測り方が違ったりする。同じウェブページが、ブラウザによって違って表示されては困るので、ウェブページ開発者は実行中のブラウザの種別を判別して動作を変えるプログラムを書くのだが、開発者にとってそのようなブラウザの違いを吸収するコードを書くのは大変な作業だ(特にInternet Explorerは独自仕様が多く、開発者泣かせだ)。初期のJavaScriptライブラリは、そのようなブラウザ間の差異を吸収するのが大きな目的のひとつだった。

現在のJavaScriptライブラリは、JavaScriptで実現できることを、より簡単に、正確に実行できるよう、便利な部品を用意するものになっている。jQueryはその中でも、仕様が簡単で使いやすく、一部だけに使用することが可能、他のライブラリとの併用が容易などといった特徴があって利用者を伸ばした。現在jQueryは基本ライブラリのような位置を占めており、その上に重ねて使うようなライブラリも登場している。jQueryUI(カレンダー入力やアコーディオン型のリストなど、新しいユーザインタフェースを導入するライブラリ)はjQuery自体の派生であるが、AngularJS(HTMLをテンプレートとして用いる、新しい形のライブラリ)はまったく独立して開発されたものであるにもかかわらず、エンジンとしてjQueryを用いている。

「予備知識」の説明だけで長くなってしまった。次回はdeferredについて、さらに本書の意義について説明したい。