「レビュー依頼が来たけど、いま実装中のブランチに未コミットの変更がある」——そのたびに git stash して、ブランチを切り替えて、dev サーバを立ち上げ直していませんか。

git worktree を使えば、1つのリポジトリから複数の作業ディレクトリを同時に展開でき、ブランチ切り替えそのものが不要になります。

さらに 2026 年現在、Claude Code などの AI コーディングエージェントを複数並列で走らせる際の土台としても事実上の必須技術になっています。

本記事では、コピペで動く基本コマンドから、AI エージェントとの組み合わせ方、実際にハマりやすいポイント 5 つまでを解説します。

独学に限界を感じたら

プログラミング教室がおすすめ。挫折せず最短で実力を伸ばせます。

PR

git worktreeとは?1つのリポジトリで複数ブランチを同時に開く

git worktree は、1 つのリポジトリに紐づく「作業ディレクトリ(working tree)」を複数作れる Git の標準機能です。Git 2.5(2015 年)から入っている機能なので、追加インストールは不要です。

通常、リポジトリには作業ディレクトリが 1 つしかなく、同時にチェックアウトできるブランチも 1 つだけです。worktree で追加した作業ディレクトリは、コミット履歴やオブジェクト(.git の中身)を元のリポジトリと共有しながら、それぞれ別のブランチを展開できます。

  • main を開いたまま、隣のディレクトリで feature ブランチを同時に開ける
  • リポジトリの実体(オブジェクトストア)は共有されるので、git clone を複数回するよりディスク効率がよい
  • コミット・ブランチ・タグはすべての worktree から見える(fetch も 1 回で済む)

追加された作業ディレクトリの .git は「ディレクトリ」ではなく、本体リポジトリの .git/worktrees/<名前> を指す小さなファイルになります。この仕組みのおかげで、履歴を共有しつつ作業状態(チェックアウト中のブランチ・インデックス)だけを分離できます。

基本コマンド(コピペで動く)

作業ツリーを追加する:git worktree add

# 既存ブランチを別ディレクトリに展開する
git worktree add ../myapp-review feature/login

# 新しいブランチを作りながら展開する(-b)
git worktree add -b feature/auth ../myapp-auth

# main の最新から新ブランチを切って展開する
git worktree add -b hotfix/typo ../myapp-hotfix origin/main

パスは ../myapp-review のようにリポジトリの外側(隣)を指定するのが定石です。リポジトリ内部に作ると、ビルドや lint の対象に巻き込まれて事故のもとになります。

なお、同じブランチを 2 つの worktree で同時にチェックアウトすることはできませんfatal: 'feature/login' is already checked out at ... というエラーになります)。これは競合を防ぐための仕様です。

一覧・削除・掃除:list / remove / prune

# 現在の worktree を一覧する(本体も含めて表示される)
git worktree list

# 使い終わった worktree を削除する
git worktree remove ../myapp-review

# ディレクトリを手で消してしまった場合の後始末
git worktree prune

git worktree remove は未コミットの変更が残っていると失敗します(--force で強制削除も可能ですが、変更が消えるので確認してから)。また、worktree を消してもブランチは残るので、不要なら git branch -d feature/auth を別途実行します。

AIコーディングエージェントを並列で走らせる

worktree が 2026 年に再注目されている最大の理由がこれです。Claude Code などの AI コーディングエージェントは 1 タスクに数分〜数十分かかることがあり、その間ずっと作業ディレクトリを占有します。

1 つのディレクトリで複数エージェントを同時に走らせると、互いのファイル変更が混ざって壊れます。worktree でエージェントごとに作業ディレクトリを分離すれば、この競合をゼロにできます。

# タスクごとに worktree を切る
git worktree add -b feat/api-error-handling ../myapp-task1
git worktree add -b feat/dark-mode ../myapp-task2

# それぞれのディレクトリで別のエージェント(別ターミナル)を起動する
cd ../myapp-task1 && claude   # タスク1: APIのエラーハンドリング改善
cd ../myapp-task2 && claude   # タスク2: ダークモード対応

並列で走らせるときのタスク分割には、次の点に気をつけてください。

  • 各タスクが触るファイルが重複しないように分割する(重複するとマージ時に競合する)
  • 共有設定ファイル(ルーティング定義や i18n 辞書など)を複数タスクが同時に触る場合は、直列にするか競合解消を前提にする
  • エージェントごとにブランチを分け、完了したものから順に PR を出してマージする

ハマりどころ5つと対処法

1. node_modules は付いてこない

worktree にコピーされるのは Git が追跡しているファイルだけです。

node_modules のような ignore されたディレクトリは存在しないので、worktree を作るたびに pnpm install(または npm / yarn)を実行する必要があります。

pnpm はグローバルストアからハードリンクで展開するため、worktree を多用する場合は特にインストールが速く、ディスクも節約できます。

2. .env などの ignore されたファイルもない

# .env は追跡外なので、元の worktree からコピーする
cp .env ../myapp-task1/.env

3. dev サーバのポートが衝突する

複数の worktree で同時に dev サーバを立ち上げると、同じポートを取り合って 2 つ目以降が起動に失敗します(Next.js のように自動で別ポートへ逃げるツールもあります)。PORT=3001 pnpm dev のように worktree ごとにポートを明示すると安全です。

4. 同じブランチは二重に開けない

前述のとおり仕様です。「main を見ながら作業したい」場合は、main そのものではなく git worktree add ../myapp-main-view origin/main --detach のように detached HEAD で開くと、本体の main チェックアウトと衝突しません。

5. 片付けは remove → branch -d の2段階

worktree の削除とブランチの削除は別物です。マージ済みタスクの後片付けは git worktree remove ../myapp-task1 のあとに git branch -d feat/api-error-handling まで実行して完了です。

ちなみに Git 2.48 以降では worktree.useRelativePaths という設定が追加され、worktree の管理パスを相対パスで記録できるようになりました。リポジトリごと別マシンや Docker コンテナへ持ち運ぶ場合に便利です。

git stash・git cloneとの使い分け

  • 一時的に手元の変更を退避して同じディレクトリでブランチを切り替えたい → git stash
  • 複数ブランチを同時に開いて並行作業したい(AIエージェント並列など) → git worktree
  • 履歴も設定も完全に独立した複製が欲しい(別リモートの検証など) → git clone

「切り替え」で済むなら stash、「同時に開く」なら worktree、と覚えておけば迷いません。stash の実践的な使い方は次の記事にまとめています。

git stashの使い方総まとめ|saveは非推奨・pushで退避【2026】作業を一時退避するgit stashの現在の標準はpush(saveはGit 2.13から非推奨)。push -u -mの基本から--staged・部分退避・stash branchまで現場目線で解説し、コピペで使えるチートシート表つき。ブックマークすれば退避に迷いません。frontendlab.magicgifted.com

まとめ

  • git worktree は 1 つのリポジトリから複数の作業ディレクトリを展開できる標準機能(Git 2.5 以降)
  • git worktree add -b <ブランチ> <パス> で追加、remove / prune で片付ける
  • AI コーディングエージェントの並列実行では、worktree でディレクトリを分離するのが定石
  • node_modules と .env は付いてこない。install とコピーを忘れずに
  • 同じブランチの二重チェックアウトは不可。worktree 削除とブランチ削除は別作業

ブランチ切り替えのたびに発生していた「stash して、install し直して、サーバを立ち上げ直す」時間は、worktree を使えばまるごと消せます。まずはレビュー用の worktree を 1 つ切るところから試してみてください。