yodogawa 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.windsurf/templates/documentation-rules.md +143 -0
- package/.windsurf/templates/project/01-requirements/01-system-overview.md +49 -0
- package/.windsurf/templates/project/01-requirements/02-features-implemented.md +73 -0
- package/.windsurf/templates/project/01-requirements/03-features-planned.md +75 -0
- package/.windsurf/templates/project/01-requirements/04-non-functional-requirements.md +115 -0
- package/.windsurf/templates/project/01-requirements/05-user-stories.md +124 -0
- package/.windsurf/templates/project/02-behavior/01-scenarios.md +406 -0
- package/.windsurf/templates/project/03-domain/01-domain-model.md +338 -0
- package/.windsurf/templates/project/03-domain/02-ubiquitous-language.md +153 -0
- package/.windsurf/templates/project/04-design/01-tech-stack.md +360 -0
- package/.windsurf/templates/project/04-design/02-repository-structure.md +390 -0
- package/.windsurf/templates/project/04-design/03-screen-design.md +586 -0
- package/.windsurf/templates/project/04-design/04-data-model.md +211 -0
- package/.windsurf/templates/project/04-design/05-api-spec.md +221 -0
- package/.windsurf/templates/project/04-design/06-architecture.md +183 -0
- package/.windsurf/templates/project/04-design/07-infrastructure.md +180 -0
- package/.windsurf/templates/tasks/task-template/a-definition.md +143 -0
- package/.windsurf/templates/tasks/task-template/b-research.md +185 -0
- package/.windsurf/templates/tasks/task-template/c-implementation.md +197 -0
- package/.windsurf/workflows/a-001-SetupDocStructure.md +165 -0
- package/.windsurf/workflows/a-002-InitializeProject.md +229 -0
- package/.windsurf/workflows/a-003-CreateScenarios.md +130 -0
- package/.windsurf/workflows/a-004-DefineDomainModel.md +133 -0
- package/.windsurf/workflows/a-005-CreateDomainDiagram.md +114 -0
- package/.windsurf/workflows/a-006-ReviewRequirementsDomain.md +132 -0
- package/.windsurf/workflows/a-007-DefineTechStack.md +121 -0
- package/.windsurf/workflows/a-008-DefineRepositoryStructure.md +118 -0
- package/.windsurf/workflows/a-009-DefineScreenDesign.md +121 -0
- package/.windsurf/workflows/a-010-DefineDataModel.md +125 -0
- package/.windsurf/workflows/a-011-DefineAPISpec.md +123 -0
- package/.windsurf/workflows/a-012-DefineArchitecture.md +119 -0
- package/.windsurf/workflows/a-013-DefineInfrastructure.md +120 -0
- package/.windsurf/workflows/a-014-ReviewDesign.md +122 -0
- package/.windsurf/workflows/b-001-CreateTaskDirectory.md +71 -0
- package/.windsurf/workflows/b-002-CreateTaskDefinition.md +165 -0
- package/.windsurf/workflows/b-003-CreateTaskResearch.md +412 -0
- package/.windsurf/workflows/b-004-CreateTaskImplementation.md +97 -0
- package/.windsurf/workflows/b-005-ReviewTask.md +312 -0
- package/.windsurf/workflows/c-001-ImplementTask.md +493 -0
- package/.windsurf/workflows/c-002-UpdateDocumentation.md +797 -0
- package/.windsurf/workflows/x-Accessibility-Check.md +469 -0
- package/.windsurf/workflows/x-Bundle-Optimize.md +386 -0
- package/.windsurf/workflows/x-CI-FixFailure.md +636 -0
- package/.windsurf/workflows/x-CI-Setup.md +641 -0
- package/.windsurf/workflows/x-Code-Refactor.md +71 -0
- package/.windsurf/workflows/x-Code-ResearchAndReview.md +78 -0
- package/.windsurf/workflows/x-Component-Create.md +359 -0
- package/.windsurf/workflows/x-Context-CatchUp.md +63 -0
- package/.windsurf/workflows/x-Database-Seed.md +300 -0
- package/.windsurf/workflows/x-Dependencies-Update.md +315 -0
- package/.windsurf/workflows/x-DevEnvironment-Setup.md +437 -0
- package/.windsurf/workflows/x-Logging-Add.md +682 -0
- package/.windsurf/workflows/x-Migration-Create.md +354 -0
- package/.windsurf/workflows/x-Problem-RootCauseAnalysis.md +65 -0
- package/.windsurf/workflows/x-Repository-Push.md +375 -0
- package/.windsurf/workflows/x-Repository-PushToGithub.md +72 -0
- package/.windsurf/workflows/x-Requirements-Clarify.md +61 -0
- package/.windsurf/workflows/z-CreateWorkflow.md +77 -0
- package/README.md +280 -0
- package/bin/cli.js +74 -0
- package/package.json +28 -0
|
@@ -0,0 +1,386 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: ビルド成果物のサイズを分析し、コード分割・遅延ロード・Tree Shakingで最適化するワークフロー
|
|
3
|
+
auto_execution_mode: 1
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Bundle-Optimize (x-Bundle-Optimize)
|
|
7
|
+
|
|
8
|
+
## 目的
|
|
9
|
+
|
|
10
|
+
- ビルド成果物のサイズを分析し、ページロード時間を改善する。
|
|
11
|
+
- 不要な依存関係を特定し、削除または軽量な代替に置き換える。
|
|
12
|
+
- コード分割と遅延ロードを実装し、初回ロード時間を短縮する。
|
|
13
|
+
- Tree Shaking を活用し、未使用コードを削減する。
|
|
14
|
+
- Core Web Vitals(LCP, FID, CLS)を改善する。
|
|
15
|
+
|
|
16
|
+
## 前提
|
|
17
|
+
|
|
18
|
+
- ビルドツールが設定されている(任意のバンドラー/ビルドツール)。
|
|
19
|
+
- 本番ビルドが可能である。
|
|
20
|
+
- パフォーマンス測定ツールが利用可能である(ブラウザ DevTools, Lighthouse等)。
|
|
21
|
+
- Git リポジトリが初期化されている。
|
|
22
|
+
|
|
23
|
+
## 手順
|
|
24
|
+
|
|
25
|
+
### 1. 現在のビルドサイズの測定
|
|
26
|
+
|
|
27
|
+
**ベースライン測定**:
|
|
28
|
+
|
|
29
|
+
本番ビルドを実行してサイズを確認:
|
|
30
|
+
```bash
|
|
31
|
+
# ビルドコマンド例
|
|
32
|
+
npm run build
|
|
33
|
+
# または
|
|
34
|
+
yarn build
|
|
35
|
+
# または
|
|
36
|
+
<build-command>
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
**ビルド出力の確認**:
|
|
40
|
+
- メインバンドル/チャンクのサイズ
|
|
41
|
+
- CSS ファイルのサイズ
|
|
42
|
+
- アセット(画像、フォント等)のサイズ
|
|
43
|
+
- 圧縮後のサイズ(gzip, brotli)
|
|
44
|
+
|
|
45
|
+
**サイズの目安**:
|
|
46
|
+
- **< 100 KB** (gzipped): 優秀
|
|
47
|
+
- **100-200 KB**: 良好
|
|
48
|
+
- **200-500 KB**: 改善の余地あり
|
|
49
|
+
- **> 500 KB**: 最適化が必要
|
|
50
|
+
|
|
51
|
+
### 2. バンドル/ビルド分析
|
|
52
|
+
|
|
53
|
+
**分析ツールの選択と実行**:
|
|
54
|
+
|
|
55
|
+
**バンドル可視化ツール**:
|
|
56
|
+
- webpack-bundle-analyzer (Webpack)
|
|
57
|
+
- rollup-plugin-visualizer (Rollup/Vite)
|
|
58
|
+
- next-bundle-analyzer (Next.js)
|
|
59
|
+
- source-map-explorer (汎用)
|
|
60
|
+
- bundle-buddy (汎用)
|
|
61
|
+
|
|
62
|
+
**分析の実施**:
|
|
63
|
+
```bash
|
|
64
|
+
# ビルドツールに応じたアナライザーを実行
|
|
65
|
+
<build-command> --analyze
|
|
66
|
+
# または
|
|
67
|
+
<analyzer-command>
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
**分析すべき項目**:
|
|
71
|
+
- [ ] 最も大きいパッケージ/モジュール
|
|
72
|
+
- [ ] 重複しているパッケージ
|
|
73
|
+
- [ ] 未使用または不要なコード
|
|
74
|
+
- [ ] サードパーティライブラリのサイズ
|
|
75
|
+
- [ ] アプリケーションコードとベンダーコードの比率
|
|
76
|
+
|
|
77
|
+
### 3. 問題のあるパッケージの特定
|
|
78
|
+
|
|
79
|
+
**よくある問題パッケージと代替案**:
|
|
80
|
+
|
|
81
|
+
**日付ライブラリ**:
|
|
82
|
+
- 問題: moment.js (500KB+)
|
|
83
|
+
- 代替: date-fns, day.js, Temporal API (ネイティブ)
|
|
84
|
+
|
|
85
|
+
**ユーティリティライブラリ**:
|
|
86
|
+
- 問題: lodash (全体インポート)
|
|
87
|
+
- 代替: 個別関数インポート、ネイティブJSメソッド
|
|
88
|
+
|
|
89
|
+
**ポリフィル**:
|
|
90
|
+
- 問題: core-js (古いポリフィル)
|
|
91
|
+
- 代替: 必要なもののみインポート、ターゲットブラウザに応じた選択
|
|
92
|
+
|
|
93
|
+
**パッケージサイズの確認方法**:
|
|
94
|
+
```bash
|
|
95
|
+
# bundlephobia CLI
|
|
96
|
+
npx bundlephobia <package-name>
|
|
97
|
+
|
|
98
|
+
# または https://bundlephobia.com でWeb検索
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
### 4. 依存関係の最適化
|
|
102
|
+
|
|
103
|
+
**軽量化の戦略**:
|
|
104
|
+
|
|
105
|
+
**1. 大きいパッケージの置き換え**:
|
|
106
|
+
- サイズの小さい代替ライブラリに置き換え
|
|
107
|
+
- ネイティブAPI で代替可能か検討
|
|
108
|
+
- 必要な機能のみを提供する最小限のライブラリを選択
|
|
109
|
+
|
|
110
|
+
**2. Tree Shaking の有効化**:
|
|
111
|
+
- ES Modules (ESM) を使用
|
|
112
|
+
- 副作用のないモジュールを明示
|
|
113
|
+
- Dead Code Elimination の設定確認
|
|
114
|
+
|
|
115
|
+
**3. 個別インポートの使用**:
|
|
116
|
+
```javascript
|
|
117
|
+
// 避ける: 全体インポート
|
|
118
|
+
import _ from 'lodash';
|
|
119
|
+
|
|
120
|
+
// 推奨: 個別インポート
|
|
121
|
+
import debounce from 'lodash/debounce';
|
|
122
|
+
// または
|
|
123
|
+
import { debounce } from 'lodash-es';
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
**4. 未使用パッケージの削除**:
|
|
127
|
+
```bash
|
|
128
|
+
# 未使用パッケージの検出
|
|
129
|
+
npx depcheck
|
|
130
|
+
|
|
131
|
+
# 削除
|
|
132
|
+
npm uninstall <unused-package>
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
**5. 重複パッケージの統一**:
|
|
136
|
+
```bash
|
|
137
|
+
# 重複確認
|
|
138
|
+
npm ls <package-name>
|
|
139
|
+
|
|
140
|
+
# package.json で解決(npm 8.3+)
|
|
141
|
+
{
|
|
142
|
+
"overrides": {
|
|
143
|
+
"package-name": "^1.2.3"
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
### 5. コード分割の実装
|
|
149
|
+
|
|
150
|
+
**コード分割の戦略**:
|
|
151
|
+
|
|
152
|
+
**1. ルートベース分割**:
|
|
153
|
+
- ページ/ルートごとにコードを分割
|
|
154
|
+
- 動的インポートを使用
|
|
155
|
+
- 初回ロードに不要なコードを遅延ロード
|
|
156
|
+
|
|
157
|
+
**2. 機能ベース分割**:
|
|
158
|
+
- 重いライブラリを遅延ロード
|
|
159
|
+
- 条件付きで使用される機能を分割
|
|
160
|
+
- ユーザーインタラクション後にロード
|
|
161
|
+
|
|
162
|
+
**3. ベンダー/サードパーティ分割**:
|
|
163
|
+
- アプリケーションコードとライブラリを分離
|
|
164
|
+
- 頻繁に変更されないコードを別チャンクに
|
|
165
|
+
|
|
166
|
+
**動的インポートの例**:
|
|
167
|
+
```javascript
|
|
168
|
+
// 遅延ロード
|
|
169
|
+
const HeavyComponent = lazy(() => import('./HeavyComponent'));
|
|
170
|
+
|
|
171
|
+
// 条件付きロード
|
|
172
|
+
if (userNeedsChart) {
|
|
173
|
+
const ChartLibrary = await import('chart-library');
|
|
174
|
+
ChartLibrary.renderChart(data);
|
|
175
|
+
}
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
### 6. Tree Shaking の最適化
|
|
179
|
+
|
|
180
|
+
**Tree Shaking が機能する条件**:
|
|
181
|
+
|
|
182
|
+
**1. ES Modules を使用**:
|
|
183
|
+
- import/export 構文を使用
|
|
184
|
+
- CommonJS (require) ではなくESMを使用
|
|
185
|
+
|
|
186
|
+
**2. 副作用の明示**:
|
|
187
|
+
```json
|
|
188
|
+
// package.json
|
|
189
|
+
{
|
|
190
|
+
"sideEffects": false
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
// または特定ファイルのみ
|
|
194
|
+
{
|
|
195
|
+
"sideEffects": ["*.css", "*.scss", "polyfills.js"]
|
|
196
|
+
}
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
**3. ビルドツールの設定**:
|
|
200
|
+
- Production モードでビルド
|
|
201
|
+
- Minification を有効化
|
|
202
|
+
- Dead Code Elimination を有効化
|
|
203
|
+
|
|
204
|
+
### 7. アセットの最適化
|
|
205
|
+
|
|
206
|
+
**画像最適化**:
|
|
207
|
+
- 適切な形式を使用(WebP, AVIF)
|
|
208
|
+
- 適切なサイズにリサイズ
|
|
209
|
+
- 遅延ロード(Lazy Loading)
|
|
210
|
+
- CDN の使用
|
|
211
|
+
- スプライトシートまたはアイコンフォント
|
|
212
|
+
|
|
213
|
+
**フォント最適化**:
|
|
214
|
+
- サブセット化(必要な文字のみ)
|
|
215
|
+
- WOFF2 形式を優先
|
|
216
|
+
- font-display: swap を使用
|
|
217
|
+
- preload で重要なフォントを先読み
|
|
218
|
+
|
|
219
|
+
**その他のアセット**:
|
|
220
|
+
- SVG の最適化(SVGO)
|
|
221
|
+
- JSON の圧縮
|
|
222
|
+
- 不要なメタデータの削除
|
|
223
|
+
|
|
224
|
+
### 8. パフォーマンス測定
|
|
225
|
+
|
|
226
|
+
**測定ツール**:
|
|
227
|
+
|
|
228
|
+
**ブラウザ DevTools**:
|
|
229
|
+
- Network タブでリソースサイズ確認
|
|
230
|
+
- Performance タブでロード時間確認
|
|
231
|
+
- Coverage タブで未使用コード確認
|
|
232
|
+
|
|
233
|
+
**Lighthouse**:
|
|
234
|
+
```bash
|
|
235
|
+
npx lighthouse <url> --view
|
|
236
|
+
```
|
|
237
|
+
|
|
238
|
+
**Core Web Vitals の目標値**:
|
|
239
|
+
- **LCP (Largest Contentful Paint)**: < 2.5s
|
|
240
|
+
- **FID (First Input Delay)**: < 100ms
|
|
241
|
+
- **CLS (Cumulative Layout Shift)**: < 0.1
|
|
242
|
+
- **Total Blocking Time**: < 200ms
|
|
243
|
+
|
|
244
|
+
**バンドルサイズ予算の設定**:
|
|
245
|
+
- ビルドツールに size budget を設定
|
|
246
|
+
- CI/CD で自動チェック
|
|
247
|
+
- 閾値を超えた場合はビルドを失敗させる
|
|
248
|
+
|
|
249
|
+
### 9. 最適化結果の検証
|
|
250
|
+
|
|
251
|
+
**再ビルドと比較**:
|
|
252
|
+
```bash
|
|
253
|
+
# 最適化後のビルド
|
|
254
|
+
npm run build
|
|
255
|
+
|
|
256
|
+
# サイズ比較
|
|
257
|
+
# Before: 500KB → After: 200KB (-60%)
|
|
258
|
+
```
|
|
259
|
+
|
|
260
|
+
**検証項目**:
|
|
261
|
+
- [ ] ビルドサイズが削減された
|
|
262
|
+
- [ ] ページロード時間が改善された
|
|
263
|
+
- [ ] Core Web Vitals が改善された
|
|
264
|
+
- [ ] アプリケーションが正常に動作する
|
|
265
|
+
- [ ] エラーが発生していない
|
|
266
|
+
|
|
267
|
+
**削減目標**:
|
|
268
|
+
- **10-20%**: 良好
|
|
269
|
+
- **20-50%**: 優秀
|
|
270
|
+
- **50%+**: 大幅改善
|
|
271
|
+
|
|
272
|
+
### 10. 継続的な監視
|
|
273
|
+
|
|
274
|
+
**モニタリングの設定**:
|
|
275
|
+
- バンドルサイズの推移をトラッキング
|
|
276
|
+
- CI/CD でサイズチェックを自動化
|
|
277
|
+
- パフォーマンス予算を設定
|
|
278
|
+
- 定期的なレビューを実施
|
|
279
|
+
|
|
280
|
+
**自動化の例**:
|
|
281
|
+
```json
|
|
282
|
+
// package.json
|
|
283
|
+
{
|
|
284
|
+
"scripts": {
|
|
285
|
+
"build": "...",
|
|
286
|
+
"analyze": "...",
|
|
287
|
+
"size-check": "bundlesize"
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
```
|
|
291
|
+
|
|
292
|
+
### 11. Git コミット
|
|
293
|
+
|
|
294
|
+
```bash
|
|
295
|
+
git add .
|
|
296
|
+
|
|
297
|
+
git commit -m "perf: optimize build size
|
|
298
|
+
|
|
299
|
+
- Replace heavy library with lightweight alternative (saved 400KB)
|
|
300
|
+
- Implement route-based code splitting
|
|
301
|
+
- Enable tree shaking for utility libraries
|
|
302
|
+
- Remove unused dependencies
|
|
303
|
+
- Optimize images and assets
|
|
304
|
+
- Build size reduced from 500KB to 200KB (-60%)
|
|
305
|
+
|
|
306
|
+
Metrics:
|
|
307
|
+
- LCP: 4.2s → 2.1s
|
|
308
|
+
- FID: 150ms → 80ms
|
|
309
|
+
- Bundle size: 500KB → 200KB
|
|
310
|
+
|
|
311
|
+
🤖 Generated with [Claude Code](https://claude.com/claude-code)
|
|
312
|
+
|
|
313
|
+
Co-Authored-By: Claude <noreply@anthropic.com)"
|
|
314
|
+
```
|
|
315
|
+
|
|
316
|
+
## 完了条件
|
|
317
|
+
|
|
318
|
+
- ビルドサイズが測定されている
|
|
319
|
+
- バンドル分析で問題が特定されている
|
|
320
|
+
- 不要な依存関係が削除されている
|
|
321
|
+
- コード分割が実装されている
|
|
322
|
+
- Tree Shaking が有効化されている
|
|
323
|
+
- 最適化後のビルドが成功している
|
|
324
|
+
- ビルドサイズが削減されている(目標10%以上)
|
|
325
|
+
- パフォーマンス測定で改善が確認されている
|
|
326
|
+
|
|
327
|
+
## エスカレーション
|
|
328
|
+
|
|
329
|
+
- **ビルドサイズが削減できない**:
|
|
330
|
+
- 大きいパッケージの代替案を再検討
|
|
331
|
+
- 未使用コードの徹底的な削除
|
|
332
|
+
- 動的インポートの追加実装
|
|
333
|
+
- アセットの最適化を強化
|
|
334
|
+
|
|
335
|
+
- **コード分割でエラーが発生**:
|
|
336
|
+
- ローディング状態の適切な処理
|
|
337
|
+
- エラーバウンダリの実装
|
|
338
|
+
- チャンクロード失敗時のフォールバック
|
|
339
|
+
|
|
340
|
+
- **Tree Shaking が機能しない**:
|
|
341
|
+
- ES Modules を使用しているか確認
|
|
342
|
+
- package.json の "sideEffects" を設定
|
|
343
|
+
- ビルドツールの設定を確認
|
|
344
|
+
|
|
345
|
+
- **パフォーマンスが改善しない**:
|
|
346
|
+
- ネットワークのボトルネックを確認
|
|
347
|
+
- サーバーサイドのパフォーマンスを確認
|
|
348
|
+
- キャッシュ戦略を見直す
|
|
349
|
+
|
|
350
|
+
## ベストプラクティス
|
|
351
|
+
|
|
352
|
+
- **継続的な監視**: Lighthouse CI で定期的に測定
|
|
353
|
+
- **予算設定**: ビルドサイズの上限を設定
|
|
354
|
+
- **段階的な最適化**: 小さな改善を積み重ねる
|
|
355
|
+
- **プログレッシブエンハンスメント**: 必要な機能から順にロード
|
|
356
|
+
- **CDN 活用**: 静的アセットは CDN から配信
|
|
357
|
+
- **圧縮**: Gzip または Brotli 圧縮を有効化
|
|
358
|
+
- **キャッシュ戦略**: 長期キャッシュを活用
|
|
359
|
+
- **差分ビルド**: 変更されたファイルのみ再ビルド
|
|
360
|
+
- **並列処理**: ビルドプロセスを並列化
|
|
361
|
+
|
|
362
|
+
## 参考: ツール別のパターン
|
|
363
|
+
|
|
364
|
+
**ビルドツール**:
|
|
365
|
+
- Webpack, Rollup, esbuild
|
|
366
|
+
- Vite, Turbopack, Parcel
|
|
367
|
+
- Next.js, Nuxt, SvelteKit (内蔵)
|
|
368
|
+
|
|
369
|
+
**バンドル分析ツール**:
|
|
370
|
+
- webpack-bundle-analyzer
|
|
371
|
+
- rollup-plugin-visualizer
|
|
372
|
+
- source-map-explorer
|
|
373
|
+
- bundle-buddy
|
|
374
|
+
- bundlephobia
|
|
375
|
+
|
|
376
|
+
**パフォーマンス測定**:
|
|
377
|
+
- Lighthouse, PageSpeed Insights
|
|
378
|
+
- Chrome DevTools (Network, Performance, Coverage)
|
|
379
|
+
- WebPageTest
|
|
380
|
+
- Core Web Vitals (CrUX)
|
|
381
|
+
|
|
382
|
+
**最適化ツール**:
|
|
383
|
+
- Terser, UglifyJS (minification)
|
|
384
|
+
- PurgeCSS (未使用CSSの削除)
|
|
385
|
+
- ImageOptim, Squoosh (画像圧縮)
|
|
386
|
+
- SVGO (SVG最適化)
|