jQuery とは何か
jQuery は、2006 年に登場した JavaScript ライブラリである。Web ページの DOM 操作やイベントハンドリングをクロスブラウザを意識することなく簡単に行うことができるため、JavaScript 経験が少ない開発者でも使いやすく、広く浸透した。
jQueryの歴史
| 年 | イベント |
|---|---|
| 2006 年 | jQuery の最初のバージョンをリリース |
| 2007 年 | MIT ライセンスで jQuery がリリース |
| 2008 年 | jQuery 1.2 がリリース |
| 2009 年 | jQuery 1.4 がリリース |
| 2011 年 | jQuery 1.7 がリリース |
| 2013 年 | jQuery 2.0 がリリースされ、Internet Explorer 6/7/8 のサポートが廃止された |
| 2014 年 | jQuery 1.11 と 2.1 がリリース |
| 2015 年 | jQuery 3.0 リリース |
| 2016 年 | jQuery 3.1 リリース、2.2.4・1.12.4 のリリース(1 系、2 系の最終バージョン) |
| 2017 年 | jQuery 3.2 リリース |
| 2019 年 | jQuery 3.4 リリース |
| 2020 年 | jQuery 3.5 リリース |
| 2021 年 | jQuery 3.6 リリース |
jQuery が広く使われるようになった理由
jQuery が広く使われるようになった理由の 1 つに、クロスブラウザの互換性問題があった。jQuery はクロスブラウザで動作するため、開発者はブラウザ毎の互換性問題を意識する必要が薄くなった。また、jQuery の構文は初心者でも使いやすいため多くの開発者が利用し、コミュニティが発展した。これによって、jQuery プラグインやドキュメントが豊富に提供されるようになった。
jQuery の登場とほぼ同時期に、Prototype.js もその役割を担っていた。しかし、jQuery は Prototype.js よりも広く採用され、トレンドが移り変わった経緯がある。
- シンプルな構文
両者とも当時のプレーンな JavaScript に比べシンプルな構文を持っていたが、Prototype.js より jQuery の構文が受け入れられた。 - パフォーマンス
jQuery は Sizzle と呼ばれる高速なセレクタエンジンを使用していたため、jQuery は Prototype.js に比べパフォーマンスが良かった。 - プラグインの豊富さ
jQuery には、多くのプラグインが存在しており、簡単に利用できるため、jQuery を利用することで機能拡張が簡単だった。一方、Prototype.js にはプラグインが存在していたが、jQuery に比べてその数も少なく利用しにくかった。 - コミュニティの規模
Prototype.js に比べ、jQuery のコミュニティの規模は大きく、多くの開発者が利用していたため、機能の改善やバグの修正が頻繁に行われた。
jQuery の功績と功罪
jQuery は、Ajax 通信、アニメーション、イベントハンドリングなどの機能をクロスブラウザ対応し、当時の Web 開発における生産性を向上させた。さらに、プラグインの豊富さや、ドキュメントの質の高さも、jQuery の人気を高める要因となった。
jQuery は、ブラウザに組み込まれている DOM 操作の API をラップしているため、現代の JavaScript の機能を完全に活用できない1。
| jQuery | JavaScript |
|---|---|
| |
| |
jQuery と Prototype.js とモダン JavaScript のコード比較
以下は、jQuery、Prototype.js、およびモダン JavaScript で同じタスクを実行するためのサンプルコードである。これらのコードで各コードの異なるアプローチが分かる。
それぞれのコードは、DOM がロードされた後、クラス名が "button" の要素をクリックした際に "active" クラスをトグルする。
jQuery
最初に必要な要素を取得するために、セレクタの使用と、クリックイベントの登録にclick()メソッドを使用している。
// jQuery
$(document).ready(function () {
$('.button').on('click', function () {
$(this).toggleClass('active');
});
});
Prototype.js
$$()メソッドを使用して要素を取得し、invoke()メソッドを使用して各要素にクリックイベントを追加する。
// Prototype.js
document.observe('dom:loaded', function () {
$$('button').invoke('observe', 'click', function () {
this.toggleClassName('active');
});
});
モダン JavaScript
querySelectorAll()メソッドを使用して要素を取得し、forEach()メソッドを使用して各要素にクリックイベントを追加する。
// モダンJavaScript
document.addEventListener('DOMContentLoaded', function () {
const buttons = document.querySelectorAll('.button');
buttons.forEach((button) => {
button.addEventListener('click', function () {
this.classList.toggle('active');
});
});
});