|
| 1 | +# jsdom v26.1.0 → v27.3.0 アップデート計画 |
| 2 | + |
| 3 | +**作成日**: 2025-12-17 |
| 4 | + |
| 5 | +**対象バージョン**: v26.1.0 → v27.3.0(メジャーバージョンアップ) |
| 6 | + |
| 7 | +**ステータス**: ✅ 完了(2025-12-17 実施) |
| 8 | + |
| 9 | +**優先度**: 低(プロジェクトへの破壊的影響なし) |
| 10 | + |
| 11 | +## 目次 |
| 12 | + |
| 13 | +1. [破壊的変更と影響](#破壊的変更と影響) |
| 14 | +2. [便利な新機能・改善](#便利な新機能改善) |
| 15 | +3. [検証チェックリスト](#検証チェックリスト) |
| 16 | +4. [リファレンス](#リファレンス) |
| 17 | + |
| 18 | +--- |
| 19 | + |
| 20 | +## 破壊的変更と影響 |
| 21 | + |
| 22 | +### 🟡 1. 仮想コンソール API の変更 |
| 23 | + |
| 24 | +| 項目 | v26.1.0 | v27.0.0+ | |
| 25 | +| ---------- | ----------------- | ------------- | |
| 26 | +| メソッド名 | `sendTo()` | `forwardTo()` | |
| 27 | +| オプション | `omitJSDOMErrors` | `jsdomErrors` | |
| 28 | + |
| 29 | +**影響度**: ✅ 無(プロジェクトで使用なし) |
| 30 | + |
| 31 | +**詳細**: |
| 32 | + |
| 33 | +- プロジェクトのテストコードで virtualConsole の使用がない |
| 34 | +- jsdom を直接操作するコードが存在しない |
| 35 | + |
| 36 | +--- |
| 37 | + |
| 38 | +### 🟡 2. イベント API の変更 |
| 39 | + |
| 40 | +| 変更内容 | 詳細 | |
| 41 | +| ----------------- | -------------------------------------------------- | |
| 42 | +| `element.click()` | `MouseEvent` → `PointerEvent` を発火するように変更 | |
| 43 | + |
| 44 | +**影響度**: ✅ 無(プロジェクトで直接的な使用なし) |
| 45 | + |
| 46 | +**詳細**: |
| 47 | + |
| 48 | +- ユニットテストで click イベント操作なし |
| 49 | +- E2E テスト(Playwright)は実ブラウザを使用するため jsdom 非依存 |
| 50 | + |
| 51 | +--- |
| 52 | + |
| 53 | +### 🟡 3. CSS セレクタエンジンの切り替え |
| 54 | + |
| 55 | +| 項目 | v26.1.0 | v27.0.0+ | |
| 56 | +| ---------------- | -------- | -------------------------- | |
| 57 | +| セレクタエンジン | `nwsapi` | `@asamuzakjp/dom-selector` | |
| 58 | + |
| 59 | +**影響度**: ✅ 改善(20+ バグ修正) |
| 60 | + |
| 61 | +**詳細**: |
| 62 | + |
| 63 | +- より高速で正確なセレクタマッチング |
| 64 | +- CSS セレクタ関連の 20 個以上のバグが修正 |
| 65 | +- プロジェクトでは querySelector の複雑な使用がないため大きな影響なし |
| 66 | + |
| 67 | +--- |
| 68 | + |
| 69 | +### 🟡 4. ユーザーエージェント スタイルシートの変更 |
| 70 | + |
| 71 | +| 項目 | v26.1.0 | v27.0.0+ | |
| 72 | +| ---------------- | ------------ | ----------------- | |
| 73 | +| スタイルシート源 | Chromium由来 | HTML Standard由来 | |
| 74 | + |
| 75 | +**影響度**: ✅ 無(プロジェクトで使用なし) |
| 76 | + |
| 77 | +**詳細**: |
| 78 | + |
| 79 | +- `getComputedStyle()` を使用するテストがない |
| 80 | +- プロジェクトではスタイル関連のテストを実施していない |
| 81 | + |
| 82 | +--- |
| 83 | + |
| 84 | +### 🟡 5. Input 要素の pattern 属性の正規表現フラグ変更 |
| 85 | + |
| 86 | +| 項目 | v26.1.0 | v27.0.0+ | |
| 87 | +| -------------- | ------- | -------- | |
| 88 | +| 正規表現フラグ | `u` | `v` | |
| 89 | + |
| 90 | +**影響度**: ✅ 無(プロジェクトで使用なし) |
| 91 | + |
| 92 | +**詳細**: |
| 93 | + |
| 94 | +- プロジェクトで `<input pattern="">` 属性を使用していない |
| 95 | + |
| 96 | +--- |
| 97 | + |
| 98 | +### 🟡 6. Node.js 最小バージョン要件 |
| 99 | + |
| 100 | +| 項目 | v26.1.0 | v27.0.0+ | |
| 101 | +| ------------ | -------- | -------- | |
| 102 | +| 最小 Node.js | v18.0.0+ | v20.0.0+ | |
| 103 | + |
| 104 | +**影響度**: ✅ 無(プロジェクトで満たしている) |
| 105 | + |
| 106 | +**詳細**: |
| 107 | + |
| 108 | +- 現在の環境は Node.js 22 で要件を満たす |
| 109 | +- `package.json` で既に `engines.node` が適切に設定されている |
| 110 | + |
| 111 | +--- |
| 112 | + |
| 113 | +## 便利な新機能・改善 |
| 114 | + |
| 115 | +### ✨ 1. 新イベントコンストラクタの追加 |
| 116 | + |
| 117 | +```typescript |
| 118 | +// 以下が新規実装 |
| 119 | +new BeforeUnloadEvent(); |
| 120 | +new BlobEvent(); |
| 121 | +new DeviceMotionEvent(); |
| 122 | +new DeviceOrientationEvent(); |
| 123 | +new PointerEvent(); |
| 124 | +new PromiseRejectionEvent(); |
| 125 | +new TransitionEvent(); |
| 126 | +``` |
| 127 | + |
| 128 | +**用途**: より広範なイベントハンドリングが可能に |
| 129 | + |
| 130 | +--- |
| 131 | + |
| 132 | +### ✨ 2. MouseEvent の改善 |
| 133 | + |
| 134 | +```typescript |
| 135 | +// 新規プロパティ追加 |
| 136 | +mouseEvent.movementX; |
| 137 | +mouseEvent.movementY; |
| 138 | +``` |
| 139 | + |
| 140 | +**用途**: ポインタロック機能のサポート向上 |
| 141 | + |
| 142 | +--- |
| 143 | + |
| 144 | +### ✨ 3. CustomElements API の強化 |
| 145 | + |
| 146 | +```typescript |
| 147 | +// 新規メソッド追加 |
| 148 | +window.customElements.getName(constructor); |
| 149 | +``` |
| 150 | + |
| 151 | +**用途**: カスタム要素の名前取得が可能に |
| 152 | + |
| 153 | +--- |
| 154 | + |
| 155 | +### ✨ 4. CSS セレクタとパーサの大幅改善 |
| 156 | + |
| 157 | +**改善点**: |
| 158 | + |
| 159 | +- セレクタエンジン刷新による 20+ バグ修正 |
| 160 | +- ネストセレクタのサポート向上 |
| 161 | +- CSS パーサの精度向上 |
| 162 | +- CSSOM オブジェクト API の充実 |
| 163 | + |
| 164 | +**恩恵**: |
| 165 | + |
| 166 | +- テストの正確性向上 |
| 167 | +- CSS マッチング結果の信頼性向上 |
| 168 | + |
| 169 | +--- |
| 170 | + |
| 171 | +### ✨ 5. Spec 準拠性の向上 |
| 172 | + |
| 173 | +**改善項目**: |
| 174 | + |
| 175 | +- Window オブジェクトの spec 準拠 |
| 176 | +- `document.createEvent()` の正確性向上 |
| 177 | +- ElementInternals のアクセシビリティ機能修正 |
| 178 | + |
| 179 | +--- |
| 180 | + |
| 181 | +## 検証チェックリスト |
| 182 | + |
| 183 | +| 項目 | コマンド | 期待結果 | |
| 184 | +| ------------------------ | --------------------------- | -------------------------- | |
| 185 | +| ユニットテスト実行 | `pnpm test:unit` | すべてのテストが PASS | |
| 186 | +| テスト網羅率確認 | `pnpm test:unit --coverage` | カバレッジが現状以上を維持 | |
| 187 | +| ビルド確認 | `pnpm build` | エラーなくビルド完了 | |
| 188 | +| E2E テスト(オプション) | `pnpm test:integration` | すべてのテストが PASS | |
| 189 | + |
| 190 | +--- |
| 191 | + |
| 192 | +## 実装チェックリスト |
| 193 | + |
| 194 | +- [x] `pnpm install` で依存関係を更新 |
| 195 | +- [x] `pnpm test:unit` で全テスト実行 |
| 196 | +- [x] テスト結果を確認 |
| 197 | +- [x] 破壊的変更がないことを確認 |
| 198 | + |
| 199 | +--- |
| 200 | + |
| 201 | +## 結論 |
| 202 | + |
| 203 | +**推奨**: ✅ **すぐにアップグレード可能** |
| 204 | + |
| 205 | +**理由**: |
| 206 | + |
| 207 | +1. プロジェクトで破壊的変更に該当する機能を使用していない |
| 208 | +2. セレクタエンジンの改善により、テストのロバストネスが向上 |
| 209 | +3. Node.js 要件を満たしている |
| 210 | +4. 既存テストスイートで動作確認可能 |
| 211 | + |
| 212 | +--- |
| 213 | + |
| 214 | +## 検証結果(2025-12-17 実施) |
| 215 | + |
| 216 | +### 実施内容 |
| 217 | + |
| 218 | +- `pnpm install` で jsdom 26.1.0 → 27.3.0、@types/jsdom 21.1.7 → 27.0.0 に更新 |
| 219 | +- `pnpm test:unit` を実行 |
| 220 | + |
| 221 | +### 結果 |
| 222 | + |
| 223 | +✅ **全テスト合格** |
| 224 | + |
| 225 | +- テストファイル: 28 個 |
| 226 | +- テスト件数: 1745 合格(1 スキップ) |
| 227 | +- 実行時間: 16.84 秒 |
| 228 | + |
| 229 | +### 教訓 |
| 230 | + |
| 231 | +1. **メジャーバージョンアップでも安全**: 破壊的変更が実際に使用していない機能だったため、アップグレード影響なし |
| 232 | +2. **計画段階での影響分析が有効**: 事前に破壊的変更をリスト化し、プロジェクト内の使用箇所を調査することで、スムーズなアップグレードが可能 |
| 233 | +3. **テストスイート信頼性**: 包括的なテスト(1700+ テスト)により、回帰バグの検出が容易 |
| 234 | +4. **CSS セレクタエンジン改善**: 新しいエンジンでテストがより正確になる可能性あり |
| 235 | + |
| 236 | +--- |
| 237 | + |
| 238 | +## リファレンス |
| 239 | + |
| 240 | +- [jsdom Changelog](https://github.com/jsdom/jsdom/blob/main/Changelog.md) |
| 241 | +- [jsdom v27.0.0 Release Notes](https://github.com/jsdom/jsdom/releases/tag/27.0.0) |
| 242 | +- [jsdom v27.3.0 Release Notes](https://github.com/jsdom/jsdom/releases/tag/27.3.0) |
| 243 | +- [PR #2927](https://github.com/AtCoder-NoviSteps/AtCoderNoviSteps/pull/2927) |
0 commit comments