はじめに
この記事では、Git の機能である git worktree の基本的な仕組みを説明し、AI コーディングエージェントを使った同時並行開発への活用方法を紹介します。
git worktree とは
git worktree は、1つの Git リポジトリから複数の作業ディレクトリ(working tree)を作成できる機能です。
通常、Git リポジトリは1つのディレクトリにつき1つのブランチしかチェックアウトできません。git worktree を使うと、別のディレクトリに別のブランチを同時に展開できます。
通常のリポジトリ構造
~/project/ ← mainブランチをチェックアウト中
├── .git/ ← Gitデータの実体
├── src/
└── package.json
1つのディレクトリで作業するため、ブランチを切り替えるには git switch や git checkout が必要です。切り替えのたびに作業ディレクトリのファイルが書き換わります。
worktree を使った構造
~/project/ ← メイン (mainブランチ)
└── .git/ ← Gitデータの実体はここに1つだけ
~/project-feature-a/ ← worktree (feature/aブランチ)
└── .git ← ファイル。~/project/.git を参照しているだけ
~/project-feature-b/ ← worktree (feature/bブランチ)
└── .git ← 同上
ポイントは、.git(コミット履歴やリモート情報など)は元のリポジトリのものを共有している点です。ディレクトリは独立していますが、Git としては同じリポジトリです。
基本操作
git worktree の主要なサブコマンドは以下の4つです。
- add:新しい作業ディレクトリを作成する
- list:現在の worktree 一覧を表示する
- remove:作業ディレクトリを削除する
- prune:無効になった worktree の管理情報を削除する
add:worktree の作成
git worktree add は、指定したパスに新しい作業ディレクトリを作成し、指定したブランチをチェックアウトします。
# 既存ブランチをチェックアウトする
git worktree add <パス> <ブランチ名>
# 新しいブランチを作成してチェックアウトする(-b オプション)
git worktree add -b <新ブランチ名> <パス>
利用例
# 既存の feature/login ブランチを別ディレクトリに展開
git worktree add ../project-login feature/login
# 新しいブランチ feature/dashboard を作成しつつ展開
git worktree add -b feature/dashboard ../project-dashboard
この操作の後、../project-login と ../project-dashboard はそれぞれ独立したディレクトリとして存在し、別々のブランチがチェックアウトされた状態になります。
制約
同じブランチを複数の worktree で同時にチェックアウトすることはできません。これは、同じブランチが複数箇所で編集されることによる不整合を防ぐための仕様です。
# main ブランチが既にチェックアウトされている場合
git worktree add ../another-main main
# fatal: 'main' is already checked out at '/home/user/project'
list:一覧表示
git worktree list
/home/user/project abc1234 [main]
/home/user/project-login def5678 [feature/login]
/home/user/project-dashboard ghi9012 [feature/dashboard]
現在のリポジトリに紐づく全ての worktree のパス、HEAD のコミットハッシュ、ブランチ名が表示されます。
remove:削除
作業が完了した worktree を削除します。
git worktree remove ../project-login
このコマンドはディレクトリの削除と、Git 内部の管理情報のクリーンアップを同時に行います。未コミットの変更がある場合はエラーになるため、--force オプションで強制削除できます。
prune:管理情報の掃除
手動でディレクトリを削除した場合など、実体のない worktree の管理情報が残ることがあります。prune はそれらを掃除します。
# 手動でディレクトリを削除してしまった場合
rm -rf ../project-login
# 管理情報を掃除
git worktree prune
git clone との比較
複数の作業ディレクトリを作る方法として git clone もありますが、用途によって使い分けが必要です。
git worktree |
git clone |
|
|---|---|---|
.git の実体 |
共有(軽量) | 独立(リポジトリ全体をコピー) |
| コミット履歴の共有 | 即座に反映される |
push / pull が必要 |
| 同じブランチの同時チェックアウト | 不可 | 可能 |
| セットアップ速度 | 一瞬 | リポジトリサイズに依存 |
| リモートとの関係 | 元のリポジトリと同じ設定 | 独立した設定 |
「同じリポジトリで複数ブランチを同時に開きたい」場合は git worktree が適しています。一方、完全に独立した環境が必要な場合は git clone が選択肢になります。
AI 同時並行開発への活用
git worktree が特に効果を発揮するのが、Claude Code などの AI コーディングエージェントを使った同時並行開発です。
背景:AI エージェントによる並行開発の課題
AI コーディングエージェントにタスクを任せるとき、複数のタスクを同時に進めたいケースがあります。しかし、1つのディレクトリで複数のエージェントを同時に動かすと、ファイルの競合が発生します。
# ❌ 同じディレクトリで複数エージェントを動かす
~/project/
├── Agent A が src/auth.ts を編集中
└── Agent B も src/auth.ts を編集中 ← 競合!
人間の複数人開発であればブランチを分けて作業しますが、ローカル環境では同じディレクトリで1つのブランチしかチェックアウトできないため、そのままでは並行作業ができません。
解決策:worktree でエージェントごとに作業ディレクトリを分離する
git worktree を使えば、エージェントごとに独立した作業ディレクトリを用意できます。
# メインリポジトリ
cd ~/project
# タスクAの作業ディレクトリを作成
git worktree add -b feature/auth-refactor ../project-task-a
# タスクBの作業ディレクトリを作成
git worktree add -b feature/add-dashboard ../project-task-b
~/project/ ← メイン (mainブランチ) ※人間が管理
~/project-task-a/ ← Agent A (feature/auth-refactorブランチ)
~/project-task-b/ ← Agent B (feature/add-dashboardブランチ)
それぞれのディレクトリで別々のエージェントセッションを起動すれば、互いに干渉せず作業が進みます。
ワークフロー
1. worktree の作成とエージェントの起動
# ターミナル1:タスクAを担当するエージェントを起動
git worktree add -b feature/auth-refactor ../project-task-a
cd ../project-task-a
claude # Claude Code を起動し、タスクAを指示
# ターミナル2:タスクBを担当するエージェントを起動
git worktree add -b feature/add-dashboard ../project-task-b
cd ../project-task-b
claude # Claude Code を起動し、タスクBを指示
2. 作業の統合
各エージェントの作業が完了したら、通常のブランチマージで統合します。
cd ~/project
# タスクAの成果をマージ
git merge feature/auth-refactor
# タスクBの成果をマージ
git merge feature/add-dashboard
3. クリーンアップ
# worktree を削除
git worktree remove ../project-task-a
git worktree remove ../project-task-b
# マージ済みのブランチを削除
git branch -d feature/auth-refactor
git branch -d feature/add-dashboard
並行開発を成功させるコツ
AI エージェントを並行で動かす際には、タスクの分割方法が重要です。
タスク分割の指針
- ファイルの重複を避ける:各エージェントが触るファイルが重複しないようにタスクを分割する。同じファイルを複数のエージェントが編集すると、マージ時にコンフリクトが発生する
- 独立性の高いタスクを選ぶ:新しいページの追加、独立したユーティリティ関数の実装、テストの追加など、他の作業に影響しにくいタスクが適している
- 共通の依存関係に注意する:共有の型定義や設定ファイルを複数のエージェントが同時に変更しないようにする
向いているタスクの例
# ✅ 並行作業に向いている組み合わせ
Agent A: 認証機能のリファクタリング (src/features/auth/)
Agent B: ダッシュボードの新規作成 (src/features/dashboard/)
# ⚠️ コンフリクトのリスクがある組み合わせ
Agent A: グローバルなCSS変数の追加 (src/styles/variables.css)
Agent B: デザインシステムの変更 (src/styles/variables.css)
まとめ
この記事では、git worktree の基本的な仕組みと、AI コーディングエージェントを使った同時並行開発への活用方法を紹介しました。
git worktree は、1つのリポジトリから複数の作業ディレクトリを軽量に作成できる Git の機能です。AI エージェントごとに独立した作業ディレクトリを用意することで、ファイルの競合を防ぎながら複数のタスクを同時に進められます。作業完了後は通常のブランチマージで統合できるため、既存の Git ワークフローに自然に組み込めます。