バックエンド実装時に使用。DRY原則遵守。コーディング規約準拠。
worktree-parallel
Git worktree を使った並列開発時に使用。配置・ポート割当・環境コピー・クリーンアップを標準化する。
インストール方法を見る含まれるファイル(1)
- SKILL.md11.5 KB
SKILL.md(原文)
インストールする前に、エージェントに与えられる指示の中身を確認できます。
Worktree Parallel Skill - Git Worktree 並列開発支援
目的
同一リポジトリ内で複数の独立タスクを並列に進める際、worktree の配置、ブランチ、ポート、環境ファイル、終了処理を統一する。
SuperPowers の using-git-worktrees で分離ワークスペースを確保したうえで、このスキルのプロジェクト固有ルールを適用する。
最重要ルール
- 1 worktree = 1 ブランチ = 1 Issue を原則とする
- worktree はリポジトリルートの
.worktrees/配下に作成する - worktree 名はブランチ名の
/を-に置換したものにする - worktree 内のエージェントは自分の worktree 外のファイルを変更しない
- 書き込みをするエージェントやセッションは、1 つの worktree に 1 つだけ。HEAD や index を共有しない
- 他の作業のファイルを stash・restore・clean しない
- worktree でサーバーを起動する場合は、必ずメインチェックアウト直下のポートレジストリで割り当てられたポートのみを使う
- 作業完了後は
git worktree removeとgit worktree pruneで孤児状態を残さない
Step 0: 前提確認
git branch --show-current
git status --short --untracked-files=no
git worktree list
--untracked-files=no は、main のチェックアウトで実行したときに、ユーザーの未追跡ファイル(作業中の資料など)の長い一覧を出さないため(前提確認に要るのは追跡ファイルの変更だけ)。
確認すること:
- 現在のブランチが
main/masterではない、またはこれから新規ブランチを作る - 未コミット変更がある場合、その変更が現在のタスクに関係する
- 既に同じ Issue / ブランチ用の worktree が存在しない
Step 1: .worktrees/ の安全確認
.worktrees/ は必ず Git 追跡対象外にする。
bash:
# パスは末尾スラッシュ付きで指定すること(ディレクトリ未作成でも正しく判定するため)
git check-ignore -q .worktrees/ || echo ".worktrees/" >> .gitignore
PowerShell:
git check-ignore -q .worktrees/
if ($LASTEXITCODE -ne 0) { Add-Content -Path .gitignore -Value ".worktrees/" }
.gitignore を変更した場合は、worktree 作成前にその変更をコミット対象として扱う。未追跡の worktree 内容が誤ってコミットされないことを最優先する。
Step 2: Worktree 作成
bash:
BRANCH_NAME="[type]/[description]-[issue-number]"
WORKTREE_NAME="${BRANCH_NAME//\//-}"
WORKTREE_PATH=".worktrees/${WORKTREE_NAME}"
git worktree add "${WORKTREE_PATH}" -b "${BRANCH_NAME}"
PowerShell:
$BranchName = "[type]/[description]-[issue-number]"
$WorktreeName = $BranchName -replace '/', '-'
$WorktreePath = ".worktrees/$WorktreeName"
git worktree add $WorktreePath -b $BranchName
既にブランチが存在する場合は -b を外して同じパスに追加する:
git worktree add "${WORKTREE_PATH}" "${BRANCH_NAME}"
作成後は対象 worktree に移動し、以降の変更はその中だけで行う。
スキルのリンク: .claude/skills 等は .gitignore(/.claude/skills など)で追跡対象外にしているリンクのため、worktree には引き継がれない。作成後に worktree の中で npx -y @crearize/ai-dev-helm@<version> link-skills を実行する(<version> は .ai-dev-helm.json の version。導入済みの版に固定する。無いリンクだけを作る。Windows は junction)。リンクが無いと配布スキルが読まれない。
Step 3: ポートレジストリ
worktree ごとのポートは、メインチェックアウト直下の .worktrees/.ports.json で管理する。
worktree 内からの相対パス(../.ports.json など)は worktree の配置に依存して壊れやすいため、メインチェックアウトで作成時に絶対パスを控えてエージェントへ渡す。
bash:
PORT_REGISTRY="$(pwd -P)/.worktrees/.ports.json"
PowerShell:
$PortRegistry = Join-Path (Get-Location).Path ".worktrees/.ports.json"
形式
{
"base": {
"frontend": 3000,
"backend": 8080
},
"allocations": {
"feat-example-123": {
"slot": 2,
"frontend": 3010,
"backend": 8090
}
}
}
割当ルール
- メインチェックアウトは常にプロジェクト標準のベースポートを使う
- worktree は空いている
slotを 2 から順に割り当てる - 同時に維持する worktree は最大 3 個(slot 2〜4)まで。CPU・メモリ・ディスクの消費が worktree 数に比例するため、上限を超える場合は既存 worktree の完了・削除を待つか、ユーザーに判断を仰ぐ
slotごとのポートはbase + ((slot - 1) * 10)とする- 既存割当がある worktree は同じポートを再利用する
- 割当ポートで既存プロセスが動いている場合、別ポートに逃げずに既存プロセスを停止する
手順
CLAUDE.md/AGENTS.md/.cursorrulesの Development Server Ports を確認する- メインチェックアウト直下の
.worktrees/.ports.jsonがなければ作成する - 現在の worktree 名に対応する割当を追加または再利用する
.env.localなどの PORT 系変数に割当ポートを反映する
Step 4: 環境ファイルと依存関係
worktree 作成後、メインチェックアウトから未追跡のローカル設定をコピーする。
対象例:
.env.env.local.env.development*.local
注意:
- 秘密情報を含むファイルをコミットしない
- worktree ごとのポート割当がある場合、コピー後に PORT 系変数だけ上書きする
- DB 名、Redis DB、キュー名など共有状態を壊す可能性がある値は worktree ごとに分離する
依存セットアップの原則(遅延 + キャッシュ共有)
worktree 作成直後に無条件で install / build を実行しない。
- 遅延セットアップ: install は、その worktree で最初にテスト・ビルド・サーバー起動が必要になった時点で実行する。ドキュメント修正やコードリーディングのみのタスクでは実行しない
- キャッシュ共有: パッケージマネージャの共有キャッシュを必ず活用する(pnpm store / npm cache / Gradle ユーザーホームキャッシュはマシン内で worktree 間共有される)
- フルビルドをセットアップとして実行しない: ビルドはテスト実行やサーバー起動が要求した時点で、必要なモジュールのみ行う
Node.js(install が必要になった時点で実行)
if [ -f pnpm-lock.yaml ]; then
pnpm install --prefer-offline # 共有 store からハードリンクされ高速
elif [ -f yarn.lock ]; then
yarn install --prefer-offline
elif [ -f package-lock.json ]; then
npm ci --prefer-offline
elif [ -f package.json ]; then
npm install --prefer-offline
fi
Gradle(worktree 作成時にはビルドしない)
Gradle のキャッシュ(~/.gradle)は worktree 間で共有されるため、事前のフルビルドは不要。テスト実行などでビルドが必要になった時点で実行する。
# ビルドが必要になった時点でのみ(例: テスト実行前)
./gradlew build -x test --build-cache
Python(install が必要になった時点で実行)
if [ -f requirements.txt ]; then pip install -r requirements.txt; fi
if [ -f pyproject.toml ]; then poetry install; fi
Step 5: 並列エージェント運用
2 つ以上の独立タスクを並列化する場合は、superpowers:dispatching-parallel-agents と組み合わせて worktree 単位で分離する。
各エージェントへの必須指示:
あなたの作業場所は <worktree path> です。
ポートレジストリは <absolute path to .worktrees/.ports.json> です。
この worktree 外のファイルを変更してはいけません。
サーバーを起動する場合はポートレジストリの割当ポートだけを使用してください。
作業完了時は起動したサーバーを停止し、変更内容と検証結果を報告してください。
独立していないタスク、共有ファイルへの頻繁な変更が必要なタスク、DB マイグレーション競合が起きるタスクは並列化しない。
Step 6: サーバー起動時の連携
worktree 内で E2E テスト、ブラウザ検証、開発サーバー起動が必要な場合は、必ず server-startup スキルを併用する。
順序:
- メインチェックアウト直下の
.worktrees/.ports.jsonの割当ポートを確認 - 割当ポートで既に動いているプロセスを停止
- 割当ポートでサーバーを起動
- テストまたは検証を実行
- 作業完了時にサーバーを停止
- ポートが LISTEN していないことを確認
Step 7: 完了・クリーンアップ
マージ / PR 作成 / 破棄の判断は superpowers:finishing-a-development-branch スキルに従う。
PR がマージされた、または作業を破棄する判断をしたら、worktree とブランチを削除する。
git worktree remove ".worktrees/<worktree-name>"
git worktree prune
git branch -d "<branch-name>" # マージ済みを確認してから削除。破棄時のみ -D を使用
Windows で削除に失敗する場合(node_modules の長いパスなど)。対象は .worktrees/<name> の中だけにする。
git config core.longpaths true- 失敗したら、先頭を
\\?\にした絶対パス(\\?\<絶対パス>\.worktrees\<name>\node_modules)で長いパスを消す。Git Bash では/cがパスに変換されるためcmd //c rmdir /s /q "\\?\<絶対パス>\.worktrees\<name>\node_modules"と書く(PowerShell ならRemove-Item -LiteralPath "\\?\<絶対パス>\.worktrees\<name>\node_modules" -Recurse -Force) - そのあと
git worktree remove --force ".worktrees/<name>"とgit worktree pruneを実行する
.worktrees/<name> の外は消さない。
メインチェックアウト直下の .worktrees/.ports.json から該当 worktree の割当を削除する。
削除前に必ず確認すること:
- worktree 内に未コミット変更が残っていない
- 起動中サーバーが残っていない
- PR / Issue / ブランチの最終状態が明確である
チェックリスト
-
.worktrees/が Git 追跡対象外である - worktree 名がブランチ名と対応している
- メインチェックアウト直下の
.worktrees/.ports.jsonに割当がある - 同時 worktree 数が上限(3 個)以内である
- PORT 系 env が割当ポートに更新されている
- 依存セットアップが遅延 + キャッシュ共有の原則に従っている(無条件の install / build をしていない)
- 並列エージェントが worktree 外を変更しないよう指示されている
- 作業完了時にサーバーを停止した
- PR マージ後に worktree・ブランチ・ポート割当を削除した
レビュー
まだレビューはありません。使ってみた感想をお寄せください。
同じリポジトリのスキル
概要と使いどころ
Use before implementing any feature, behavior change, or refactor - settles requirements and design, then gets the design independently reviewed and approved by the user before code is written
日本語の概要は準備中です。原文の説明を表示しています。
作業開始時に使用。mainブランチでの作業禁止。Issue先行作成必須。
UI実装後の検証時に使用。agent-browser CLIでブラウザ上の動作を手動検証する。「UIを確認」「画面テスト」と言われたら使用(プロジェクトの E2E スイート実行は quality-check Step 5(推奨度・範囲で自動実施または確認)/ server-startup が担当)。
DBマイグレーション作成時に使用。バージョン番号競合防止。mainブランチ確認必須。
Use when independent tasks benefit from parallel work without shared state or sequential dependencies
日本語の概要は準備中です。原文の説明を表示しています。