はじめに
「メイン機能の開発中に、急ぎのバグ修正を頼まれた…」
「複数のプルリクエストをレビューしたいけど、いちいちブランチを切り替えるのが面倒…」
開発者であれば、誰もが一度は経験するこんな状況。これまでの私は、git stash
を駆使して変更を一時退避させたり、git checkout
を繰り返してブランチ間を行き来したりすることで、なんとか対応してきました。しかし、この方法は手間がかかるだけでなく、コンフリクトやstash
の管理ミスといったリスクも伴います。
もし、現在の作業を一切中断することなく、完全に独立した別の作業環境を瞬時に用意できるとしたら、どうでしょうか?
そんな方法があることを知りました、それが今回ご紹介する git worktree
です。
さらに、この記事では git worktree
の基本的な使い方に留まらず、Anthropic社のClaude CodeのようなAIコーディングアシスタントと組み合わせることで、開発体験がどのように革命的に向上するのか、具体的な「並列AI駆動開発」ワークフローまで踏み込んで解説します。
この記事を読み終える頃には、あなたの開発ワークフローはよりスマートで、ストレスフリーなものになっているはずです。
前提・環境
この記事は、以下の環境を前提としています。
-
Git: バージョン 2.5.0 以上 (
git worktree
が導入されたバージョンです) - AIアシスタント: Claude Code などの対話型AIコーディングアシスタントが利用できると、より本記事の内容を実感できます。
git worktree
とは? 魔法の扉を開こう
git worktree
は、1つのGitリポジトリから、複数のワーキングツリー(作業ディレクトリ)を同時に、かつ安全に作成・管理できる機能です。
「え、git clone
を複数回やるのと何が違うの?」と思うかもしれませんが、git worktree
は全く異なります。clone
がリポジトリ全体を複製するのに対し、 worktree
は.git
ディレクトリ(リポジトリの本体)は一つだけ共有し、作業用のディレクトリだけを複数作成します。
これにより、ディスク容量を節約できるだけでなく、すべての作業が単一のリポジトリに紐づくため、管理が非常にシンプルになります。
基本的なコマンド
使い方はとても簡単です。主に使うコマンドは3つだけです。
-
add
: 新しいワークツリーを作成します。 -
list
: 現在のワークツリーの一覧を表示します。 -
remove
: 不要になったワークツリーを削除します。
例: 新しいワークツリーを作成する
main
ブランチで作業中に、hotfix/critical-bug
という名前で緊急のバグ修正用ブランチを切り、hotfix-worktree
というディレクトリで作業したい場合、以下のコマンドを実行します。
# -b オプションで新しいブランチを作成し、それをチェックアウトした状態でワークツリーを追加
git worktree add ../hotfix-worktree -b hotfix/critical-bug
これだけで、元のディレクトリの隣に hotfix-worktree
という新しい作業ディレクトリが作成されます。あとはcd ../hotfix-worktree
で移動し、お好きなエディタで開くだけです。
実践!git worktree
ワークフロー
言葉だけでは分かりにくいので、具体的なシナリオを見ていきましょう。
シナリオ1: 機能開発中の緊急ホットフィックス
あなたは今、feature/awesome-func
ブランチで新機能の開発に集中しています。
# 現在の状況
/path/to/my-project (feature/awesome-func) $
そこへ、本番環境で発生した緊急バグの修正依頼が舞い込んできました。さあ、git worktree
の出番です。
# 1. 'hotfix/fix-login-bug'ブランチ用のワークツリーを ../hotfix-dir に作成
/path/to/my-project $ git worktree add ../hotfix-dir -b hotfix/fix-login-bug
# 2. 作成されたディレクトリに移動
/path/to/my-project $ cd ../hotfix-dir
# 3. ホットフィックス用のディレクトリにいることを確認
/path/to/hotfix-dir (hotfix/fix-login-bug) $
# 4. ここでバグ修正作業に集中...
# ...修正が完了し、コミット、プッシュ、PR作成
/path/to/hotfix-dir $ git commit -am "Fix: login bug"
/path/to/hotfix-dir $ git push origin hotfix/fix-login-bug
# 5. 元の作業ディレクトリに戻る
/path/to/hotfix-dir $ cd ../my-project
# 6. 何事もなかったかのように新機能開発を再開
/path/to/my-project (feature/awesome-func) $
どうでしょうか? stash
もcheckout
も一切使わずに、安全かつスムーズにコンテキストを切り替えられました。修正が終わったら、不要になったワークツリーは簡単に削除できます。
# 後片付け
git worktree remove ../hotfix-dir
シナリオ2: 複数ブランチの並行レビュー
チームメンバーから2つのプルリクエストのレビュー依頼が来ました。worktree
を使えば、これも簡単です。
# PR-1用のワークツリーを作成
git worktree add ../review/pr-1 pr-branch-1
# PR-2用のワークツリーを作成
git worktree add ../review/pr-2 pr-branch-2
これで、それぞれのPRを別のエディタウィンドウで開き、じっくり比較しながらレビューを進めることができます。
git worktree
x Claude Code
= 開発体験の革命
さて、ここからが本題です。なぜgit worktree
が、ClaudeのようなAIアシスタントと驚くほど相性が良いのでしょうか?
その答えは 「コンテキストの物理的な分離」 にあります。
Claudeを使った開発は、特定のタスクについてAIと対話を続けるスタイルが基本です。しかし、複数のタスクを並行して進めようとすると、一つのチャット画面で話題が混ざってしまい、AIも自分も混乱してしまいます。
git worktree
は、この問題を完璧に解決します。
「並列AI駆動開発」の具体的なワークフロー
想像してみてください。あなたは今、2つのタスクを抱えています。
-
タスクA: 新しいAPIエンドポイントの実装 (
feature/new-api
) -
タスクB: 既存モジュールのリファクタリング (
feature/refactor-module
)
git worktree
を使えば、以下のような未来的な開発フローが実現します。
-
ワークツリーの準備:
# タスクA用のワークツリー git worktree add ../task-A-api -b feature/new-api # タスクB用のワークツリー git worktree add ../task-B-refactor -b feature/refactor-module
-
IDEとターミナルを分離:
- VSCodeのウィンドウを2つ開きます。一つは
task-A-api
を、もう一つはtask-B-refactor
を開きます。 - それぞれのウィンドウで、統合ターミナルを開きます。
- VSCodeのウィンドウを2つ開きます。一つは
-
並列AIセッションの開始:
-
ターミナルA (
task-A-api
):claude > 新しいAPIエンドポイントを設計してください。仕様は...
-
ターミナルB (
task-B-refactor
):claude > legacy-module.js をリファクタリングしたい。まずは現状のコードの問題点を洗い出して。
-
ターミナルA (
-
待ち時間をゼロにする:
- ターミナルAでClaudeがAPIのコードを生成している間、あなたはその応答を待つ必要はありません。
- すぐにターミナルBのウィンドウに切り替え、リファクタリングに関する対話を進めます。
- ターミナルBでAIの思考中に、ターミナルAでコード生成が終わっていれば、そちらに戻って実装の続きを行う...
このように、git worktree
によって物理的に分離された環境が、複数の独立したAIコンテキストを同時に維持することを可能にします。これにより、AIの応答待ちというデッドタイムを限りなくゼロに近づけ、開発者の思考の流れを止めることなく、複数のタスクをスムーズに並行処理できるのです。
まとめ
git worktree
は、単なる便利なGitコマンドではありません。それは、現代の複雑な開発要求と、AIアシスタントの登場によって変化する新しい開発スタイルに対応するための、必須のツールです。
- コンテキストスイッチのコストを劇的に削減
- 安全でクリーンな並列作業環境を提供
- ClaudeのようなAIアシスタントとの組み合わせで、生産性を飛躍的に向上させる
もしあなたがまだgit stash
やcheckout
で消耗しているなら、ぜひこの記事をきっかけにgit worktree
を試してみてください。きっと、あなたの開発ライフはもっと快適で創造的なものになるはずです。