debug> を待ってもダメだった — Node.jsのflaky testから学ぶ非同期処理の同期点
LTトラックCJapanese
Node.jsのDebuggerには、特定のCI環境でだけ断続的に失敗するflaky testがありました。
一見すると、debug> のような特定の出力を待てばDebuggerの準備完了を判断できそうです。しかし実際には、プロンプトの表示、Debuggerへの再接続、Debugger.pausedイベントなど複数の非同期処理が並行して進んでおり、「画面に何かが表示されたこと」と「内部状態が期待する状態になったこと」は必ずしも一致しません。
このLTでは、Node.js coreへのコントリビューションとしてDebuggerのflaky testを追いかけた経験を題材に、
- なぜテストがたまにしか失敗しなかったのか
- なぜ「この文字列が出るまで待つ」だけでは不十分だったのか
- どのようにrace conditionを調査し、より適切な同期点を探したのか
を実際のNode.js Debuggerの挙動とともに紹介します。
Node.js内部の知識がなくても、非同期処理を含むテストで「何を待つべきか」を考えるヒントを持ち帰れる内容を目指します。
関連するNode.js coreでのIssue / PR: https://github.com/nodejs/node/issues/61762 https://github.com/nodejs/node/pull/62807 https://github.com/nodejs/node/pull/65424

Yuya Inoue
Webエンジニア。2026年からNode.js coreへのコントリビューションに取り組んでいます。