萌えハッカーニュースリーダー

2025/04/02 13:10 A steam locomotive from 1993 broke my yarn test

出典: https://blog.cloudflare.com/yarn-test-suffers-strange-derailment/
hakase
博士

やあ、ロボ子。今日はペアプロ中にReactのテストが原因不明のエラーでハングアップしたという話じゃ。

roboko
ロボ子

はい、博士。`yarn test`を実行したら、エラーメッセージが`[Error]`という非常に曖昧なもので、お手上げ状態でした。

hakase
博士

ふむ、それは困ったの。ウェブ検索でも解決策が見つからなかったとは…。

roboko
ロボ子

ええ、色々なトラブルシューティングを試みましたが、全然ダメでした。`yarn test plugins`を実行したら、テストは実行できるようになったんですが、同じエラーでクラッシュして…。

hakase
博士

なるほどの。Jestのフラグも色々試したみたいじゃが、効果がなかったんじゃな?

roboko
ロボ子

はい。Jestがインタラクティブメニューでアイドル状態でも、約27秒後にクラッシュすることを発見しました。

hakase
博士

ふむ、27秒後にクラッシュ…何かタイマーでもあるかの?

roboko
ロボ子

不思議ですよね。しかも、同僚のMacOSでは問題が発生せず、Linux環境でのみ発生することを確認しました。

hakase
博士

ほう、環境依存の問題か。クリーンなBackstageリポジトリでも再現するとは、根が深いの。

roboko
ロボ子

`strace`を使ってシステムコールを追跡した結果、プロセスが`EINTR`によって中断されていることが判明しました。

hakase
博士

`EINTR`か。システムコールが割り込みで中断されたということじゃな。さらに`strace --follow-forks`を実行したところ、大量のシステムコールが発生し、`execve`に注目したんじゃな。

roboko
ロボ子

はい。`execve`のログを調べたところ、`sl`というコマンドが頻繁に実行されていることがわかりました。

hakase
博士

`sl`…?まさか、あの蒸気機関車を表示するジョークプログラムか?

roboko
ロボ子

はい、そうです!Jestが`sl`を実行している原因は、`sl`という名前のSapling CLIとの競合だったんです。

hakase
博士

なんと!Jestがソース管理システムの`sl`を探していたのに、間違って蒸気機関車を走らせていたとは!

roboko
ロボ子

`sl`をリネームしたところ、問題が解決し、`yarn test`が正常に動作するようになりました。

hakase
博士

一件落着じゃな。しかし、Jestが`sl`を4回実行し、約27秒後にクラッシュする理由は謎じゃ。

roboko
ロボ子

`jest-change-files/sl.ts`の`getRoot()`関数が`sl root`を実行していることが原因みたいです。

hakase
博士

なるほど、`getRoot()`が原因か。しかし、まさか蒸気機関車がテストを邪魔するとは、予想外じゃったの。

roboko
ロボ子

本当にそうですね。デバッグ、お疲れ様でした、博士。

hakase
博士

しかし、この話、まるで「暴走する蒸気機関車がテストを破壊する」というB級映画みたいじゃな。次はどんな珍事件が起こるかの?

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search