Claude Code と git worktree で複数タスクを並列に進める手順
git worktree を使って Claude Code のセッションを複数同時に走らせる方法を解説します。worktree の作り方、各セッションの起動、依存関係とポート競合の回避、作業後の統合と後片付けまでの手順をまとめます。
Claude Code は 1 セッションで 1 つのタスクを進めるのが基本です。「機能 A の実装」と「バグ B の修正」を同時に頼むと、同じ作業ディレクトリ上で変更が混ざり、差分の切り分けが難しくなります。
そこで使うのが git worktree です。1 つのリポジトリから複数の作業ディレクトリを作り、それぞれで別のブランチをチェックアウトして、Claude Code を別々に起動します。この記事では、その手順と落とし穴をまとめます。
KEY POINT
この記事で分かること
- git worktree の作り方と Claude Code の起動手順
- 依存関係、ポート、環境変数の競合を避ける方法
- 作業後のブランチ統合と worktree の削除
git worktree とは
通常、1 つのリポジトリには 1 つの作業ディレクトリしかありません。git worktree add を使うと、同じ .git を共有する作業ディレクトリを追加できます。各 worktree は別のブランチをチェックアウトしており、互いのファイル変更は影響しません。
git worktree add ../myapp-feature-a -b feature/a
git worktree add ../myapp-fix-b -b fix/b
これで ../myapp-feature-a と ../myapp-fix-b という 2 つのディレクトリができ、それぞれ feature/a、fix/b ブランチになっています。
用語解説
worktree の配置場所: リポジトリの隣(../)に置くのが一般的です。リポジトリ内部(例: .worktrees/)に置く場合は .gitignore に追加し、Claude が誤って別 worktree のファイルを読まないようにします。
各 worktree で Claude Code を起動する
ターミナルを worktree の数だけ開き、それぞれで claude を起動します。
# ターミナル 1
cd ../myapp-feature-a
npm install
claude
# ターミナル 2
cd ../myapp-fix-b
npm install
claude
CLAUDE.md や .claude/settings.json はリポジトリの内容なので、各 worktree でも同じものが読み込まれます。.claude/settings.local.json や CLAUDE.local.md は Git 管理外のため、必要なら手でコピーします。
VS Code 拡張で使う場合は、worktree ごとに別ウィンドウで開きます。ワークスペースが異なれば、サイドパネルの Claude も独立します。
競合しやすいポイントと対策
| 競合 | 症状 | 対策 |
|---|---|---|
| 開発サーバーのポート | 2 つ目の npm run dev が起動失敗 | PORT=3001 npm run dev のように worktree ごとにポートを変える |
| データベース | 両方が同じローカル DB を変更 | DB 名を環境変数で分ける、または片方は DB を使わない作業にする |
.env | Git 管理外なので新しい worktree に存在しない | 元の worktree からコピーし、ポートや DB 名を書き換える |
| ビルドキャッシュ | 共有キャッシュを使うツールで不整合 | .next、dist などが worktree ごとに独立していることを確認する |
| Claude のセッション履歴 | --resume で別 worktree の履歴が出る | セッションは作業ディレクトリ単位で保存されるため、正しいディレクトリで再開する |
同じブランチを 2 つの worktree でチェックアウトできない
git は 1 つのブランチを複数の worktree で同時にチェックアウトすることを拒否します。main で作業中の worktree があるなら、新しい worktree は必ず別ブランチにしてください。
作業を統合する
各 worktree の作業が終わったら、通常のブランチ運用と同じです。
# feature/a の worktree でコミット済みとする
cd ../myapp # 元のディレクトリ
git checkout main
git merge feature/a # または PR を作成
git merge fix/b
PR を作る場合は、各 worktree から git push -u origin feature/a のように push します。Claude に「PR を作って」と頼めば、その worktree のブランチで作成されます。
worktree の後片付け
git worktree list # 一覧
git worktree remove ../myapp-fix-b # ディレクトリごと削除
git branch -d fix/b # マージ済みならブランチも削除
git worktree prune # 手で消したディレクトリの登録を掃除
削除を忘れると、ディスク容量とブランチ一覧が散らかります。マージのたびに消す習慣をつけてください。
並列作業の設計のコツ
- タスクを独立させる: 同じファイルを両方が触るタスクを並列にすると、マージ時に衝突します。先に Plan Mode で影響範囲を洗い出してから分けます。
- 2〜3 並列まで: 人間が確認できる量には限りがあります。並列数を増やしても、レビューが追いつかなければ品質は下がります。
- サブエージェントとの使い分け: 1 つのタスク内での並列(調査を複数の観点から同時に行うなど)は、worktree より サブエージェント が向いています。
まとめ
git worktree add ../dir -b branchで作業ディレクトリを増やし、各ディレクトリでclaudeを起動する- 依存関係のインストール、ポート、
.envは worktree ごとに用意する - 同じブランチは 2 か所でチェックアウトできない
- 作業後は
git worktree removeとgit branch -dで片付ける
よくある質問
- git worktree と git clone を複数回するのは何が違いますか?
- worktree は 1 つのリポジトリ(.git)を共有したまま作業ディレクトリだけを増やします。clone を繰り返すより容量が小さく、ブランチやスタッシュも共有されます。
- 各 worktree で npm install は必要ですか?
- 必要です。node_modules は作業ディレクトリごとに存在するため、worktree を作るたびに依存関係をインストールします。
- Claude Code に worktree を作らせることはできますか?
- 対話中に git worktree add を実行させることは可能です。近年のバージョンでは worktree 用の起動オプションも提供されているので、claude --help で確認してください。
参考にした一次情報
この記事は公式ドキュメントを基に AI が下書きを作成し、運営者が内容を確認して公開しています。誤りを見つけた場合はお問い合わせからお知らせください。