エージェントを並列に動かすなら、worktree に加えて DB とポート範囲も分ける
git worktree で防げるのはファイルの衝突だけ。並列のエージェントが同じ DB や同じポートの開発サーバーを使うと、互いのデータに対してテストしてしまい、しかも気づきにくい。エージェントごとに専用の DB とポート範囲を割り当てる。暴走したときにどう止めるかも、使う前に決めておく。
どんな場面で使う?
- worktree やサブエージェントで、同じリポジトリの作業を複数同時に走らせている
- 「たまに落ちる」テストや、身に覚えのないテストデータが出てくる
手順(例)
以下は投稿の指摘を、手元で実施する形にした例(具体的な実装は補足)。
- worktree ごとに番号を決め、環境変数で分ける
bash
# 例: worktree 名から番号を作る N=$(basename "$PWD" | cksum | awk '{print $1 % 50}') export PORT=$((3000 + N * 10)) # 3000〜3490 を10個ずつ export DATABASE_URL="postgres://localhost:5432/app_wt_${N}" - 起動時に専用 DB を作ってマイグレーションする(テスト用 DB も同様に分ける)
- Redis のキー接頭辞、キューの名前、一時ディレクトリ、Docker Compose のプロジェクト名(
-p)なども同じ番号で分ける - エージェントへの指示(AGENTS.md / CLAUDE.md)に「
PORTとDATABASE_URLを必ず環境変数から使う。固定値を書かない」と書く - 止め方を先に決めておく: どのプロセスを止めれば作業が止まるか、API キーやトークンを無効にする手順、権限を絞る設定の場所を書き出しておく
注意点
- @shtse8 は、OpenAI/Anthropic が公表した「エージェントが想定外の動きをした」事例について、検知は早かったのに実際に止めるまで3時間近くかかった点が怖い、と指摘している
- ポートや DB を分けても、外部の共有サービス(本番に近いステージング、共有の外部 API)は分けられない。書き込みが起きる先は、テスト用アカウントや読み取り専用にしておく
- 関連: Claude Code: git worktree で3〜5セッションを並列に回す(--worktree / --tmux) / tmux+devcontainer で Claude Code を4並列: 通知を tmux のペインで受ける / サブエージェントの「無限増殖」に備える
出典
- @shtse8 2026-10-26(@thorstenball の記事への引用): @shtse8 · 2026-10-26
- @shtse8 2026-10-26(止め方を先に決める): @shtse8 · 2026-10-26