9
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Git Worktreeで複数ブランチを同時に扱う

9
Last updated at Posted at 2025-11-05

はじめに

Git Worktreeは、1つのリポジトリで複数の作業ツリーを同時に管理できるGitの機能です。
従来のgit checkoutでブランチを切り替える方法とは異なり、複数のブランチを別々のディレクトリで同時に開くことができる代物です。

AIによるバックグラウンドエージェントを利用した開発をする際は、Git Worktreeが相性が良いとされており、Cursor2.0が出たことでより一層開発が行いやすくなったと感じています。

対象の読者

バックグラウンドエージェントを活用したいけどうまく活用できていないと悩んでいる方には読んでいただきたい内容となっています。

従来(git checkout)の課題

通常の開発フローでは、以下のような不便さがありました。

  • ブランチを切り替えるたびにgit checkoutが必要
  • 作業中のブランチで未コミットの変更がある場合、別ブランチに切り替えられない
  • ブランチ切り替え前にgit stashやgit commitをいちいち行う必要がある
  • 複数の機能を同時並行で開発する際に、ブランチの切り替えが頻繁で効率が悪い
  • レビュー中に別の緊急タスクが入った場合、現在の作業を中断する必要がある

Worktreeで解決できること

Git Worktreeを使うと、これらの課題を解決できます。

# メインの作業ディレクトリ
~/projects/myapp           # mainブランチ

# Worktreeで作成した別ディレクトリ
~/projects/myapp-feature-a # feature-aブランチ
~/projects/myapp-feature-b # feature-bブランチ
~/projects/myapp-hotfix    # hotfixブランチ

各ディレクトリは独立した作業ツリーを持ち、ブランチを切り替えることなく複数の作業を並行して進められます。

基本的な使い方

Worktreeの作成

# 新しいブランチを作成してworktreeを追加
git worktree add ../myapp-feature-a feature-a

# 既存のブランチでworktreeを追加
git worktree add ../myapp-hotfix hotfix

# 特定のコミットからworktreeを作成
git worktree add ../myapp-test abc1234

Worktreeの一覧表示

git worktree list

出力例:

/Users/username/projects/myapp           abc1234 [main]
/Users/username/projects/myapp-feature-a def5678 [feature-a]
/Users/username/projects/myapp-hotfix    ghi9012 [hotfix]

Worktreeの削除

# worktreeディレクトリを削除
rm -rf ../myapp-feature-a

# Git側の管理情報を削除
git worktree prune

# または一度に削除
git worktree remove ../myapp-feature-a

VSCodeでWorktreeを扱う

ただ、コマンドを覚えるのも大変なので、VSCodeの便利な拡張機能である、
Git Worktree Managerを利用すると便利です。

これは、VSCodeのUI上でGit Worktreeを簡単に管理できる専用の拡張機能です。
UI上で簡単に複数のworktree間を移動できるのが特に便利です。

AIエージェントを利用した開発にはGit Worktreeが適している

現代のAIエージェント(Cursor、GitHub Copilot、Claude Codeなど)を活用した開発では、Git Worktreeと相性が良いです。

AIエージェントの特性

  • 複数の AI エージェントが同時に作業することが一般的
  • 長時間実行されるタスク(大規模なリファクタリング、テスト生成など)が増加
  • 並列処理による効率化が開発速度の鍵となる

これらの特性により、ブランチ切り替え(git checkout) を頻繁に行う 事を考えると作業効率が悪いです。

# 従来の問題パターン
# AIと一緒に大規模リファクタリング中...
git checkout feature/refactoring  # 作業中

# 緊急バグ報告が入る
git checkout main                  # ❌ 問題発生!
# - AIのコンテキストがリセットされる
# - 未コミットの変更をstashする必要がある
# - リファクタリングの途中経過が失われる

Worktreeで解決:AIの作業を中断しない

# Worktreeを使った解決策
# AIと一緒に大規模リファクタリング中...
~/myapp-refactor (feature/refactoring)

# 緊急バグ報告が入る
git worktree add ../myapp-hotfix hotfix/critical-bug

# 既存のウィンドウを残した状態で新しいウィンドウでhotfixを開くことができる
# ✅ リファクタリングのコンテキストはそのまま保持
# ✅ AIは両方のブランチで独立して動作
# ✅ いつでも元の作業に戻れる

Cursor 2.0の登場

Cursor 2.0(AI統合エディタ)では、Git Worktreeを活用した開発がさらにスムーズになりました。

AgentsとEditorタブで画面切り替えを行うことができます。

スクリーンショット 2025-11-04 5.21.11.png

Agentsモードでは、まるでChatGPTやClaudeのブラウザ画面のようなUIで、タスクの依頼ができます。
Worktreeを選択した上でタスクを投げると新規ブランチが出来上がり、新しくセッションが立ち上がります。セッション内の画面にCreate PRボタンがあるのですが、それを押下するとPRが出されると同時にブランチが新規Worktreeに追加されるという流れになっているようです。

バックグラウンドエージェントを利用した開発がより便利に

特に意識せずとも自動的にWorktreeを用いた開発ができるようになったのと、
ローカルのエディタ上でセッションの切り替え(worktreeないしはbranchの切り替え)が簡単にできるようになったので、Devinのような体験がローカルのエディタ上でも行えるようになったと感じています。

また、エージェントが開発したソースコードの動作確認をローカル環境で迅速に行えるところにおいては、Devinよりもメリットがあるかもしれません(Devin machineの設定やれば良いのですが、何せ面倒ですからね..)

ローカルでも、互いに競合せずに並行タスクを進めやすくなったという点で便利になったと感じます。

注意点

同じブランチを複数のworktreeで開けない

git worktree add ../test1 feature-a  # OK
git worktree add ../test2 feature-a  # エラー!

同じブランチは同時に1つのworktreeでしかチェックアウトできません。

ディスク容量の考慮

各worktreeは独立した作業ツリーを持つため、プロジェクトのソースコードが複製されます(ただし.gitディレクトリは共有)。大規模プロジェクトでは注意が必要です。

まとめ

Git Worktreeを利用することで作業環境の切り替えをもっと楽にやっていきましょう!

参考リンク

9
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?