ITトラブル解決録-Playwrightが動かなくなった件-

つ~じ~です。最近自分の好きなアーケード音ゲーがかなり活性化してきていて嬉しい今日この頃。30年近く運営してどんどん下火になっていても、諦めなければ再燃できるのだと実感できました。私も諦めずに頑張りたい今日この頃。

さて今回は弊社おなじみ、自動テストの定番Playwrightについて。

Playwrightで「connect ETIMEDOUT ::1:*****」のようなエラー文が出た

※「1:*****」の部分にはその時々のポート番号が入ります。

最近上記のようなエラーが出てPlaywrightが一切使えなくなることがございました。もう詰んだと思いし今日この頃。

解決方法を検索したりAIに質問を投げたりなどあの手この手で解決を試みましたがうまくいかず、どうやらPlaywrightそのものや、動作に必要なNode.js、また憶測ですがセキュリティソフトのESETの過剰検出が原因で処理を止められているのでは?など多くの情報が飛び交いました。

特に多くの情報がやりとりされたのが以下のGithubコミュニティです。

https://github.com/microsoft/playwright/issues/40226

こちらの課題を要約すると以下の通りです。(AIに要約させてみた!近代技術有効活用!)

行われたこと・解決しなかったもの

  • VSCode再起動
    • 一時改善例はあるが再発
    • 根本解決にならず
  • Playwright VSCode Extension 再インストール
    • 改善報告ほぼなし
  • VSCode再インストール
    • 効果なし
    • 環境破損ではない切り分けには有効
  • node_modules 再構築
    • npm install
    • playwright install
    • CLIは正常のまま、Extension問題は継続
  • クリーンプロジェクトで再現確認
    • プロジェクト依存ではないと判明
  • Node.js最新版化/バージョン変更
    • Node依存を疑って実施
      • 一部で解決報告もあり
    • ただし全員が解決するものではなく、根本解決せず
  • 他Extension無効化
    • 一部切り分けにはなった
    • 決定打にはならず
  • IPv6 localhost (::1) 疑い
    • connect ETIMEDOUT ::1:<port>が発生
    • 原因推定止まりで明確解決策なし
  • ESETについて試された・検討された内容
    • ESET のリアルタイム保護停止
    • Node.js / VSCode / Playwright を除外設定へ追加
    • ネットワーク保護機能停止
    • localhost監視系機能の無効化
    • 効果については一部では改善報告あり
      • テスト検出復活
      • Timeout減少
      • VSCode拡張の応答改善
    • ただし全員に再現性ある解決ではない
      • ESETを止めても改善しないケースもある
      • そのため最終的な扱い
      • 「ESETが原因の一つになり得る」
      • 「Windows側セキュリティ製品とExtension通信の相性問題の可能性」
        • ただし単独の根本原因とは断定されていない

一定の効果があった・回避策として使われたもの

  • Playwright VSCode Extension ダウングレード
    • 最も有力な回避策
    • テスト検出復活例あり
    • デバッグ復旧例あり
    • ただし旧版固有バグや機能不足あり
  • VSCode Reload Window
    • 一時的に復旧するケースあり
    • キャッシュ/Extension Host異常には有効
    • 再発あり
  • WSL利用/実パス利用
    • 一部関連Issueで改善報告
    • symlink回避など
    • 本Issueでは主流解決策にはならず
  • ESET(セキュリティソフト)に関する考察も一部で出ている
    • VSCode Extension と localhost 通信を ESET が阻害している可能性を疑う流れ
    • 特に connect ETIMEDOUT ::1:<port>
      • localhost
      • loopback通信
      • Nodeプロセス間通信
        をセキュリティソフトが遮断しているのでは、という推測

全体としての結論

  • Playwright本体CLIは正常動作
  • 問題はVSCode Extension層で発生
  • localhost/IPC通信周辺で問題発生
  • Windows環境+Extension通信周辺が疑われている
    • その通信がセキュリティソフトで阻害されている可能性
  • ETIMEDOUT ::1 から localhost / IPv6 / IPC 周辺も疑いあり
  • 根本解決は未確定
  • 実運用上は
    • Extensionダウングレード
    • Reload Window
    • 環境切り替え
      が対症療法として使われている

結論としては『VSCode拡張とWindows側通信の問題』という側面が大きそうです。

幸い弊社は以下の対応を以て従来通り動くようになりましたが、

  • Node.js、Playwrightを最新版にアップデート
  • Playwright環境のtestsフォルダ、.envファイル、playwright.config.tsファイル、その他各PJ専用ファイルのバックアップを取り、それ以外を削除⇒再インストール

今後も予断を許さない状況です。適宜情報を追いつつ対応を進めて参りたいと思います。

本ブログが読者のトラブルの解決の糸口になれば幸いです。今回はこれにてと思う今日この頃。