メインコンテンツへスキップ
19 / 26|4分で読めます

Worktrees — 並行開発の技法

Git worktreeを使ってエージェントに独立した作業空間を与える。競合を避けながら複数の変更を同時に進める方法を扱う。

複数のエージェントが同じファイルを触ったらどうなるか。答えは「カオス」。Worktreeは、このカオスを秩序に変える仕組みだ。


Git Worktreeとは

Git worktreeは、一つのリポジトリから複数の作業ディレクトリを作り出すGitの機能である。

通常、Gitリポジトリは一つの作業ディレクトリしか持てない。ブランチを切り替えるには git checkout が必要で、作業中のファイルに影響が出る。

Worktreeを使えば、同じリポジトリの異なるブランチを、異なるディレクトリで同時に開ける。

my-project/                  # メインの作業ディレクトリ(mainブランチ)
.claude/worktrees/
├── feature-auth/            # feature-auth ブランチの独立コピー
└── fix-bug-42/              # fix-bug-42 ブランチの独立コピー

Claude CodeでのWorktree活用

EnterWorktree

Claude Codeに「worktreeで作業したい」と伝えると、.claude/worktrees/ 内に新しいworktreeを作成し、作業ディレクトリを移す。

Agent での Worktree 分離

エージェント起動時に isolation: "worktree" を指定すると、エージェントは独立したworktreeで作業する。

  • メインの作業ディレクトリに影響を与えない
  • 他のエージェントの作業と競合しない
  • 変更が気に入らなければ、worktreeごと削除できる

Worktreeのライフサイクル

作成 → 作業 → レビュー → マージ or 破棄 → クリーンアップ
  1. 作成: 新しいブランチとworktreeが同時に作成される
  2. 作業: worktree内で通常通りファイル操作、テスト、コミットが可能
  3. レビュー: worktreeブランチとメインブランチの差分を確認
  4. マージ or 破棄: 良ければマージ、不要ならworktreeごと削除
  5. クリーンアップ: 変更なしなら自動削除。変更ありならパスとブランチ名を返却

実践パターン

パターン1: 実験的な変更

「この変更がうまくいくかわからない」場合にworktreeで試す。失敗しても、worktreeを削除すればメインのコードは無傷。

パターン2: 並列エージェント開発

2つのエージェントに異なる機能を同時に実装させる。それぞれ独立したworktreeで作業するため、ファイルの競合が発生しない。

パターン3: 安全なリファクタリング

大規模なリファクタリングをworktreeで行い、テストが全て通ることを確認してからマージする。


いつWorktreeを使うか

場面Worktree通常ブランチ
マルチエージェント並列作業推奨競合リスク
実験的な大きな変更推奨元に戻すのが面倒
小さなバグ修正不要十分
単一エージェントの作業不要十分

この章のポイント

  • Git worktreeは一つのリポジトリから複数の独立した作業ディレクトリを作る機能
  • isolation: "worktree" でエージェントに独立した作業空間を与えられる
  • 作成 → 作業 → レビュー → マージ/破棄 → クリーンアップのライフサイクル
  • マルチエージェント並列開発と実験的変更に特に効果的