Communityコーディング&開発github.com

techiejd/claude-skill-parallel-resource-isolation

並列実行する複数のClaudeインスタンス間で発生するリソース競合(ポート、データベース、Playwright)を検出し、解決するClaude Codeスキルです。

claude-skill-parallel-resource-isolation とは?

このスキルは、同じプロジェクト上で複数のClaudeインスタンスが並列動作する際に発生する、ポート、データベース、Playwrightブラウザ等のリソース競合を自動検出し、サイレントに適応する仕組みを提供します。 例えば、開発サーバー起動前に`lsof -i :3000`でポートの使用状況を確認し、競合があれば空きポートに自動で切り替えます。データベース(Supabase)に対する書き込みテストでは、タイムスタンプベースのスキーマ(例: `parallel_1741234567_`)を作成して分離し、テスト終了後に後始末します。Playwrightのブラウザインスタンスも、`TMPDIR`や`PLAYWRIGHT_BROWSERS_PATH`の環境変数で排他制御できます。 特にClaude Codeに最適化されており、設定ファイルの直接変更は行わず、環境変数による静かな適応を原則とします。競合が発生した場合のみ、ターミナルに簡潔なレポートを表示します。

対応✓Claude Code~Codex CLI~Cursor
npx skills add techiejd/claude-skill-parallel-resource-isolation

Installed? Explore more コーディング&開発 skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

並列リソース分離

概要

同じプロジェクトで動作する複数のClaudeインスタンスは、ポート、データベース、ブラウザインスタンスで競合します。このスキルは、事前検出と静かな適応を行います — 使用中のリソースを確認し、別のものを選び、選択した内容を報告します。

基本原則: システムの状態を観察し、静かに適応し、ターミナルに報告する。調整ファイルもロックファイルも共有状態も必要ありません。

使用タイミング

以下のアクションの前に、必ず検出チェックを実行してください:

  • 開発サーバーの起動 (next dev, npm run dev)
  • Playwright e2eテストの実行
  • データベースへの書き込みやアサーションを含むテストの実行

ポート分離 (開発サーバー)

開発サーバーを起動する前に:

lsof -i :3000 -t 2>/dev/null

使用中の場合は、空きポートが見つかるまで上位(3001, 3002, ...)をスキャンします。次のコマンドで起動:

PORT=<free_port> next dev

webServer設定を使用したPlaywright:

  • 環境変数でポートを上書きし、同じポートをbaseURLに渡す
  • 環境変数によるポート上書きがサポートされていない場合はユーザーに通知する — 設定ファイルは変更しないでください

webServerを使用しないPlaywright(外部サーバー):

  • 空きポートで開発サーバーを起動
  • 上書きしたbaseURLでPlaywrightを実行:
BASE_URL=http://localhost:<free_port> npx playwright test

Playwright設定にハードコードされたbaseURL(よくあるケース): 多くの設定では、環境変数から読み取らずbaseURL: 'http://localhost:3000'とハードコードされています。その場合、BASE_URL=...は機能しません。以下の正確な修正をユーザーに通知してください:

playwright.config.tsにハードコードされたbaseURLがあります。次のように更新してください: baseURL: process.env.BASE_URL || 'http://localhost:3000' こうすることで、設定ファイルを変更せずに環境変数でポートを上書きできるようになります。

データベース分離 (Supabase)

データベースへの書き込みやアサーションを含むテストを実行する前に:

  1. 分離が必要かどうかを判断:
    • 読み取りのみ → データベースを共有、分離はスキップ
    • 書き込み / 変更 / データベース状態のアサーション → 分離する
  2. タイムスタンプベースのスキーマプレフィックスを生成: parallel_<epoch>_ (例: parallel_1741234567_)
  3. 分離されたスキーマを作成し、マイグレーションを実行:
psql "$DATABASE_URL" -c "CREATE SCHEMA parallel_1741234567_;"
PGOPTIONS="--search_path=parallel_1741234567_" npx supabase db push
  1. 環境変数でアプリケーションを分離スキーマにポイント:
SUPABASE_SCHEMA=parallel_1741234567_ npx playwright test
  1. テスト完了後: スキーマを削除:
psql "$DATABASE_URL" -c "DROP SCHEMA parallel_1741234567_ CASCADE;"

Playwrightブラウザ分離

Playwrightテストを実行する前に:

  1. 競合する可能性のある実行中のPlaywrightブラウザプロセスをチェック
  2. ブラウザの状態を分離し、ロック競合を回避 — 次のいずれかの方法を使用:
TMPDIR=/tmp/playwright_<epoch> npx playwright test

または、より的を絞ってブラウザパスのみを分離:

PLAYWRIGHT_BROWSERS_PATH=/tmp/pw_browsers_<epoch> npx playwright install chromium
PLAYWRIGHT_BROWSERS_PATH=/tmp/pw_browsers_<epoch> npx playwright test
  1. Playwrightインスタンスが上記のポート分離で割り当てられたものと同じポートをターゲットにしていることを確認

報告

適応後、一度だけ報告し、先に進みます:

⚡ 並列分離:
  開発サーバー: ポート3005(3000は使用中でした)
  DBスキーマ: parallel_1741234567_
  Playwright: /tmp/playwright_1741234567

実際に適応したリソースのみを報告します。競合がなければ、何も言いません。

クイックリファレンス

リソース検出適応後始末
開発サーバーポートlsof -i :<port>PORT=<next_free>不要
Supabase DBテストが書き込み/アサーションを行うか確認parallel_<epoch>_ スキーマテスト後にスキーマを削除
Playwrightブラウザロック競合を確認TMPDIR または PLAYWRIGHT_BROWSERS_PATHテンポラリディレクトリは自動クリーンアップ

よくある間違い

他のClaudeのプロセスを強制終了する

  • 問題: ポート3000が使用中のため、プロセスを強制終了して解放してしまう
  • 修正: 自分が起動していないプロセスは絶対に強制終了しない。別のポートを選んでください。

ポート上書きのために設定ファイルを変更する

  • 問題: playwright.config.tsやnext.config.jsを編集するとgitコンフリクトが発生する
  • 修正: 環境変数を使用する。環境変数が機能しない場合は、ユーザーに通知する。

適応したポートをPlaywrightに渡し忘れる

  • 問題: 開発サーバーは3005、Playwrightは依然として3000にアクセスする
  • 修正: 常に連携する — 開発サーバーに割り当てられたポートをBASE_URLとしてPlaywrightに渡す必要があります。

不要なデータベース分離

  • 問題: 読み取り専用テストでスキーマ作成のオーバーヘッドが発生する
  • 修正: テストがデータベースに書き込んだりアサーションを行う場合にのみ分離する。

レッドフラグ

絶対にしないこと:

  • リソースを解放するために別のプロセスを強制終了する
  • 設定ファイルを変更してポートを変える
  • ポート競合を無視して「どうにかなるだろう」と期待する
  • テスト後のデータベース後始末をスキップする

常に行うこと:

  • 開始前に確認する
  • 環境変数で静かに適応する
  • 選択した内容を報告する
  • テスト後にDBスキーマを後始末する

関連スキル