importmap向けに誤ったUMDバンドルをESMファイルへ置き換え

activeadmin/activeadmin

dependencies:vendor Rakeタスクがimportmapで参照されないUMDバンドルをvendorしていたバグを修正し、importmapが実際にピンしているESMファイルを正しく生成するよう変更されました。

背景

これまでの dependencies:vendor タスクは、floating-uiのvendorファイルを生成する処理として UMDバンドルfloating-ui.dom.umd.min.js)をコピーしていました。しかしimportmapが実際にピンしているのは @floating-ui--core.js@floating-ui--dom.js の2つのESMファイルであり、タスクが生成するファイルとimportmapが参照するファイルの間に乖離が生じていました。

その結果、vendor/javascript/floating-ui--dom.js として配置されたUMDファイルはimportmapからもアプリケーションコードからも参照されない死んだアーティファクトとなっており、一方でimportmapが参照する @floating-ui--core.js@floating-ui--dom.js にはRakeタスクによる自動生成の手段が存在しない状態でした。

技術的な変更

tasks/dependencies.rakedependencies:vendor タスクで、UMDバンドルのコピー処理を2つのESMファイルのコピー処理に置き換えました。

変更前:

# Copy @floating-ui/dom to vendor
FileUtils.cp(
  File.join(node_modules, '@floating-ui', 'dom', 'dist', 'floating-ui.dom.umd.min.js'),
  File.join(vendor, 'floating-ui--dom.js')
)

変更後:

# Copy @floating-ui/core and @floating-ui/dom ESM files to vendor
FileUtils.cp(
  File.join(node_modules, '@floating-ui', 'core', 'dist', 'floating-ui.core.browser.mjs'),
  File.join(vendor, '@floating-ui--core.js')
)
FileUtils.cp(
  File.join(node_modules, '@floating-ui', 'dom', 'dist', 'floating-ui.dom.browser.mjs'),
  File.join(vendor, '@floating-ui--dom.js')
)

コピー元のファイル形式が .umd.min.js(UMD)から .browser.mjs(ESM)に変わり、コピー先のパスも floating-ui--dom.js から @floating-ui--core.js / @floating-ui--dom.js へと修正されています。また、不要になったUMDファイル vendor/javascript/floating-ui--dom.js(1行のminifiedコード)はリポジトリから削除されました。

設計判断

importmapとESMの相性を踏まえ、ブラウザネイティブのESMファイル(.browser.mjs を採用する設計が選択されています。UMDはAMD・CommonJS・グローバル変数のいずれの環境でも動作する汎用フォーマットですが、importmapはES Modulesのネイティブな import 構文を前提としており、UMDバンドルはその用途に適しません。

今回の修正により、@floating-ui/core@floating-ui/dom の両方をRakeタスクで一元管理できるようになっています。importmapのピン定義・vendorディレクトリの実ファイル・Rakeタスクによる生成元が一致した状態が、このタスクの本来あるべき姿です。

まとめ

この変更は、モジュール形式の不一致(UMD vs ESM)というサイレントなバグを修正し、dependencies:vendor タスクをimportmapが参照するファイルの正規の生成源として機能させるものです。UMDファイルの削除と合わせて、vendorディレクトリに参照されないファイルが混在しない整合した状態が実現されています。

記事メタデータ

Generated by:
Claude Sonnet 4.6 for DiffDaily
LLM Trace:
04e2c268

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

品質レビュー結果

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

Review Criteria:

記事構成 ✓ PASS

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

「リード文(総論)→背景・技術詳細(各論)→まとめ(結論)」の構成が明確です。任意項目の「設計判断」も含まれており、読者の理解を深める構成になっています。

カスタムMarkdown構文 ✓ PASS

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

ファイル名付きシンタックスハイライト(`ruby:tasks/dependencies.rake`)とGitHubのPRリンク記法が正しく使用されています。

対象読者への適合性 ✓ PASS

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

importmap, UMD, ESMといった技術用語を前提としており、専門知識を持つエンジニアという対象読者に適した内容です。

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

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

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

Diff内容との照合 ✓ PASS

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

記事内のコードブロックは、提供されたDiff情報(`tasks/dependencies.rake`の変更)を正確に引用しています。また、削除されたファイル(`vendor/javascript/floating-ui--dom.js`)に関する記述もDiffと一致しています。

技術用語の正確性 ✓ PASS

技術用語の正確な使用

UMD, ESM, importmapなどの技術用語が、PRの文脈に沿って正確に使用されています。

説明の技術的正確性 ✓ PASS

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

モジュール形式の不一致(UMD vs ESM)という問題の原因と、それを解決するためのコード変更に関する説明は、技術的に正確かつ論理的です。

事実の突合 ✓ PASS

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

記事内のすべての主張は、PRのタイトル、Description、Diffの内容によって裏付けられています。ハルシネーション(捏造)は見られません。

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

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

PR番号(#8963)やファイルパス、ライブラリ名などの固有名詞はすべて正確です。

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

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

記事のタイトルは、PRの「依存関係タスクを修正し、importmap用に正しいESMファイルをvendorする」という主旨を的確に要約しています。

外部知識の正確性 ✓ PASS

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

PR情報に記載のないバージョンサポート情報やリリース日程などの外部知識は含まれていません。

時間表現の正確性 ✓ PASS

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

「これまでのタスクは〜」といった時間表現は、PR内の時制(過去形)と一致しており、正確です。