worktreeとは
worktree は、1つのリポジトリから複数の作業ディレクトリ(ワークツリー)を同時に作成できる機能です。通常、Gitリポジトリには1つの作業ディレクトリしかありませんが、worktreeを使うと追加の作業ディレクトリを別のパスに作成し、それぞれで異なるブランチをチェックアウトして同時に作業できます。
基本的な使い方
# 新しいworktreeを作成(既存ブランチをチェックアウト)
git worktree add ../my-feature feature-branch
# 新しいブランチを作成しつつworktreeを追加
git worktree add -b new-branch ../new-work
# worktreeの一覧を表示
git worktree list
# 不要になったworktreeを削除
git worktree remove ../my-feature branchとの違い
| branch | worktree | |
|---|---|---|
| 概念 | コミット履歴の分岐を管理するポインタ | リポジトリに紐づく追加の作業ディレクトリ |
| 切り替え方法 | git switch / git checkout で作業ディレクトリの中身が切り替わる | 別のディレクトリとして存在するので切り替え不要 |
| 同時作業 | 1つの作業ディレクトリでは1ブランチしかチェックアウトできない | worktreeごとに別ブランチをチェックアウトでき、複数ブランチで同時に作業可能 |
| 作業中の変更 | ブランチを切り替えるときに stash やコミットが必要 | 別ディレクトリなので、他のworktreeに影響しない |
| リポジトリデータ | .git ディレクトリは1つを共有 | 参照用の .git ファイルを持ち、履歴・ブランチ情報を共有する |
💡
worktreeはbranchの代わりではなく、branchをより便利に扱うための仕組みです。worktree内でもブランチを使ってバージョン管理を行います。
AIエージェント × worktree で並行開発
CodexやClaude CodeなどのAIエージェントとworktreeを組み合わせて使うとAIの作業完了を待たずに並行開発することができます。
例:
- worktree A(自分用):自分が手動でコーディングを進める
- worktree B(AIエージェント用):AIエージェントに別タスクのコードを書かせる
# 例:AIエージェント用のworktreeを作成
git worktree add ../ai-task feature/ai-refactor なお、Claude Codeには--worktree(短縮形 -w)オプションがあります。これを付けて起動すると、.claude/worktrees/ 配下に専用のworktree(ブランチ付き)が自動で作成され、その中でエージェントが作業を始めます。セッション終了時には変更の有無がチェックされ、変更がなければディレクトリとブランチは自動でクリーンアップされます(変更がある場合は保持するか破棄するかを確認されます)。
# 専用のworktreeを自動作成してエージェントを起動
claude --worktree つまずきやすいポイント
- 同じブランチを複数のworktreeで同時にチェックアウトすることはできない
- すでに別のworktreeでチェックアウト済みのブランチを開こうとするとエラーになります。
- 依存パッケージは各worktreeごとに用意が必要
-
node_modulesなどはworktree間で共有されないため、worktreeを追加したらnpm install等を改めて実行する必要があります - 不要になったworktreeは
git worktree removeで削除する- ディレクトリを手動で消すと参照情報が残るため、
git worktree pruneでの整理も覚えておくと安心です
- ディレクトリを手動で消すと参照情報が残るため、
参考