WSL2

WSL の playwright-cli からホスト Windows の Chrome にアタッチする

TL;DR — WSL2 ミラーモードなら --cdp=chrome チャンネル名は使えないが、Chrome を --remote-debugging-port=9222 で起動して --cdp=http://localhost:9222 を使えばアタッチできる。Firewall ルールも不要。なお、--remote-debugging-address は非 headless Chrome では無視され、Chrome は常に 127.0.0.1 にバインドする。localhost で繋がるのはミラーモードが 127.0.0.1 を通してくれるおかげ。

どっかで聞いたところによると…

playwright-cli(@playwright/cli)には、起動済みの Chrome にアタッチしてそのセッションをそのまま操作できる機能があり、SAML/SSO 認証済みのページを操作したいときにサンドボックスの Chrome にログインし直す手間が省ける、とのことです。

確かに便利そうなんだけど、この機能を WSL2 から使おうとしてハマったので記録しておきます。

ほんと大体ハマってんな俺。

やりたいこと

WSL 上の playwright-cli から、ホスト Windows で開いている Chrome(ログイン済み)にアタッチして操作する。

前提

  • WSL2 ネットワークモード:ミラーモード(networkingMode=mirrored
  • playwright-cli:0.1.9mise use --global npm:@playwright/cli@latest でインストール)
    • 前回自宅でハマったので職場では間違えなかった

チャンネル名(--cdp=chrome)は WSL から使えない

そもそもこれが駄目だった。

以下は Claude さんの解説です。

playwright-cli には microsoft/playwright#40177(2026年4月マージ)で、チャンネル名でアタッチできる機能が追加された。

playwright-cli attach --cdp=chrome

これは DevToolsActivePort ファイルを読んでポートを自動解決する仕組みなのだが、WSL では動かない。

原因は process.platform。WSL 上では linux になるため、スクリプトは ~/.config/google-chrome/DevToolsActivePort(Linux のパス)を探しに行く。ホスト Windows の Chrome が書き込むのは %LOCALAPPDATA%\Google\Chrome\User Data\DevToolsActivePort なので、当然見つからない。

WSL + VSCode Copilot Chat で RTK インストールしたら動かなかった話

TL;DR — RTK のフックが vscode の Copilot Chat では動かない(2つの理由がある)。フックをやめてグローバルインストラクションに .github/copilot-instructions.md の内容を転記すれば Copilot が自発的に rtk プレフィックスを使うようになった。

職場の WSL 環境に RTK をインストールして VSCode Copilot Chat と組み合わせようとしたら、フックが全然動かなかった。調査した結果と、現状の対策を書いておく。

RTK とは

RTK(Rust Token Killer) は CLI プロキシで、コマンド出力を 60〜90% 圧縮して AI エージェントのトークン消費を削減するツール。git status の代わりに rtk git status を使うと、AI に渡る出力がコンパクトになる。

前の記事でも紹介したなこれ。書かなくてもいいかと思ったけど一応書いておく。

rtk init -g は Copilot 向けではない

RTK のセットアップで rtk init -g を実行すると Claude Code 向けのフックしか設置されない。Copilot 向けは --copilot フラグが必要:

rtk init -g --copilot

ただし -g(グローバル)をつけても実質プロジェクトスコープで、このコマンドを実行したディレクトリの .github/ 以下に copilot-instructions.mdhooks/rtk-rewrite.json が生成される。