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.
Files changed (61) hide show
  1. package/.windsurf/templates/documentation-rules.md +143 -0
  2. package/.windsurf/templates/project/01-requirements/01-system-overview.md +49 -0
  3. package/.windsurf/templates/project/01-requirements/02-features-implemented.md +73 -0
  4. package/.windsurf/templates/project/01-requirements/03-features-planned.md +75 -0
  5. package/.windsurf/templates/project/01-requirements/04-non-functional-requirements.md +115 -0
  6. package/.windsurf/templates/project/01-requirements/05-user-stories.md +124 -0
  7. package/.windsurf/templates/project/02-behavior/01-scenarios.md +406 -0
  8. package/.windsurf/templates/project/03-domain/01-domain-model.md +338 -0
  9. package/.windsurf/templates/project/03-domain/02-ubiquitous-language.md +153 -0
  10. package/.windsurf/templates/project/04-design/01-tech-stack.md +360 -0
  11. package/.windsurf/templates/project/04-design/02-repository-structure.md +390 -0
  12. package/.windsurf/templates/project/04-design/03-screen-design.md +586 -0
  13. package/.windsurf/templates/project/04-design/04-data-model.md +211 -0
  14. package/.windsurf/templates/project/04-design/05-api-spec.md +221 -0
  15. package/.windsurf/templates/project/04-design/06-architecture.md +183 -0
  16. package/.windsurf/templates/project/04-design/07-infrastructure.md +180 -0
  17. package/.windsurf/templates/tasks/task-template/a-definition.md +143 -0
  18. package/.windsurf/templates/tasks/task-template/b-research.md +185 -0
  19. package/.windsurf/templates/tasks/task-template/c-implementation.md +197 -0
  20. package/.windsurf/workflows/a-001-SetupDocStructure.md +165 -0
  21. package/.windsurf/workflows/a-002-InitializeProject.md +229 -0
  22. package/.windsurf/workflows/a-003-CreateScenarios.md +130 -0
  23. package/.windsurf/workflows/a-004-DefineDomainModel.md +133 -0
  24. package/.windsurf/workflows/a-005-CreateDomainDiagram.md +114 -0
  25. package/.windsurf/workflows/a-006-ReviewRequirementsDomain.md +132 -0
  26. package/.windsurf/workflows/a-007-DefineTechStack.md +121 -0
  27. package/.windsurf/workflows/a-008-DefineRepositoryStructure.md +118 -0
  28. package/.windsurf/workflows/a-009-DefineScreenDesign.md +121 -0
  29. package/.windsurf/workflows/a-010-DefineDataModel.md +125 -0
  30. package/.windsurf/workflows/a-011-DefineAPISpec.md +123 -0
  31. package/.windsurf/workflows/a-012-DefineArchitecture.md +119 -0
  32. package/.windsurf/workflows/a-013-DefineInfrastructure.md +120 -0
  33. package/.windsurf/workflows/a-014-ReviewDesign.md +122 -0
  34. package/.windsurf/workflows/b-001-CreateTaskDirectory.md +71 -0
  35. package/.windsurf/workflows/b-002-CreateTaskDefinition.md +165 -0
  36. package/.windsurf/workflows/b-003-CreateTaskResearch.md +412 -0
  37. package/.windsurf/workflows/b-004-CreateTaskImplementation.md +97 -0
  38. package/.windsurf/workflows/b-005-ReviewTask.md +312 -0
  39. package/.windsurf/workflows/c-001-ImplementTask.md +493 -0
  40. package/.windsurf/workflows/c-002-UpdateDocumentation.md +797 -0
  41. package/.windsurf/workflows/x-Accessibility-Check.md +469 -0
  42. package/.windsurf/workflows/x-Bundle-Optimize.md +386 -0
  43. package/.windsurf/workflows/x-CI-FixFailure.md +636 -0
  44. package/.windsurf/workflows/x-CI-Setup.md +641 -0
  45. package/.windsurf/workflows/x-Code-Refactor.md +71 -0
  46. package/.windsurf/workflows/x-Code-ResearchAndReview.md +78 -0
  47. package/.windsurf/workflows/x-Component-Create.md +359 -0
  48. package/.windsurf/workflows/x-Context-CatchUp.md +63 -0
  49. package/.windsurf/workflows/x-Database-Seed.md +300 -0
  50. package/.windsurf/workflows/x-Dependencies-Update.md +315 -0
  51. package/.windsurf/workflows/x-DevEnvironment-Setup.md +437 -0
  52. package/.windsurf/workflows/x-Logging-Add.md +682 -0
  53. package/.windsurf/workflows/x-Migration-Create.md +354 -0
  54. package/.windsurf/workflows/x-Problem-RootCauseAnalysis.md +65 -0
  55. package/.windsurf/workflows/x-Repository-Push.md +375 -0
  56. package/.windsurf/workflows/x-Repository-PushToGithub.md +72 -0
  57. package/.windsurf/workflows/x-Requirements-Clarify.md +61 -0
  58. package/.windsurf/workflows/z-CreateWorkflow.md +77 -0
  59. package/README.md +280 -0
  60. package/bin/cli.js +74 -0
  61. package/package.json +28 -0
@@ -0,0 +1,636 @@
1
+ ---
2
+ description: CI/CDパイプラインの失敗をデバッグし、根本原因を特定して修正するワークフロー
3
+ auto_execution_mode: 1
4
+ ---
5
+
6
+ # CI-FixFailure (x-CI-FixFailure)
7
+
8
+ ## 目的
9
+
10
+ - CI/CD パイプラインの失敗を迅速にデバッグし、原因を特定する。
11
+ - ローカル環境で CI の失敗を再現し、修正する。
12
+ - 再発防止策を実施し、CI の安定性を向上させる。
13
+ - チームに失敗の原因と修正内容を共有する。
14
+
15
+ ## 前提
16
+
17
+ - CI/CD パイプラインが設定されている(GitHub Actions, GitLab CI, など)。
18
+ - CI ログにアクセスできる。
19
+ - ローカル開発環境が整備されている。
20
+ - Git リポジトリが初期化されている。
21
+
22
+ ## 手順
23
+
24
+ ### 1. CI 失敗の確認
25
+
26
+ CI の失敗は通常、以下の方法で通知されます:
27
+ - **GitHub / GitLab の Pull Request ページ**: 赤い × マークが表示される
28
+ - **メール通知**: GitHub/GitLab から自動送信される
29
+ - **チャット通知**: Slack / Discord / Teams に通知される
30
+ - **CI/CD ダッシュボード**: Actions / Pipelines ページで確認
31
+
32
+ **GitHub Actions での確認方法**:
33
+ 1. GitHub リポジトリ → Actions タブ
34
+ 2. 失敗したワークフローをクリック
35
+ 3. 失敗したジョブをクリック
36
+
37
+ **GitLab CI の確認**:
38
+ 1. GitLab プロジェクト → CI/CD → Pipelines
39
+ 2. 失敗したパイプラインをクリック
40
+ 3. 失敗したジョブをクリック
41
+
42
+ ### 2. エラーログの分析
43
+
44
+ 失敗したステップとエラーメッセージを特定します。
45
+
46
+ **一般的な失敗ステップ**:
47
+ - **依存関係のインストール**: `npm install`, `pip install`, `bundle install`
48
+ - **リント**: ESLint, Prettier, Black, RuboCop
49
+ - **型チェック**: TypeScript, mypy, sorbet
50
+ - **ユニットテスト**: Jest, pytest, RSpec
51
+ - **E2E テスト**: Playwright, Cypress
52
+ - **ビルド**: `npm run build`, `cargo build`, `go build`
53
+ - **デプロイ**: Vercel, AWS, Heroku
54
+
55
+ **ログでのエラーメッセージの探し方**:
56
+ ```bash
57
+ # 🔍 探すべきキーワード:
58
+ # ERROR, FAILED, ✗, ❌, Exit code 1, Exception
59
+
60
+ # 例:
61
+ # ✗ 3 tests failed
62
+ # ERROR: Command failed with exit code 1
63
+ # npm ERR! code ELIFECYCLE
64
+ # AssertionError: expected 3 to equal 4
65
+ ```
66
+
67
+ エラーメッセージをコピーして、原因の分析に進みます。
68
+
69
+ ### 3. よくある失敗パターンと修正方法
70
+
71
+ #### 3.1. 依存関係のインストール失敗
72
+
73
+ **エラー例**:
74
+ ```
75
+ npm ERR! code ENOENT
76
+ npm ERR! syscall open
77
+ npm ERR! path /home/runner/work/myapp/myapp/package.json
78
+ npm ERR! errno -2
79
+ ```
80
+
81
+ **原因**:
82
+ - `package.json` が存在しない
83
+ - ディレクトリ構造が間違っている
84
+ - Git で追跡されていない
85
+
86
+ **修正方法**:
87
+ ```bash
88
+ # package.json が存在するか確認
89
+ ls -la package.json
90
+
91
+ # Git で追跡されているか確認
92
+ git ls-files package.json
93
+
94
+ # 追跡されていない場合は追加
95
+ git add package.json
96
+ git commit -m "fix: add package.json to git"
97
+ ```
98
+
99
+ **CI ワークフローの修正**:
100
+ ```yaml
101
+ - name: Install dependencies
102
+ working-directory: ./path/to/project # ディレクトリ指定
103
+ run: npm ci
104
+ ```
105
+
106
+ #### 3.2. 依存関係のバージョン競合
107
+
108
+ **エラー例**:
109
+ ```
110
+ npm ERR! Could not resolve dependency:
111
+ npm ERR! peer react@"^18.0.0" from react-dom@18.2.0
112
+ ```
113
+
114
+ **原因**:
115
+ - 依存関係のバージョンが競合している
116
+ - `package-lock.json` が古い
117
+
118
+ **修正方法**:
119
+ ```bash
120
+ # package-lock.json を削除して再生成
121
+ rm package-lock.json
122
+ npm install
123
+
124
+ # または特定のバージョンを指定
125
+ npm install react@18.2.0 react-dom@18.2.0
126
+
127
+ # Git にコミット
128
+ git add package.json package-lock.json
129
+ git commit -m "fix: resolve dependency conflicts"
130
+ ```
131
+
132
+ #### 3.3. テストの失敗
133
+
134
+ **エラー例**:
135
+ ```
136
+ FAIL src/utils/math.test.ts
137
+ ✕ adds 1 + 2 to equal 3 (5 ms)
138
+
139
+ ● adds 1 + 2 to equal 3
140
+
141
+ expect(received).toBe(expected) // Object.is equality
142
+
143
+ Expected: 3
144
+ Received: 4
145
+ ```
146
+
147
+ **原因**:
148
+ - テストコードのバグ
149
+ - 実装コードのバグ
150
+ - テストデータの不整合
151
+
152
+ **修正方法**:
153
+ ```bash
154
+ # ローカルでテストを実行
155
+ npm test
156
+
157
+ # 特定のテストファイルのみ実行
158
+ npm test -- src/utils/math.test.ts
159
+
160
+ # デバッグモードで実行
161
+ node --inspect-brk node_modules/.bin/jest --runInBand
162
+
163
+ # 修正後、再度テスト
164
+ npm test
165
+ ```
166
+
167
+ **テストコードの修正例**:
168
+ ```typescript
169
+ // Before
170
+ expect(add(1, 2)).toBe(4); // ❌ 間違い
171
+
172
+ // After
173
+ expect(add(1, 2)).toBe(3); // ✅ 正しい
174
+ ```
175
+
176
+ #### 3.4. リントエラー
177
+
178
+ **エラー例**:
179
+ ```
180
+ /home/runner/work/myapp/myapp/src/index.ts
181
+ 1:1 error 'React' is defined but never used @typescript-eslint/no-unused-vars
182
+ 5:3 error Missing trailing comma comma-dangle
183
+ ```
184
+
185
+ **原因**:
186
+ - コードがリントルールに違反している
187
+ - ESLint / Prettier の設定不足
188
+
189
+ **修正方法**:
190
+ ```bash
191
+ # ローカルでリントを実行
192
+ npm run lint
193
+
194
+ # 自動修正
195
+ npm run lint -- --fix
196
+
197
+ # Git にコミット
198
+ git add .
199
+ git commit -m "fix: resolve lint errors"
200
+ ```
201
+
202
+ **ESLint 設定の調整**:
203
+ ```json
204
+ // .eslintrc.json
205
+ {
206
+ "rules": {
207
+ "@typescript-eslint/no-unused-vars": "warn", // error → warn に緩和
208
+ "comma-dangle": ["error", "always-multiline"]
209
+ }
210
+ }
211
+ ```
212
+
213
+ #### 3.5. ビルドエラー
214
+
215
+ **エラー例**:
216
+ ```
217
+ ERROR in ./src/index.tsx
218
+ Module not found: Error: Can't resolve './App' in '/home/runner/work/myapp/myapp/src'
219
+ ```
220
+
221
+ **原因**:
222
+ - インポートパスが間違っている
223
+ - ファイルが存在しない
224
+ - 大文字小文字の不一致(Windows ↔ Linux)
225
+
226
+ **修正方法**:
227
+ ```typescript
228
+ // Before
229
+ import App from './app'; // ❌ Linux では大文字小文字を区別
230
+
231
+ // After
232
+ import App from './App'; // ✅ 正しいファイル名
233
+ ```
234
+
235
+ #### 3.6. 環境変数の不足
236
+
237
+ **エラー例**:
238
+ ```
239
+ Error: Environment variable NEXT_PUBLIC_API_URL is not defined
240
+ ```
241
+
242
+ **原因**:
243
+ - CI 環境で環境変数が設定されていない
244
+ - `.env` ファイルが Git にコミットされていない(正しい挙動)
245
+
246
+ **修正方法(GitHub Actions)**:
247
+ ```yaml
248
+ - name: Build project
249
+ env:
250
+ NEXT_PUBLIC_API_URL: https://api.example.com
251
+ DATABASE_URL: ${{ secrets.DATABASE_URL }}
252
+ run: npm run build
253
+ ```
254
+
255
+ **または GitHub Secrets に追加**:
256
+ 1. Settings → Secrets and variables → Actions
257
+ 2. "New repository secret" をクリック
258
+ 3. `DATABASE_URL` を追加
259
+
260
+ #### 3.7. タイムアウトエラー
261
+
262
+ **エラー例**:
263
+ ```
264
+ Error: Timeout - Async callback was not invoked within the 5000ms timeout specified by jest.setTimeout
265
+ ```
266
+
267
+ **原因**:
268
+ - テストの実行時間が長すぎる
269
+ - 非同期処理が完了していない
270
+
271
+ **修正方法**:
272
+ ```typescript
273
+ // テストファイルでタイムアウトを延長
274
+ jest.setTimeout(30000); // 30 秒
275
+
276
+ // または特定のテストで延長
277
+ it('should fetch data', async () => {
278
+ // ...
279
+ }, 30000); // 30 秒
280
+ ```
281
+
282
+ **CI ワークフローでタイムアウトを延長**:
283
+ ```yaml
284
+ - name: Run tests
285
+ run: npm test
286
+ timeout-minutes: 10 # デフォルト: 360 分
287
+ ```
288
+
289
+ #### 3.8. メモリ不足エラー
290
+
291
+ **エラー例**:
292
+ ```
293
+ FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory
294
+ ```
295
+
296
+ **原因**:
297
+ - Node.js のヒープメモリが不足している
298
+ - 大量のデータを処理している
299
+
300
+ **修正方法**:
301
+ ```yaml
302
+ - name: Build project
303
+ run: NODE_OPTIONS="--max-old-space-size=4096" npm run build # 4GB に拡張
304
+ ```
305
+
306
+ **package.json のスクリプト修正**:
307
+ ```json
308
+ {
309
+ "scripts": {
310
+ "build": "NODE_OPTIONS='--max-old-space-size=4096' next build"
311
+ }
312
+ }
313
+ ```
314
+
315
+ #### 3.9. キャッシュの問題
316
+
317
+ **エラー例**:
318
+ ```
319
+ Error: Cannot find module 'express'
320
+ ```
321
+
322
+ **原因**:
323
+ - キャッシュが古くなっている
324
+ - 依存関係が正しくインストールされていない
325
+
326
+ **修正方法(GitHub Actions)**:
327
+ ```yaml
328
+ - name: Clear cache
329
+ run: npm cache clean --force
330
+
331
+ - name: Install dependencies
332
+ run: npm ci
333
+ ```
334
+
335
+ **または CI でキャッシュを無効化**:
336
+ ```yaml
337
+ - name: Setup Node.js
338
+ uses: actions/setup-node@v4
339
+ with:
340
+ node-version: '20'
341
+ # cache: 'npm' # キャッシュを無効化
342
+ ```
343
+
344
+ #### 3.10. 並行実行の競合
345
+
346
+ **エラー例**:
347
+ ```
348
+ Error: Port 3000 is already in use
349
+ ```
350
+
351
+ **原因**:
352
+ - 複数のジョブが同じポートを使用している
353
+ - 前のジョブが終了していない
354
+
355
+ **修正方法**:
356
+ ```yaml
357
+ - name: Start development server
358
+ run: npm start &
359
+ env:
360
+ PORT: ${{ job.container.id }} # 一意のポート番号
361
+ ```
362
+
363
+ **または順次実行**:
364
+ ```yaml
365
+ jobs:
366
+ test:
367
+ runs-on: ubuntu-latest
368
+ # strategy を削除して並列実行を無効化
369
+ ```
370
+
371
+ ### 4. ローカル環境での再現
372
+
373
+ CI の失敗をローカル環境で再現することで、デバッグが容易になります。
374
+
375
+ **CI 環境を模倣した実行**:
376
+ ```bash
377
+ # クリーンな環境で実行
378
+ rm -rf node_modules package-lock.json
379
+ npm install
380
+
381
+ # CI と同じコマンドを実行
382
+ npm run lint
383
+ npm test
384
+ npm run build
385
+ ```
386
+
387
+ **Docker で CI 環境を再現**:
388
+ ```bash
389
+ # CI と同じ Node バージョンを使用
390
+ docker run -it --rm -v $(pwd):/app -w /app node:20 bash
391
+
392
+ # コンテナ内で実行
393
+ npm ci
394
+ npm test
395
+ ```
396
+
397
+ ### 5. 修正の実装
398
+
399
+ 原因が特定できたら、修正を実装します。
400
+
401
+ **修正と検証の手順**:
402
+ 1. コードを修正
403
+ 2. ローカルでテストを実行して動作確認
404
+ ```bash
405
+ npm run lint
406
+ npm test
407
+ npm run build
408
+ ```
409
+ 3. すべてのテストが通ることを確認
410
+ 4. Git にコミット
411
+ ```bash
412
+ git add .
413
+ git commit -m "fix: resolve CI test failures
414
+
415
+ - Fix import path for App component
416
+ - Add missing environment variables
417
+ - Increase test timeout to 30 seconds"
418
+
419
+ git push origin feature/fix-ci
420
+ ```
421
+
422
+ ### 6. CI の再実行と結果確認
423
+
424
+ 修正をプッシュすると CI が自動的に再実行されます。手動で再実行することも可能です。
425
+
426
+ **GitHub Actions の手動再実行**:
427
+ 1. Actions タブで失敗したワークフローを開く
428
+ 2. "Re-run jobs" → "Re-run all jobs" をクリック
429
+
430
+ **GitLab CI の手動再実行**:
431
+ 1. パイプラインページで "Retry" をクリック
432
+
433
+ **結果の確認**:
434
+ - すべてのジョブが緑色のチェックマーク ✅ になることを確認
435
+ - 失敗が続く場合は、ログを再度確認して追加の修正を実施
436
+
437
+ ### 7. 根本原因の分析
438
+
439
+ 修正が完了したら、なぜ問題が発生したのか根本原因を分析します。
440
+
441
+ **一般的な根本原因**:
442
+ - **コードのバグ**: ロジックエラー、タイポ、誤った実装
443
+ - **環境設定の不足**: 環境変数、シークレット、設定ファイルの不足
444
+ - **依存関係の問題**: バージョン競合、欠落したパッケージ
445
+ - **CI 設定の誤り**: ワークフローファイルの誤設定、パスの間違い
446
+ - **環境差異**: ローカル(Windows/Mac)と CI(Linux)の違い
447
+ - **フレーク(不安定なテスト)**: タイミング依存、非決定的な動作
448
+
449
+ ### 8. 再発防止策の実施
450
+
451
+ 同じ問題が再発しないよう、適切な対策を講じます。
452
+
453
+ **推奨される対策**:
454
+
455
+ #### 8.1. Pre-commit フックの追加
456
+
457
+ **husky + lint-staged のインストール**:
458
+ ```bash
459
+ npm install --save-dev husky lint-staged
460
+ npx husky init
461
+ ```
462
+
463
+ **.husky/pre-commit**:
464
+ ```bash
465
+ #!/bin/sh
466
+ npx lint-staged
467
+ ```
468
+
469
+ **package.json**:
470
+ ```json
471
+ {
472
+ "lint-staged": {
473
+ "*.{js,jsx,ts,tsx}": [
474
+ "eslint --fix",
475
+ "prettier --write"
476
+ ]
477
+ }
478
+ }
479
+ ```
480
+
481
+ #### 8.2. CI ステータスチェック必須化
482
+
483
+ **GitHub**:
484
+ 1. Settings → Branches → Branch protection rules
485
+ 2. "Require status checks to pass before merging" をチェック
486
+ 3. 必須にしたいチェック(lint, test, build)を選択
487
+
488
+ #### 8.3. フレークテストの修正
489
+
490
+ **Retry 機能の追加**:
491
+ ```typescript
492
+ // Jest
493
+ jest.retryTimes(3);
494
+
495
+ // Playwright
496
+ test('flaky test', async ({ page }) => {
497
+ // ...
498
+ }, { retries: 3 });
499
+ ```
500
+
501
+ **Wait を適切に使用**:
502
+ ```typescript
503
+ // Bad: 固定時間待機
504
+ await new Promise(resolve => setTimeout(resolve, 1000));
505
+
506
+ // Good: 要素が表示されるまで待機
507
+ await page.waitForSelector('.loading', { state: 'hidden' });
508
+ ```
509
+
510
+ #### 8.4. ドキュメントの更新
511
+
512
+ **README.md に CI トラブルシューティングセクションを追加**:
513
+ ```markdown
514
+ ## CI Troubleshooting
515
+
516
+ ### Common Issues
517
+
518
+ #### 1. Test Timeout
519
+ If you encounter timeout errors, increase the timeout:
520
+ \`\`\`typescript
521
+ jest.setTimeout(30000);
522
+ \`\`\`
523
+
524
+ #### 2. Port Already in Use
525
+ Kill existing processes:
526
+ \`\`\`bash
527
+ lsof -ti:3000 | xargs kill -9
528
+ \`\`\`
529
+ ```
530
+
531
+ ### 9. チームへの共有
532
+
533
+ 失敗の原因と修正内容をチームに共有することで、他のメンバーが同じ問題を回避できます。
534
+
535
+ **Pull Request コメントでの共有例**:
536
+ ```markdown
537
+ ## CI Failure Fix
538
+
539
+ ### Issue
540
+ CI was failing due to missing environment variable `DATABASE_URL`.
541
+
542
+ ### Root Cause
543
+ The environment variable was not set in GitHub Actions secrets.
544
+
545
+ ### Fix
546
+ - Added `DATABASE_URL` to GitHub Secrets
547
+ - Updated `.github/workflows/ci.yml` to use the secret
548
+
549
+ ### Prevention
550
+ - Document required environment variables in README
551
+ - Add validation script to check for missing env vars
552
+ ```
553
+
554
+ ### 10. Git コミット
555
+
556
+ ```bash
557
+ git add .
558
+ git commit -m "fix: resolve CI failures and add prevention measures
559
+
560
+ - Fix test timeout issues by increasing timeout to 30s
561
+ - Add missing DATABASE_URL environment variable
562
+ - Fix import path case sensitivity for Linux
563
+ - Add pre-commit hooks with husky and lint-staged
564
+ - Document CI troubleshooting in README
565
+
566
+ Root cause: Environment variable was not set in CI
567
+ Prevention: Added environment variable validation script
568
+
569
+ 🤖 Generated with [Claude Code](https://claude.com/claude-code)
570
+
571
+ Co-Authored-By: Claude <noreply@anthropic.com>"
572
+ ```
573
+
574
+ ## 完了条件
575
+
576
+ - CI の失敗原因が特定されている
577
+ - ローカル環境で失敗が再現されている
578
+ - 修正が実装され、ローカルでテストが通る
579
+ - CI が成功する
580
+ - 根本原因が分析されている
581
+ - 再発防止策が実施されている
582
+ - チームに失敗の原因と修正内容が共有されている
583
+ - ドキュメントが更新されている(必要に応じて)
584
+
585
+ ## エスカレーション
586
+
587
+ - **エラーログが不明瞭**:
588
+ - 「エラーメッセージが不明瞭です。以下を試してください:」
589
+ - CI のログレベルを DEBUG に変更
590
+ - ローカルで同じコマンドを実行
591
+ - スタックトレースを確認
592
+ - 関連する issue や Stack Overflow を検索
593
+
594
+ - **ローカルでは成功するが CI で失敗する**:
595
+ - 「環境差異の可能性があります。以下を確認してください:」
596
+ - Node バージョンの違い
597
+ - OS の違い(Windows ↔ Linux)
598
+ - 環境変数の違い
599
+ - タイムゾーンの違い
600
+ - ファイルシステムの違い(大文字小文字)
601
+
602
+ - **フレークテスト(不安定なテスト)**:
603
+ - 「テストが不安定です。以下を検討してください:」
604
+ - Retry 機能の追加
605
+ - Wait を適切に使用
606
+ - テストの独立性を確保(共有状態を削除)
607
+ - テスト実行順序の固定
608
+ - タイムアウトの延長
609
+
610
+ - **CI が非常に遅い**:
611
+ - 「CI の実行時間が長すぎます。以下を検討してください:」
612
+ - キャッシュの有効化
613
+ - 並列実行の活用
614
+ - 不要なステップの削除
615
+ - テストの最適化
616
+ - セルフホストランナーの使用
617
+
618
+ - **複数の問題が同時発生**:
619
+ - 「複数の問題が同時に発生しています。以下を実施してください:」
620
+ - 一つずつ修正して確認
621
+ - Git bisect で問題が発生したコミットを特定
622
+ - main ブランチに戻して動作確認
623
+ - 変更を段階的に適用
624
+
625
+ ## ベストプラクティス
626
+
627
+ - **早期発見**: Pre-commit フックで事前にチェック
628
+ - **詳細なログ**: エラー発生時は詳細なログを出力
629
+ - **環境の統一**: Docker で CI 環境を再現
630
+ - **フレークテスト対策**: Retry 機能と適切な Wait
631
+ - **ドキュメント化**: よくある問題と解決策を README に記載
632
+ - **モニタリング**: CI の成功率と実行時間を監視
633
+ - **定期的なメンテナンス**: 依存関係の更新、キャッシュのクリア
634
+ - **チームへの共有**: 失敗の原因と修正内容を共有
635
+ - **再発防止**: 根本原因を分析し、対策を実施
636
+ - **ステータスチェック必須化**: PR マージ前に CI 成功を必須に