- 約10年ぶりのメジャーバージョンアップデートとして、jQuery 4.0.0が正式公開
- IE 10以下および旧世代ブラウザーのサポート終了、コードの軽量化と現代的な標準準拠を強化し、大半のユーザーはコード変更なしでアップグレード可能
- ESモジュールベースの構成へ移行し、Rollupビルドを導入、最新の開発環境との互換性を確保
- Trusted TypesおよびCSP対応を追加し、セキュリティポリシーとの衝突を最小化
- 非推奨APIの削除およびslimビルドの縮小により、性能向上と保守性を改善
jQuery 4.0.0の主な概要
- jQuery 4.0.0は約10年ぶりの大規模なメジャーリリースであり、長い開発サイクルと複数のプレリリースを経て完成
- 大半のユーザーはコード変更なしでアップグレード可能
- 以前のバージョンで蓄積されたレガシーコードと非公開パラメーターを削除
- アップグレードガイドとjQuery Migrateプラグインがあわせて提供され、旧バージョンからの移行を支援
- 配布は公式CDNおよびnpmを通じて可能で、その他のCDNは順次更新予定
ブラウザーサポートの変更
- IE 10以下のサポート終了、IE 11はjQuery 5.0で段階的に削除予定
- Edge Legacy、旧iOS版(直近3バージョンより前)、旧Firefox版(直近2バージョンより前)、Android Browserのサポートを終了
- 旧式ブラウザーをサポートする必要がある場合はjQuery 3.xの継続利用を推奨
Trusted TypesおよびCSP互換性
- TrustedHTMLオブジェクトを安全に処理できるようTrusted Types対応を追加
- ほとんどの非同期スクリプト要求を**``タグベースへ移行**し、CSPエラーを防止
"headers"オプション使用時は引き続きXHRも利用可能だが、scriptAttrsの使用を推奨
ESモジュール移行
- jQueryのソースがAMDからESモジュールへ完全移行
- 従来のRequireJSの代わりにRollupをビルドツールとして採用
- ESモジュールベースでテストも別途実施
- ``により現代的なブラウザーおよびビルドツールとの互換性を確保
非推奨APIの削除
- 長らく非推奨とされていたAPIを完全に削除
- 削除された関数:
jQuery.isArray, jQuery.parseJSON, jQuery.trim, jQuery.type, jQuery.now, jQuery.isNumeric, jQuery.isFunction, jQuery.isWindow, jQuery.camelCase, jQuery.nodeName, jQuery.cssNumber, jQuery.cssProps, jQuery.fx.interval
- 代替:
Array.isArray(), JSON.parse(), String.prototype.trim(), Date.now() などのネイティブメソッドを使用
- IE関連コードの削除により、gzip基準で約3KBサイズを削減
内部専用メソッドの削除
- jQueryプロトタイプで内部用にのみ使われていたpush、sort、spliceメソッドを削除
$elems.push(elem)の代わりに[].push.call($elems, elem)の形で代用可能
フォーカスイベント順序の変更
- W3C仕様に従ったfocus/blurイベント順序に統一
- 新しい順序: blur → focusout → focus → focusin
- 従来のjQueryの順序とは異なるため互換性に注意が必要
- IEを除くすべてのブラウザーが同じ順序で動作
slimビルドの改善
- DeferredsおよびCallbacksの削除により、ファイルサイズを約19.5KB(gzip)まで縮小
- 大半のブラウザーはネイティブPromiseをサポートしているため代替可能
- IE11対応が必要な場合はメインビルドまたはPromiseポリフィルの使用を推奨
- slimビルドはAjaxおよびアニメーション関連モジュールを除外し、約8KBさらに小型
ダウンロードと配布
- 公式CDNおよびnpmからダウンロード可能
- npmインストールコマンド:
npm install jquery@4.0.0
コントリビューターと20周年記念
- 多くのオープンソース貢献者がパッチ、バグ報告、テストに参加
- jQuery 20周年を迎え、Dallasでチームが再会し、創設者John ResigもZoomで参加
主なコード変更の要約(Changelog)
- Ajax: バイナリデータ処理を改善、CSPエラーを防止、JSONPのエラー処理を強化
- CSS: ``要素のサイズ計算を修正、CSS変数の空白処理を改善、
opacityフックを削除
- Core:
AMD → ESモジュールへ移行、DOMParserを使用、旧式ブラウザー対応コードを削除
- Event: focus/blurイベントをネイティブ処理、
event.which shimを削除
- Selector: Sizzleを統合、
:hasおよび:even/:oddを改善、uniqueSortのチェーン対応を追加
- Docs: HTTPSリンクを更新、READMEおよびCONTRIBUTING文書を整備
- Release: ビルドおよび配布プロセスを自動化し、
release-itベースへ移行
要約
- jQuery 4.0.0は現代的なWeb標準とセキュリティポリシーに合わせた構造的刷新版
- レガシーコード削除、ESモジュール化、セキュリティ強化、軽量化により、長期保守の基盤を強化
- jQueryエコシステムの20周年を記念する象徴的なリリースと評価される
3件のコメント
感慨深い20周年です。今では使う機会はほとんどなくなりましたが、それでも現場で役立つツールとして、これからも愛され続けてほしいです。
ものすごくしぶといですね.. 笑
Hacker Newsの反応
関連記事として、レガシーコードベースで最新フレームワークを使えないときに、jQueryをリアクティブに使う方法をうまくまとめた記事がある
Reactive jQuery for Spaghetti-fied Legacy Codebases
レガシーな事情でjQueryを使わざるを得ないなら、Backboneはモダンなフレームワークへ移行する前の良い中間段階になり得る
BackboneJS公式サイト, GitHubタグ一覧
実際、過剰に設計されたReactコードが、きちんと整理されたjQueryコードよりひどいこともあった
Reactが品質基準を引き上げたのは確かだが、ときには慣れた道具を適切に使うほうが効率的だ
特に Userscript のように問題の範囲が小さく、ビルドステップが面倒なときに向いている
実際、jQueryなしでも
querySelector,addEventListener,innerHTMLだけで十分に実装できるJoomla CMSの中にカスタム検索フロントエンドを無理やり組み込む必要があったが、かなりうまく動いた
私たちが Reactive Mastro でやっているのはまさにこれだ
今でも自分が最も好きなライブラリの1つが jQuery だ
自分のキャリアを築いてくれた道具なので、いつも愛着がある
jQuery + jQuery UI + プラグイン + AI の組み合わせなら、とてつもない可能性がありそうだ
HTMXの話が出るたびに、「それってjQueryなら3行で済むんじゃないか?」と思ってしまう
とにかくjQueryはいつも問題を解決してくれたし、それが重要だ
.load()メソッドに着想を得た intercooler.js から発展したものだjQuery.load()ドキュメント を参照
パフォーマンス作業中に気づいたのだが、本当にjQueryへの敬意が増した
$()セレクタインターフェースの 優雅さ は今でも最高だったと思う性能差は事前計算で補えるかもしれない
シンプルでありながらSPAのような感覚を出せる
古き良き jQuery、本当にありがたい存在だった
jQueryが今でも保守され、更新されているのを見るとうれしい
ただ、これは Reactも2060年まで生き残るかもしれない という意味でもあり、少し複雑な気分だ
昔の コールバック地獄 を思えば、今は夢のようだ
2000〜2010年代にSPAフレームワークが一般的でなかったころ、自分もjQueryでWeb開発を学んだ
当時作ったもののかなりの数が、今でも動いている気がする
jQueryチームに 感謝の気持ち を伝えたい
jQuery 4.0 リリース に参加したすべての人に祝意を表したい
もう少し構造的なアプローチが欲しいなら、JsViews という リアクティブテンプレートシステム がある
古くて安定しているが、最新のフレームワークほど注目はされていない
個人的には cheerio や alpine.js のような、現代的なjQueryスタイルが好きだ
cheerio.js.org, alpinejs.dev
ただ、サイトデザインがあまりに古風なので採用率が低いのかもしれない
それでも読み込みは速く、軽量さ が印象的だ
jsrender.min.js はわずか12.82kBしかない
信じがたいが、jQuery 4.0 は今でも IE11をサポート している
これはjQuery 5.0でついに削除される予定だ
関連PR, Issue を参照
3.0が10年前に出たことを思うと、かなり驚きだ
そうしたユーザーや製品を支えてくれるのはありがたい
今でも古いシステムを使っている 学校のコンピューター室 は多い
jQueryの アップグレードツール に注がれた努力には本当に感心する
jQueryの チェーン構文 は今でも大好きだ
15年前にフランス語でjQueryチュートリアルを書いたことがあり、多くの閲覧数を得た
jQuery普及に少しでも貢献できていたならうれしい