Skip to content
frontmatter
キー値
specdojo.idprj-0001:pjr-w2eb-npm-test-load-timeout
specdojo.typeproject
specdojo.statusready
specdojo.rulebookspecdojo:pjr-rulebook
specdojo.part_ofprj-0001:pjr-index
specdojo.item_typeissue
specdojo.item_statusdone
specdojo.priorityhigh
specdojo.ownerDEV
specdojo.registered_at2026-10-10T22:39:00Z
specdojo.completed_at2026-10-13T14:01:12Z
specdojo.conclusionvitest を unit と integration の project に分けて maxWorkers を 2 に抑え、統合テストの timeout を 30 秒にした。統合後の npm test は 2228 件が通った

PJR-W2EB npm test の一括実行で負荷によりテストがタイムアウトする ​

1. 課題内容 ​

npm test(vitest run)は単体と統合をまとめて既定の並列数で流すため、毎回別のテストが 1〜2 件タイムアウトで失敗する(10/11 に 2 回、exec-pipeline-e2e・exec-worktree-ops・doc-index)。test:unit と test:integration を分けて流すと全件通過する。npm run check が公開判定の基準 2 を満たせない。

2. 影響範囲 ​

観点影響
スコープcommit 前の hook(lefthook の test)と、npm test を使う全件の検証
スケジュールv0.3.0 の公開前に直す(2026-10-13、利用者の判断)
コストexec の統合の commit や手動の commit が時間切れで失敗し、再実行や orchestrator による統合の手間が生じる。2026-10-12 には PJR-XY4C の統合が 3 回続けて失敗した
品質中身の誤りではない失敗が混ざり、検証の信頼性が下がる
関係者exec と routine を使う利用者、orchestrator、本リポジトリの開発者

3. 対応方針 ​

項目内容
原因commit 前の hook は npm test(vitest run)を実行し、vitest.config.ts を使う。この設定は maxWorkers を持たないため、単体と統合の約 2226 件を CPU の数(16)に近い並列で流し、Docker Desktop の共有フォルダ(virtiofs)の上で負荷が急に上がる。さらに統合テストの時間の上限が既定の 5 秒になり、vitest.integration.config.ts の 30 秒と食い違う。親検証は vitest.unit.config.ts(maxWorkers: 2)と vitest.integration.config.ts(testTimeout: 30000)で別々に流すため通り、hook だけが落ちる
対応策vitest.config.ts を親検証の 2 つの設定に揃える。(1) maxWorkers を 2 に固定する。(2) 統合テスト(*.integration.test.ts)の testTimeout を 30 秒にし、単体テストは既定のままにする(vitest の projects などでファイルの種類ごとに指定する)。setup・env・include は既存の設定を保つ
依存事項なし
完了条件npm test が単体と統合の両方を、maxWorkers 2 と、統合テストの 30 秒の上限で実行することを確認する(設定の内容と、実行時の表示または単体テストで確かめる)。npm test が全件通る。test:unit と test:integration の挙動は変わらない。lefthook の test の段は変えない

4. 対応結果 ​

  • vitest.config.ts の一括実行を unit / integration の 2 project 構成にし、それぞれ既存の vitest.unit.config.ts と vitest.integration.config.ts を継承するようにした。両 project の maxWorkers は 2 に固定し、integration project は既存設定の testTimeout: 30000 を継承する。 setup・環境変数・対象ファイルの条件も各既存設定から引き継ぐため、test:unit と test:integration の設定は変更していない。
  • 設定の project 構成、worker 上限、統合テストの 30 秒上限を検証する単体テストを追加した。
  • npm test で unit / integration の両 project が起動することを確認した。この executor の sandbox では、統合テストが利用する Git fixture 操作と tsx の IPC socket 作成が EPERM で 拒否され、子プロセス待ちのまま完走しなかったため中断した。分割した単体・統合テストは親 runner の検証対象であり、全件の結果は runner の evidence で確認する。sandbox 外での npm test の 完走確認を申し送る。
  • 統合後の 2026-10-13、orchestrator が本体の作業場所で npm test を実行し、146 ファイル・2228 件が 2 分 10 秒で通ることを確認した。
  • CHANGELOG の記載を既知の問題から不具合修正へ移した。

5. 関連ドキュメント ​