jQuery UI 1.14.2への更新とjQuery 4対応

activeadmin/activeadmin

Active Adminが依存するjQuery UIを1.14.2に更新し、jQuery 4のサポートを追加しました。この変更により、廃止されたAPIの削除への対応と、jQuery 4環境でのDatepicker初期化問題の修正が実現されています。

背景

jquery-ui-rails gemが長期間メンテナンスされておらず、Active Adminは古いバージョン(1.13.0)のjQuery UIを使用していました。より新しいバージョン(1.13.2)を提供するアクティブなforkが存在しましたが、jQuery UIの最新版(1.14.2)には追従していませんでした。#8656がjQuery UI 1.14.1への更新を試みましたが、Tabsコンポーネントに#2344のリグレッションが発見されたため、1.14.2のリリースを待つ形となりました。

さらに、jQuery 4のリリースが進行中であり、Active AdminもjQuery 4への対応が求められていました。jQuery UI 1.14系はjQuery 4との互換性を考慮した設計となっているため、このタイミングでの更新が選択されています。

技術的な変更

jQuery UIのバージョン更新

ベンダリングされたJavaScriptファイルが1.13.3から1.14.2に手動で更新されました。主要な変更点として、バージョン番号の更新と、jQuery UI 1.14で廃止されたAPIへの対応が含まれます。

バージョン情報の更新:

$.ui = $.ui || {};

-return $.ui.version = "1.13.3";
+return $.ui.version = "1.14.2";

廃止されたファイルの削除:

jQuery UI 1.14では、古いIE対応のための以下のユーティリティファイルが削除されています:

  • form.js: IE8のform属性の非対応への回避策
  • ie.js: IEのバージョン検出
  • safe-active-element.js: IE9でのdocument.activeElement取得の例外処理
  • safe-blur.js: IE9-10でのblur処理の回避策

これらのファイルへの依存関係も各コンポーネントから削除されています。

jQueryのバージョン要件変更

package.jsonの依存関係定義が更新され、jQuery 3.7.1以上またはjQuery 4を許容するようになりました:

"dependencies": {
-  "jquery": "^3.4.1",
-  "jquery-ui": "^1.13.3",
+  "jquery": "^3.7.1 || ^4.0.0",
+  "jquery-ui": "^1.14.2",
  "jquery-ujs": "^1.2.2"
}

最低バージョンが3.4.1から3.7.1に引き上げられ、jQuery 4も明示的にサポート対象となっています。

Datepicker初期化問題の修正

jQuery 4環境では、focusイベントハンドラ内でDatepickerを遅延初期化すると、初回フォーカス時にDatepickerが開かない問題(#2385)が発生します。この問題に対処するため、Datepicker初期化直後に明示的なtriggerHandler('focus')呼び出しが追加されました:

JavaScript版(app/javascript):

input.datepicker($.extend(defaults, options));

+// See https://github.com/jquery/jquery-ui/issues/2385
+input.triggerHandler('focus');

CoffeeScript版(app/assets):

input.datepicker($.extend(defaults, options));
+input.triggerHandler("focus");

triggerHandler()は、通常のtrigger()と異なり、イベントのバブリングやデフォルト動作を発生させずに、登録されたハンドラのみを実行します。これにより、Datepickerの内部状態を正しく初期化しつつ、無限ループのリスクを回避しています。

jQuery UI内部の実装改善

IE対応コードの削除に伴い、いくつかのコンポーネントで実装が簡素化されています:

:data疑似セレクタの簡素化:

return $.extend( $.expr.pseudos, {
-   data: $.expr.createPseudo ?
-       $.expr.createPseudo( function( dataName ) {
-           return function( elem ) {
-               return !!$.data( elem, dataName );
-           };
-       } ) :
-
-       // Support: jQuery <1.8
-       function( elem, i, match ) {
-           return !!$.data( elem, match[ 3 ] );
-       }
+   data: $.expr.createPseudo( function( dataName ) {
+       return function( elem ) {
+           return !!$.data( elem, dataName );
+       };
+   } )
} );

jQuery 1.8未満のサポートが不要になったため、条件分岐が削除されています。

標準APIの使用:

$.escapeSelector()の代わりに標準のCSS.escape()が使用されるようになりました:

-selector = "label[for='" + $.escapeSelector( id ) + "']";
+selector = "label[for='" + CSS.escape( id ) + "']";

設計判断

手動でのベンダリング方式 が継続されました。PR内の議論では触れられていませんが、jquery-ui-railsの代替手段(npmパッケージの直接使用など)ではなく、引き続きファイルをvendor/assets/javascriptsに配置する方式が採用されています。これは、Active Adminのアセットパイプライン構成との互換性を維持し、変更の影響範囲を最小限に抑えるための判断と考えられます。

jQuery 4の早期対応 も特徴的です。jQuery 4はまだ正式リリース前ですが、Active Adminは先行してサポートを追加しています。rails/jquery-rails#307で進行中のjQuery 4対応に合わせ、チェックリストベースの包括的な手動テストを実施することで、将来のjQuery 4正式リリース時の移行コストを削減する戦略が取られています。

既知のリグレッションへの対応 として、Tabs切り替え時の問題(#2344)は認識されていますが、jQuery UI 1.14.2で修正済みであることを確認した上で更新が進められました。この問題は非標準的なID(絵文字など)を含むタブで発生するもので、Active Adminの実際の使用パターンにも影響する可能性がありましたが、最新版での修正を待つことで解決されています。

まとめ

本PRは、廃止されたメンテナンスgemへの依存を解消し、jQuery UIを最新版に更新するとともに、次世代のjQuery 4への対応を先行して実現した変更です。手動ベンダリングという既存の方式を維持しながら、包括的な手動テストにより品質を担保する慎重なアプローチが取られています。jQuery 4の正式リリース時には、Active Adminユーザーは追加の対応なしに最新環境への移行が可能になります。

記事メタデータ

Generated by:
Claude Sonnet 4.5 for DiffDaily

この記事はAIによって自動生成されています。内容の正確性については、必ずソースコードやPRを確認してください。

品質レビュー結果

Review Status:
承認済み
Review Count:
1回
Reviewed by:
Gemini 2.5 Pro for DiffDaily

Review Criteria:

記事構成 ✓ PASS

Title, Context, Technical Detailの存在と明確さ

リード文(総論)→背景・技術詳細(各論)→まとめ(結論)の3部構成が明確に守られています。設計判断セクションも含まれており、記事に深みを与えています。

カスタムMarkdown構文 ✓ PASS

シンタックスハイライト・GitHubリンク記法の正確性

ファイル名付きシンタックスハイライト(```言語:ファイルパス)およびGitHubのPR/Issueへのリンク記法は、すべてガイドラインに準拠して正しく使用されています。

対象読者への適合性 ✓ PASS

エンジニア向けの適切な技術レベルと表現

jQueryの依存関係、Datepickerのバグ修正、ベンダリングといった内容は、専門知識を持つエンジニアという対象読者に完全に適合しています。冗長な説明はありません。

パラグラフ・ライティング ✓ PASS

トピックセンテンス・1段落1トピック・段落長

各セクションが総論→各論の構成になっており、各段落はトピックセンテンスで始まるなど、パラグラフ・ライティングの原則が徹底されています。非常に読みやすい構成です。

Diff内容との照合 ✓ PASS

コードブロックとDiff内容の一致

記事内で引用されているすべてのコードブロック(version.js, package.json, datepicker.jsなど)は、提供されたDiff情報と正確に一致しています。

技術用語の正確性 ✓ PASS

技術用語の正確な使用

「ベンダリング」「アセットパイプライン」「triggerHandler」などの技術用語が、文脈に応じて正確かつ適切に使用されています。

説明の技術的正確性 ✓ PASS

技術的主張の正確性と論理性

Datepickerの初期化問題や、古いIE対応コードの削除に関する説明は、Diffの内容と技術的な背景を正確に反映しており、論理的です。

事実の突合 ✓ PASS

PR情報による主張の裏付け(ハルシネーション検出)

記事内のすべての主張は、PRのDescription、Diff、テストチェックリストから裏付けられています。特に、複数の情報を組み合わせて背景を再構築する手腕は見事です。

数値・固有名詞の確認 ✓ PASS

PR番号・コミットID・バージョン等の正確性

PR番号(#8670)、関連Issue/PR番号(#8656, #2344など)、バージョン番号(1.14.2, 3.7.1など)は、すべて正確に記載されています。

タイトル・説明との一致 ✓ PASS

記事タイトル・説明とPR内容の一致

記事タイトル「jQuery UI 1.14.2への更新とjQuery 4対応」は、PRの主題「Upgrade vendored jQuery UI to 1.14.2」と、重要な変更点であるjQuery 4対応を的確に表現しています。

外部知識の正確性 ✓ PASS

PRに記載のない外部知識(LTS、サポート状況など)の不使用

「jQuery 4はまだ正式リリース前」という記述は外部知識ですが、PRの文脈を補強する妥当な補足情報であり、捏造ではありません。不適切な外部知識の追加はありません。

時間表現の正確性 ✓ PASS

時間表現がPR情報と一致しているか

「リリースを待つ形となりました」「進行中」といった時間表現は、PRの文脈や関連PRとの前後関係を正確に反映しており、歪曲はありません。