はじめに
2026年1月、ついに jQuery 4.0.0 が正式リリースされました。
約10年ぶりのメジャーアップデートとなる今回は、IE10以前のサポート終了や内部構造のESM化、Trusted Typesへの対応など、Web標準に準拠した大幅な近代化が行われているそうです。
しかし、開発者にとって最も恐ろしいのは 「CDNで最新版(latest)を参照しているサイトが、ある日突然動かなくなる」 ことです。
今回、15,000ファイル規模のディレクトリをブラウザだけで高速にスキャンし、影響箇所を特定する簡易的なツールを作成したので、共有します。
簡易調査ツールを作りました(ブラウザのみで動作)
「自分のプロジェクトにどれだけ影響があるか」を調べるため、File System Access API を活用したスキャナーを作りました。
【注意事項】あくまで簡易的なツールになります。
▶ プレイグラウンド(実行環境):
https://sf-os.work/jq4chk/
このツールの特徴
- 完全ローカル実行: ファイルをサーバーにアップロードしないため、ソースコードを外部に出すことなく安心してスキャンできます。
-
ある程度高精度な検索: 単純な文字列検索ではなく、
str.trim()(標準)と$.trim()(jQuery独自)を判別し、複数行にまたがる記述も正規表現でキャッチします。 - 大規模対応: 1万ファイルを超えるディレクトリでも、非同期処理によってフリーズせずに処理可能です。
-
自動除外機能: 調査ノイズを減らすため、
node_modules,.git,distなどのディレクトリは自動的にスキャン対象から除外しています。
調査項目とリスクの解説
ツールで検出される主な項目と、その技術的背景は以下の通りです。
| ラベル | リスクの内容 | 修正方法(例) |
|---|---|---|
| Latest指定 | CDNでバージョンを固定していないため、ある日突然jQuery 4.0へ強制アップデートされ、サイトが壊れる最大の要因です。 |
jquery-3.7.1.min.jsのように固定する。 |
| $.trim() | jQuery独自の関数。4.0で廃止。JS標準の.trim()に置き換える必要があります。 |
str.trim() |
| $.isArray() | 4.0で廃止。標準のArray.isArray()が利用可能です。 |
Array.isArray(arr) |
| $.isFunction() | 4.0で廃止。typeof等で判定するように変更します。 |
typeof fn === 'function' |
| $.now() | 4.0で廃止。標準のDate.now()を利用します。 |
Date.now() |
| $.proxy() | 4.0で廃止。標準の.bind()またはアロー関数を利用します。 |
fn.bind(this) |
| JSONP | jQuery 4.0ではJSONPの自動サポートが削除されます。 | Fetch API等への移行 |
少し技術的なポイント:誤検知(ノイズ)を防ぐ正規表現
単純に trim で検索すると、標準の JavaScript メソッドまでヒットしてしまい、調査が終わりません。jQuery独自の呼び出しだけを狙い撃ちするために、以下の正規表現を使用しています。
// 直前にドットがない(標準メソッドではない)かつ $ または jQuery から始まる呼び出し
const pattern = /(?:^|[^.])(?:\$|jQuery)\s*\.\s*trim\s*\(/gm;
調査の優先順位
ツールを回した後の対応優先順位は以下の通りです。
-
【最優先】
latest指定: 即座にバージョンを固定(例:3.7.1)してください。 意図しない4.0への昇格を防ぐのが最大の防御です。 - 【高】外部プラグイン: 4.0で動作するか検証。動かない場合はライブラリの更新を検討してください。
-
【中】
$.trim()等: 4.0へ正式に移行するタイミングで、標準APIへ置換していきます。
まとめ
jQuery 4.0はWebの進化を感じさせる素晴らしいアップデートですが、既存資産を守るためには 「まずバージョンを固定して勝手に上がらないようにする」 守りの姿勢が不可欠です。
まずは自分のリポジトリをスキャンして、リスクの目安を把握することから始めるといいかもしれません。
