AI エージェントとの並列作業が増えてきた今、詳しく知りたい git worktree

先日、とある方に相談していたことがあります。worktreeです。

AIがですね、ガシガシ使おうとするのです。ブランチ戦略だけでも、少し注意が必要だったのに、wokrtreeまでメンバーに伝えるのは、ちょいと大変。そもそも私も大変です。

ですが、現実を見ると、もはや待ったなし。ということで、一旦まとめてみることにしました。

git worktree とは

git worktreeは Git 2.5(2015年)で追加された標準機能です。外部ツールではなく、Gitに組み込まれた機能なので、特別なインストールは不要です。以前は、私自身外部ツール?と勘違いしていたくらい、あまり使っていない機能でした。

# Git本体のコマンドとして存在
$ git worktree list
$ git worktree add
$ git worktree remove

ブランチと Worktree の違い

ここが混乱しやすいポイントです。

ブランチ = Git内部の「線」(論理的)

リポジトリ内の履歴
                          
main     ●───●───●───●
                    ↑
develop  ●───●───●───●───●───●
                        ↑
feature  ●───●───●───●───●───●───●

ブランチは Git が管理する履歴の分岐 です。目に見えるフォルダではありません。

Worktree = 実際のフォルダ(物理的)

Finder / エクスプローラで見える状態

~/projects/
├── my-app/                 ← Worktree 1(developをチェックアウト中)
│   ├── src/
│   ├── package.json
│   └── .git/               ← 本体の.gitがここにある
│
├── my-app-feature-auth/    ← Worktree 2(feature/authをチェックアウト中)
│   ├── src/
│   ├── package.json
│   └── .git  (ファイル)    ← 本体を参照するリンク
│
└── my-app-hotfix/          ← Worktree 3(hotfix/loginをチェックアウト中)
    ├── src/
    ├── package.json
    └── .git  (ファイル)    ← 本体を参照するリンク

Worktree は 物理的に別のフォルダ として存在します。

一言でまとめると

概念何かどこにある
ブランチ履歴の分岐線Gitの中(見えない)
Worktree作業フォルダファイルシステム(見える)

Worktree = 「ブランチを物理フォルダとして展開したもの」 と考えるとわかりやすいです。

「チェックアウト」とは

Worktreeを理解するには「チェックアウト」の概念も押さえておく必要があります。

チェックアウト = 「取り出して作業机に広げる」

【Gitリポジトリ = 倉庫】

倉庫の中には全ブランチの全履歴が保管されている

┌─────────────────────────────────┐
│  main の履歴                     │
│  develop の履歴                  │
│  feature/auth の履歴             │
│  ...(全部圧縮して保管中)         │
└─────────────────────────────────┘
              │
              │ git checkout develop
              ↓
┌─────────────────────────────────┐
│  【作業フォルダ = 作業机】         │
│                                 │
│  src/                           │
│  package.json                   │
│  README.md                      │
│                                 │
│  ← develop の中身が展開されている  │
└─────────────────────────────────┘

「チェックアウト中」とは、今作業フォルダに展開されているブランチのことです。

$ git branch
  main
* develop      ← * がついている = チェックアウト中
  feature/auth

通常の運用 vs Worktree運用

通常(Worktreeなし)

~/my-app/  ← このフォルダ1つで全部やる

$ git checkout develop   → フォルダの中身が develop に変わる
$ git checkout feature   → フォルダの中身が feature に変わる
$ git checkout main      → フォルダの中身が main に変わる

この方法の問題点は以下の通りです。

  • 切り替えるたびに npm install が必要になることも
  • 作業中のファイルを stash しないと切り替えられない
  • 「今どのブランチ?」を常に意識する必要あり

Worktree運用

~/my-app/           ← 常に develop
~/my-app-feature/   ← 常に feature
~/my-app-hotfix/    ← 常に hotfix

メリットは明確です。

  • 切り替え不要、フォルダを移動するだけ
  • 各フォルダで別々のターミナル/エディタ/AIセッションを開ける
  • 並列作業が物理的に可能

なぜ AI エージェントとの協働で有効なのか

ここが本題です。

セッションごとに文脈が分かれる

たとえば「検索機能のリファクタリング」と「決済機能の実装」という2つのタスクがあるとします。

~/my-project/           # develop ブランチ
~/my-project-search/    # feature/search-refactor
~/my-project-payment/   # feature/payment

それぞれ別のWorktreeで、別々のClaude Codeセッションを起動すると以下のようになります。

セッション1(検索機能): 「このクエリの最適化について...」
セッション2(決済機能): 「Stripeのwebhook処理について...」
→ 互いに干渉せず、それぞれの文脈で深い議論ができる

通常のブランチ切り替えでは、1つのフォルダで作業するため、AIセッションも1つになりがちです。Worktreeなら物理的にフォルダが分かれるため、複数のAIエージェントを同時に走らせる「擬似チーム開発」 が可能になります。

そして、私がもう一つ思うのは、物理的に分かれているので、壊れる心配が少ないということです。

基本的な使い方

Worktree の追加

# メインのリポジトリで作業中
cd ~/my-project
git branch  # developにいることを確認

# featureブランチを作成してWorktreeを追加
git worktree add ../my-project-feature -b feature/new-function

これで ~/my-project-feature ディレクトリが作成され、feature/new-function ブランチがチェックアウトされます。

Worktree の一覧確認

$ git worktree list
/Users/yourname/my-project          abc1234 [develop]
/Users/yourname/my-project-feature  def5678 [feature/new-function]

作業完了後のクリーンアップ

# Worktreeを削除
git worktree remove ../my-project-feature

# ブランチも削除(マージ済みなら)
git branch -d feature/new-function

チームで運用する際の禁止事項

Worktreeを使ったチーム開発では、以下のルールを明確にしておくと事故を防げます。

Git操作の禁止事項

禁止事項理由
main への直接 push本番破壊リスク
main / develop への force push履歴破壊、他メンバーの作業が消える
他人の feature ブランチへの無断 push作業衝突、責任の曖昧化

コミットの禁止事項

禁止事項理由
動作未確認のままコミットバグの混入
複数機能の一括コミットrevert が困難、履歴が追えない
機密情報のコミット(APIキー等)セキュリティ事故

AIエージェント関連の禁止事項

禁止事項理由
AI に勝手にコミットさせる意図しない変更の混入
AI に勝手に push させる上記より深刻
AI の出力をレビューせずマージ品質担保できない

これらのルールは CLAUDE.md などに明記しておくと、AIエージェントにも伝わります。

まとめ

git worktreeは2015年から存在する機能ですが、AIエージェントとの協働が増えた今、改めて価値が見直されています。

  • ブランチは論理的な履歴の分岐、Worktreeは物理的なフォルダ
  • Worktreeを使えば、複数ブランチを同時に開いて並列作業できる
  • AIエージェントごとに別のWorktreeを割り当てれば、文脈が混ざらない
  • チーム運用では禁止事項を明確にして事故を防ぐ

個人開発でもチーム開発でも、AIエージェントを活用するなら知っておいて損はない機能です。