Playwright MCPで2つ目のセッションを立ち上げた瞬間、1つ目が固まった——心当たりありませんか? この干渉問題、原因はChromeプロファイルとポートの共有です。本記事では、Chromeプロファイル分離による解決策をメインに、ポート分離やGit Worktreeなど他の手段もセットで紹介します。設定ファイルのサンプル付きなので、読み終わったらすぐ手元で試せます。
複数セッションで起きる干渉問題とは
Playwright MCPを複数セッション同時に動かすと、ブラウザが排他制御に引っかかって片方が止まります。
「1つ目のセッションでスクレイピング中に、2つ目でフォーム入力しようとしたらブラウザが動かなくなった」——テックビルドの解説記事でもまさにこの現象が報告されています。Playwright MCPを単体で使っている分には気づかない落とし穴です。
干渉するとどうなるか
具体的に起きる症状はこのあたりです。
- ブラウザがフリーズする: 片方のセッションがページ遷移した瞬間、もう片方が応答しなくなる
- 操作が「あべこべ」になる: セッションAの指示がセッションBのブラウザに飛ぶ
- 認証状態が巻き込まれる: 片方でログアウトすると、もう片方のログイン状態も吹っ飛ぶ
- 通知音がモグラ叩き状態になる: 複数セッション起動中に通知が鳴るたびに確認・修正・指示を繰り返して時間が溶けます
正直、2セッション目を起動しただけでこれが起きるので、初見だと「Playwright MCPのバグかな?」と疑いたくなります。でもバグじゃないんです。
原因はプロファイルとポートの共有
Playwright MCPはデフォルトで同一のChromeプロファイルディレクトリと同一のデバッグポートを使います。Chromeのプロファイルにはロック機構があるので、2つのプロセスが同時にアクセスすると排他制御が働いて片方がブロックされます。
もう少し噛み砕くと、こういう構図です。
| 共有されるリソース | 何が起きるか |
|---|---|
Chromeプロファイル(~/.config/google-chrome/Default等) | プロファイルロックでブラウザが起動しない or 操作が混線する |
| CDPポート(デフォルト9222) | 2つ目のセッションが接続先を取り違える |
| Cookie・LocalStorage | 認証状態が共有され、ログアウトが伝播する |
要するに、「1つのブラウザを2人で操縦しようとしている」のが干渉の正体です。解決策は明快——ブラウザ環境を分ければいい。
![[図解] 2つのClaude Codeセッションが同一Chromeプロファイル・同一ポートに接続して競合している様子を示す図。左右にセッションA・Bのボックス、中央に共有Chromeプロファイルとポート9222のボックス、矢印が衝突している表現](http://ai-mikata.com/wp-content/uploads/2026/03/autopress-17.jpeg)
Chromeプロファイル分離で解決する
一番おすすめの解決策がこれです。Chromeプロファイルをセッションごとに分離すれば、各セッションが独立したブラウザ環境を持つので干渉が起きません。
MCP設定ファイルの書き方
テックビルドの記事を参照しながら、設定の流れを紹介します。@anthropic/playwright-mcpの起動引数でプロファイルパスとポートを分けるのがポイントです。
claude_desktop_config.json(またはプロジェクトの.mcp.json)で、Playwright MCPサーバーの起動引数にプロファイルパスを渡します。
{
"mcpServers": {
"playwright-session-a": {
"command": "npx",
"args": [
"@anthropic/playwright-mcp",
"--profile", "/tmp/chrome-profiles/session-a",
"--port", "9222"
]
},
"playwright-session-b": {
"command": "npx",
"args": [
"@anthropic/playwright-mcp",
"--profile", "/tmp/chrome-profiles/session-b",
"--port", "9223"
]
}
}
}
mkdir -p /tmp/chrome-profiles/session-a
mkdir -p /tmp/chrome-profiles/session-b
それぞれのセッションが別ポート・別プロファイルで立ち上がれば成功です。ポートも必ず分けてください。プロファイルだけ分けてポートが同じだとCDP接続が競合します。
プロジェクトレベル設定の追加
チームで開発しているなら、グローバル設定(~/.config/claude/配下)ではなく、プロジェクトルートの.mcp.jsonに書くのがおすすめです。理由はシンプルで、Git管理できるから。プロジェクト固有のプロファイルパスを相対パスで指定すれば、チームメンバーが同じ設定を使えます。
チーム開発では.mcp.jsonをプロジェクトルートに置いてGit管理するのがベスト。.chrome-profiles/ディレクトリは.gitignoreに追加し、キャッシュやCookieをリポジトリに入れないようにしましょう。
{
"mcpServers": {
"playwright-a": {
"command": "npx",
"args": [
"@anthropic/playwright-mcp",
"--profile", "./.chrome-profiles/a",
"--port", "9222"
]
}
}
}
.chrome-profiles/ディレクトリは.gitignoreに追加しておきましょう。キャッシュやCookieをリポジトリに入れるのは事故のもとです。
動作確認と注意点
設定が正しいか、以下のポイントを順に確認してください。見落としがちな項目をまとめました。
- ポート番号の重複がないか:
lsof -i :9222でポートの使用状況を確認 - プロファイルパスが実在するか: 存在しないパスを指定するとPlaywrightがデフォルトにフォールバックし、結局共有になる
--isolatedフラグの併用: Playwright MCPによってはインメモリプロファイルを使う選択肢もある。ただし認証状態が保持されないため、ログインが必要なサイトを操作する場合は永続プロファイルのほうが実用的
他の解決策も知っておこう
プロファイル分離がメインの推奨策ですが、状況によっては別のアプローチも有効です。サクッと紹介します。
ポート分離で対応する方法
プロファイルはデフォルトのまま、CDPポートだけを分ける方法です。--port 9222と--port 9223のように起動引数を変えるだけなので手軽ですが、プロファイルロックの問題は残ります。認証状態も共有されるため、ログイン操作が絡むタスクには向きません。
- 起動引数を変えるだけで手軽に並行実行できる
- 「読み取り専用のスクレイピングを並行で回すだけ」なら十分機能する
一方、デメリットは以下です。
- プロファイルロックの問題は解消されない
- 認証状態が共有されるため、ログイン操作が絡むタスクには向かない
Git Worktreeで分離する
プロジェクトディレクトリ自体を分けてしまう方法です。git worktree addでブランチごとに独立した作業ディレクトリを作り、それぞれに.mcp.jsonを置きます。まず以下のコマンドでワークツリーを作成します。
git worktree add ../project-branch-b feature/branch-b
作成された../project-branch-bディレクトリに独自の.mcp.jsonを配置すれば、そのブランチ専用のPlaywright MCPプロファイル・ポート設定を持てます。プロファイル分離と組み合わせることで、「ブランチ単位でブラウザ環境も完全分離」が実現します——セッションが混線する余地がなくなるという意味で、複数ブランチ並行開発においては最も堅牢な構成です。
複数セッション運用のベストプラクティス
日常運用で意識しておくと事故が減るポイントを3つだけ紹介します。
- 命名規則を決める: プロファイル名・ポート番号をプロジェクト×タスクで固定する(例:
project-a-scrape:9222、project-a-form:9223)。場当たり的に番号を振ると必ず衝突します - 不要なプロファイルは定期的に掃除する:
/tmp/chrome-profiles/が肥大化すると地味にディスクを食います。CI/CDで使う場合はジョブ終了時に削除するスクリプトを仕込んでおくと安心です - 同時セッション数は自分が把握できる範囲に留める: 技術的には何個でも立てられますが、筆者の経験では3セッションあたりが実用的な上限の目安です。通知のモグラ叩き状態になって人間側がボトルネックになるので、無理に増やさないのが賢明です
この3つを守れば、Playwright MCP複数セッションの干渉で時間を溶かすことはなくなります。ぜひ設定ファイルの作成から始めてみてください。


