jQuery 4.0 完全ガイド - 10年ぶりのメジャーアップデート全変更点解説

jQuery 4.0 完全ガイド - 10年ぶりのメジャーアップデート全変更点解説

作成日:

2026年1月17日、jQueryチームは jQuery 4.0.0 を正式リリースしました。

これは約 10年ぶりのメジャーアップデート で、レガシーコードの整理、非推奨APIの削除、モダンブラウザへの最適化など多数の変更が含まれています。

この記事では、jQuery 4.0 の全変更点を具体的なコード例とともに詳しく解説します。


概要:jQuery 4.0 の主な変更点

カテゴリ変更内容
ブラウザサポートIE10以下、Edge Legacy のサポート終了
非推奨API$.isArray(), $.parseJSON(), $.trim() など削除
AJAXJSON→JSONP自動昇格の廃止、スクリプト自動実行の変更
CSS単位なし値への px 自動付加ルール変更
イベントfocus/blur系イベントの発火順がW3C標準準拠に
モジュールAMD → ES Modules へ移行
サイズgzip圧縮時 約3KB削減、Slimビルドは約8KB削減
セキュリティTrusted Types、CSP対応強化

1. 対応ブラウザの変更

サポート終了となったブラウザ

  • Internet Explorer 10 以下 — 完全にサポート終了
  • Edge Legacy — サポート終了
  • 古いiOS Safari — 現在のバージョンから2世代前までのみサポート
  • Android 標準ブラウザ — サポート終了
  • 古いFirefox — 最新2バージョン(ESR含む)のみサポート

注意: IE11 はまだサポートされていますが、jQuery 5.0 に向けて段階的撤退が計画されています。

影響を受けるケース

JavaScript
// IE10以下を対象としたポリフィルは不要に
// 以下のようなコードは jQuery 4.0 では不要
if (typeof Array.isArray === 'undefined') {
  Array.isArray = function(arg) {
    return Object.prototype.toString.call(arg) === '[object Array]';
  };
}

2. 削除された非推奨API

長らく非推奨だったAPIが jQuery 4.0 で完全に削除されました。

削除されたメソッド一覧

削除されたメソッド推奨される置き換え
jQuery.isArray()Array.isArray()
jQuery.parseJSON()JSON.parse()
jQuery.trim()String.prototype.trim()
jQuery.type()typeof または Object.prototype.toString.call()
jQuery.now()Date.now()
jQuery.isNumeric()!isNaN()Number()
jQuery.camelCase()カスタム実装または lodash 等
jQuery.nodeName()element.nodeName
jQuery.cssNumber
jQuery.cssProps
jQuery.fx.interval

コード例:移行前後の比較

JavaScript
// jQuery 3.x(非推奨)
if (jQuery.isArray(arr)) {
  // 配列の処理
}
const data = jQuery.parseJSON(jsonString);
const trimmed = jQuery.trim("  hello  ");
const timestamp = jQuery.now();
 
// jQuery 4.0(ネイティブAPI使用)
if (Array.isArray(arr)) {
  // 配列の処理
}
const data = JSON.parse(jsonString);
const trimmed = "  hello  ".trim();
const timestamp = Date.now();

jQuery.type() の移行

JavaScript
// jQuery 3.x
jQuery.type(undefined);     // "undefined"
jQuery.type(null);          // "null"
jQuery.type([]);            // "array"
jQuery.type({});            // "object"
jQuery.type(/regex/);       // "regexp"
jQuery.type(new Date());    // "date"
 
// jQuery 4.0(ネイティブで代替)
function getType(value) {
  if (value === null) return 'null';
  if (value === undefined) return 'undefined';
  if (Array.isArray(value)) return 'array';
  
  const type = Object.prototype.toString.call(value);
  return type.slice(8, -1).toLowerCase();
}
 
getType([]);            // "array"
getType({});            // "object"
getType(/regex/);       // "regexp"
getType(new Date());    // "date"

3. 内部専用メソッドの削除

削除されたプロトタイプメソッド

jQuery オブジェクトのプロトタイプにあった以下のメソッドが削除されました:

  • $.fn.push()
  • $.fn.sort()
  • $.fn.splice()

これらは Array 類似の動作をする未文書の内部用メソッドでした。

JavaScript
// jQuery 3.x(非推奨の使い方)
const $elems = $('div');
$elems.push(document.createElement('span'));
 
// jQuery 4.0
const $elems = $('div');
const elemsArray = $elems.toArray();
elemsArray.push(document.createElement('span'));
const $newElems = $(elemsArray);
 
// または
[].push.call($elems, document.createElement('span'));

jQuery.fn.init() の変更

jQuery.fn.init() の未文書パラメータ root が削除されました。


4. AJAX の重要な変更

4.1 JSON → JSONP 自動昇格の廃止

jQuery 3.x では、dataType: "json" でコールバック関数を指定すると自動的に JSONP に変換されていました。この挙動が廃止されました。

JavaScript
// jQuery 3.x(暗黙のJSONP変換)
$.ajax({
  url: 'https://api.example.com/data',
  dataType: 'json',
  jsonpCallback: 'handleResponse',  // これでJSONPに自動変換されていた
  success: function(data) { /* ... */ }
});
 
// jQuery 4.0(明示的に指定)
$.ajax({
  url: 'https://api.example.com/data',
  dataType: 'jsonp',  // 明示的にjsonpを指定
  jsonpCallback: 'handleResponse',
  success: function(data) { /* ... */ }
});

4.2 スクリプト自動実行の変更

dataType: "script" を明示的に指定しないと、スクリプトが自動実行されなくなりました。

JavaScript
// jQuery 3.x(自動実行)
$.ajax({
  url: '/scripts/plugin.js',
  success: function() {
    // スクリプトは自動的に実行されていた
  }
});
 
// jQuery 4.0(明示的に指定)
$.ajax({
  url: '/scripts/plugin.js',
  dataType: 'script',  // 明示的に指定
  success: function() {
    // スクリプトが実行される
  }
});
 
// または $.getScript() を使用
$.getScript('/scripts/plugin.js', function() {
  // スクリプトが実行される
});

4.3 FormData のサポート強化

$.ajax()data 引数に FormData オブジェクトを直接渡せるようになりました。

JavaScript
// jQuery 4.0(FormData対応)
const formData = new FormData(document.querySelector('form'));
formData.append('extraField', 'value');
 
$.ajax({
  url: '/api/upload',
  method: 'POST',
  data: formData,
  contentType: false,    // FormData使用時は必須
  processData: false,    // FormData使用時は必須
  success: function(response) {
    console.log('アップロード成功:', response);
  }
});

4.4 CSP対応のスクリプト読み込み

非同期スクリプトの読み込みに <script> タグを使用するようになり、Content Security Policy (CSP) との互換性が向上しました。


5. CSS・スタイル関連の変更

5.1 単位なし値への px 自動付加ルール変更

以前は多くのプロパティで単位なしの数値に px が自動付加されていましたが、jQuery 4.0 では特定のプロパティのみに限定されました。

JavaScript
// jQuery 3.x(暗黙のpx付加)
$('#element').css('width', 100);    // → width: 100px
$('#element').css('margin', 20);    // → margin: 20px
 
// jQuery 4.0(明示的に単位を指定)
$('#element').css('width', '100px');
$('#element').css('margin', '20px');
 
// 数値のままでOKなプロパティ
$('#element').css('opacity', 0.5);   // opacity は単位不要
$('#element').css('z-index', 100);   // z-index は単位不要
$('#element').css('line-height', 1.5); // line-height は単位不要

5.2 opacity CSS フックの削除

opacity の CSS フックが削除されました。detached element(DOMに未接続の要素)に対して .css("opacity") を実行すると、空文字列が返る場合があります。

JavaScript
// 注意が必要なケース
const $detached = $('<div>').css('opacity', 0.5);
console.log($detached.css('opacity')); // jQuery 4.0では空文字列の可能性
 
// 安全な方法
const $attached = $('<div>').css('opacity', 0.5).appendTo('body');
console.log($attached.css('opacity')); // "0.5"
$attached.remove();

6. イベントの仕様変更

6.1 フォーカスイベントの発火順序

focus / blur / focusin / focusout イベントの発火順が W3C 標準 に準拠するようになりました。

JavaScript
// jQuery 4.0 の発火順序(W3C標準)
// 1. focusout (元の要素から)
// 2. focusin (新しい要素へ)
// 3. blur (元の要素から)
// 4. focus (新しい要素へ)
 
$('#input1').on('blur', function() {
  console.log('1. blur');
});
$('#input1').on('focusout', function() {
  console.log('2. focusout');  // jQuery 4.0 では先に発火
});
$('#input2').on('focus', function() {
  console.log('3. focus');
});
$('#input2').on('focusin', function() {
  console.log('4. focusin');   // jQuery 4.0 では先に発火
});

6.2 focusin/focusout の shim 削除

focusinfocusout のポリフィル的な処理が削除されました。これらのイベントはネイティブのブラウザ実装に依存します。


7. モジュール化とビルドの変更

7.1 ES Modules への移行

ソースコードが AMD(RequireJS形式)から ES Modules に移行しました。

JavaScript
// jQuery 3.x(AMD形式)
define(['jquery'], function($) {
  // jQueryを使用
});
 
// jQuery 4.0(ES Modules)
import $ from 'jquery';
 
// または
import jQuery from 'jquery';

7.2 package.json の exports フィールド

npm パッケージに exports フィールドが追加され、バンドラー(Webpack, Vite, Rollup等)との互換性が向上しました。

JSON
{
  "exports": {
    ".": {
      "import": "./dist/jquery.module.js",
      "require": "./dist/jquery.js"
    },
    "./slim": {
      "import": "./dist/jquery.slim.module.js",
      "require": "./dist/jquery.slim.js"
    }
  }
}

7.3 Vite/Webpack での使用例

JavaScript
// vite.config.js
import { defineConfig } from 'vite';
 
export default defineConfig({
  resolve: {
    alias: {
      jquery: 'jquery/dist/jquery.module.js'
    }
  }
});

8. Slim ビルドの変更

Slim ビルドから以下のモジュールが除外されました:

  • Deferreds$.Deferred() が使用不可
  • Callbacks$.Callbacks() が使用不可
  • queue.queue() / .dequeue() が使用不可
JavaScript
// Slim ビルドでは使用不可
const deferred = $.Deferred();
deferred.resolve('success');
 
// ネイティブ Promise を使用
const promise = new Promise((resolve, reject) => {
  resolve('success');
});
 
// または通常ビルドを使用

サイズ比較

ビルドjQuery 3.7jQuery 4.0削減量
通常 (gzip)~30KB~27KB-3KB
Slim (gzip)~24KB~16KB-8KB

9. セキュリティ強化

9.1 Trusted Types サポート

jQuery 4.0 は Trusted Types をサポートし、TrustedHTML 型を受け入れるようになりました。

JavaScript
// Trusted Types ポリシーを作成
const policy = trustedTypes.createPolicy('jquery-html', {
  createHTML: (input) => input
});
 
// TrustedHTML を jQuery に渡す
const trustedHtml = policy.createHTML('<div>安全なHTML</div>');
$('#container').html(trustedHtml);

9.2 CSP (Content Security Policy) 対応

  • 非同期スクリプトの読み込みに <script> タグを使用
  • eval() への依存を削減
  • require-trusted-types-for ディレクティブとの互換性

10. toggleClass の変更

toggleClass() のブール値引数による切り替えが変更されました。

JavaScript
// jQuery 3.x(削除された使い方)
$('#element').toggleClass(undefined);  // 動作が不定
$('#element').toggleClass(true);       // すべてのクラスを追加?
 
// jQuery 4.0(明示的な指定)
$('#element').toggleClass('active');           // トグル
$('#element').toggleClass('active', true);     // 追加
$('#element').toggleClass('active', false);    // 削除

11. 移行ガイド

jQuery Migrate プラグインの活用

jQuery 3.x から 4.0 への移行には、jQuery Migrate プラグインを使用することを推奨します。

HTML
<!-- 開発時のみ使用 -->
<script src="https://code.jquery.com/jquery-4.0.0.min.js"></script>
<script src="https://code.jquery.com/jquery-migrate-4.0.0.min.js"></script>
JavaScript
// コンソールに非推奨APIの使用警告が表示される
jQuery.isArray([1, 2, 3]);
// JQMIGRATE: jQuery.isArray is deprecated; use Array.isArray

段階的な移行手順

  1. jQuery Migrate を導入 — 警告を確認
  2. 非推奨API を置き換え — ネイティブAPIへ移行
  3. AJAX設定を確認 — dataType の明示的指定
  4. CSS操作を確認 — 単位の明示的指定
  5. イベント順序を確認 — focus/blur 系の動作確認
  6. テストを実行 — 既存機能の動作確認
  7. jQuery Migrate を削除 — 本番環境へデプロイ

まとめ

jQuery 4.0 は、過去のレガシー機能を整理し、モダンでセキュアな Web 開発により適したライブラリに進化しています。

アップグレードのメリット

  • 軽量化 — gzip圧縮時 約3KB削減
  • セキュリティ向上 — Trusted Types, CSP対応
  • モダン環境対応 — ES Modules, バンドラー互換性
  • コードのクリーンアップ — 非推奨APIの削除

注意点

  • ブラウザサポート変更 — IE10以下は非対応
  • 破壊的変更 — 一部APIの動作変更
  • 移行作業 — 既存コードの修正が必要

新規プロジェクトであれば jQuery 4.0 を採用するメリットは大きいです。既存の大きなコードベースでは、jQuery Migrate を活用して段階的に移行することをおすすめします。


参考リンク