<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Chrome on 大体動かない</title><link>https://daitai.dev/tags/chrome/</link><description>Recent content in Chrome on 大体動かない</description><generator>Hugo</generator><language>ja</language><lastBuildDate>Tue, 28 Apr 2026 10:56:29 +0000</lastBuildDate><atom:link href="https://daitai.dev/tags/chrome/index.xml" rel="self" type="application/rss+xml"/><item><title>WSL の playwright-cli からホスト Windows の Chrome にアタッチする</title><link>https://daitai.dev/posts/wsl-playwright-cli-host-chrome/</link><pubDate>Tue, 28 Apr 2026 19:54:14 +0900</pubDate><guid>https://daitai.dev/posts/wsl-playwright-cli-host-chrome/</guid><description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;TL;DR&lt;/strong&gt; — WSL2 ミラーモードなら &lt;code&gt;--cdp=chrome&lt;/code&gt; チャンネル名は使えないが、Chrome を &lt;code&gt;--remote-debugging-port=9222&lt;/code&gt; で起動して &lt;code&gt;--cdp=http://localhost:9222&lt;/code&gt; を使えばアタッチできる。Firewall ルールも不要。なお、&lt;code&gt;--remote-debugging-address&lt;/code&gt; は非 headless Chrome では無視され、Chrome は常に &lt;code&gt;127.0.0.1&lt;/code&gt; にバインドする。&lt;code&gt;localhost&lt;/code&gt; で繋がるのはミラーモードが &lt;code&gt;127.0.0.1&lt;/code&gt; を通してくれるおかげ。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;どっかで聞いたところによると…&lt;/p&gt;
&lt;p&gt;playwright-cli（&lt;code&gt;@playwright/cli&lt;/code&gt;）には、起動済みの Chrome にアタッチしてそのセッションをそのまま操作できる機能があり、SAML/SSO 認証済みのページを操作したいときにサンドボックスの Chrome にログインし直す手間が省ける、とのことです。&lt;/p&gt;
&lt;p&gt;確かに便利そうなんだけど、この機能を WSL2 から使おうとしてハマったので記録しておきます。&lt;/p&gt;
&lt;p&gt;ほんと大体ハマってんな俺。&lt;/p&gt;
&lt;h2 id="やりたいこと"&gt;やりたいこと&lt;/h2&gt;
&lt;p&gt;WSL 上の playwright-cli から、ホスト Windows で開いている Chrome（ログイン済み）にアタッチして操作する。&lt;/p&gt;
&lt;h2 id="前提"&gt;前提&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;WSL2 ネットワークモード：ミラーモード（&lt;code&gt;networkingMode=mirrored&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;playwright-cli：&lt;code&gt;0.1.9&lt;/code&gt;（&lt;code&gt;mise use --global npm:@playwright/cli@latest&lt;/code&gt; でインストール）
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://daitai.dev/posts/mise-npm-cache/"&gt;前回&lt;/a&gt;自宅でハマったので職場では間違えなかった&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="チャンネル名--cdpchromeは-wsl-から使えない"&gt;チャンネル名（&lt;code&gt;--cdp=chrome&lt;/code&gt;）は WSL から使えない&lt;/h2&gt;
&lt;p&gt;そもそもこれが駄目だった。&lt;/p&gt;
&lt;p&gt;以下は Claude さんの解説です。&lt;/p&gt;
&lt;p&gt;playwright-cli には &lt;code&gt;microsoft/playwright#40177&lt;/code&gt;（2026年4月マージ）で、チャンネル名でアタッチできる機能が追加された。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;playwright-cli attach --cdp&lt;span class="o"&gt;=&lt;/span&gt;chrome
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;これは &lt;code&gt;DevToolsActivePort&lt;/code&gt; ファイルを読んでポートを自動解決する仕組みなのだが、WSL では動かない。&lt;/p&gt;
&lt;p&gt;原因は &lt;code&gt;process.platform&lt;/code&gt;。WSL 上では &lt;code&gt;linux&lt;/code&gt; になるため、スクリプトは &lt;code&gt;~/.config/google-chrome/DevToolsActivePort&lt;/code&gt;（Linux のパス）を探しに行く。ホスト Windows の Chrome が書き込むのは &lt;code&gt;%LOCALAPPDATA%\Google\Chrome\User Data\DevToolsActivePort&lt;/code&gt; なので、当然見つからない。&lt;/p&gt;</description></item></channel></rss>