Skip to content

Commit 1abedcf

Browse files
committed
build(deps-dev): Bump jsdom and @types/jsdom (#2965)
1 parent fd4ed17 commit 1abedcf

File tree

3 files changed

+366
-82
lines changed

3 files changed

+366
-82
lines changed
Lines changed: 243 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,243 @@
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)

package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@
4040
"@tailwindcss/forms": "0.5.10",
4141
"@testing-library/jest-dom": "6.9.1",
4242
"@types/gtag.js": "0.0.20",
43-
"@types/jsdom": "21.1.7",
43+
"@types/jsdom": "27.0.0",
4444
"@typescript-eslint/eslint-plugin": "8.50.0",
4545
"@typescript-eslint/parser": "8.50.0",
4646
"@vitest/coverage-v8": "4.0.15",
@@ -50,7 +50,7 @@
5050
"eslint-plugin-svelte": "3.10.1",
5151
"globals": "16.5.0",
5252
"husky": "9.1.7",
53-
"jsdom": "26.1.0",
53+
"jsdom": "27.3.0",
5454
"lint-staged": "16.2.7",
5555
"nock": "14.0.10",
5656
"pnpm": "10.25.0",

0 commit comments

Comments
 (0)