1つのブランチで新機能を作っている最中に、「このバグ、今日中に直して」と言われたことはありませんか?
stash → checkout → 修正 → commit → checkout → stash pop......。この一連の儀式、地味に面倒ですよね。作業中のファイルが多いと stash の衝突で余計な時間を取られることもあります。しかも stash を戻し忘れて「あれ、さっき書いたコードどこいった?」と焦った経験がある人も少なくないはず。
実は Claude Code には、この問題をきれいに解決する仕組みがあります。Git Worktrees(ワークツリー) との連携です。ワークツリーを使えば、複数のタスクをそれぞれ独立した作業ディレクトリで同時に進められます。つまり、stash も checkout も不要になります。
そもそも Git Worktree って何?
ふだんの Git は「1つのリポジトリに1つの作業ディレクトリ」が基本です。ブランチを切り替えるたびに、ファイルがまるごと書き換わります。
Git Worktree は、この制約を取り払う機能です。具体的には、同じリポジトリから複数の作業ディレクトリを作れるようになります。それぞれのディレクトリは独立したブランチを持ちつつ、コミット履歴やリモート接続は共有されます。
たとえば、こんな状態を作れます。
my-project/ ← メインの作業ディレクトリ(main ブランチ)
my-project/.claude/worktrees/
├── feature-auth/ ← 認証機能の開発(feature-auth ブランチ)
└── bugfix-cart/ ← カート画面のバグ修正(bugfix-cart ブランチ)
各ディレクトリは完全に独立しているので、片方で npm install してもう片方に影響することはありません。これが並列開発の土台になります。
Before / After:stash 地獄 vs ワークツリー
ワークツリーのありがたみを理解するために、従来のやり方と比べてみましょう。
Before:stash ワークフロー
認証機能を実装中に、決済画面の緊急バグ修正が入ったケースです。
# 1. 作業中のファイルを退避
git stash push -m "feature-auth WIP"
# 2. ブランチを切り替え
git checkout main
git checkout -b bugfix-payment
# 3. バグ修正 → コミット → PR
# ...修正作業...
git commit -m "fix: payment validation"
gh pr create
# 4. 元のブランチに戻る
git checkout feature-auth
# 5. stash を戻す(ここで衝突すると地獄)
git stash pop
ステップ5で「Merge conflict in stash」と言われた瞬間、集中力が吹き飛びますよね。
After:ワークツリーフロー
同じ状況を、ワークツリーで解決します。
# 別のターミナルを開いて、これだけ
claude --worktree bugfix-payment
認証機能の作業はそのまま。バグ修正は独立したディレクトリで始まります。メインの作業を中断する必要がないので、stash も checkout も衝突もありません。修正が終わったら PR を作って、ワークツリーを閉じるだけです。
Claude Code でのワークツリーの使い方
Claude Code では --worktree(短縮形は -w)フラグを付けて起動するだけで、ワークツリーの作成からブランチの設定まで自動でやってくれます。
基本の起動方法
# "feature-auth" という名前でワークツリーを作成して Claude を起動
claude --worktree feature-auth
# 別のターミナルで、もう1つワークツリーを作成
claude --worktree bugfix-cart
これだけで .claude/worktrees/feature-auth/ と .claude/worktrees/bugfix-cart/ にそれぞれ独立した作業ディレクトリが作られ、ブランチも worktree-feature-auth のように自動で作成されます。
名前を省略すると、ランダムな名前が自動生成されます。
# "bright-running-fox" のようなランダム名が付く
claude --worktree
ちなみに、セッション中に「ワークツリーで作業して」と日本語で頼んでも、Claude が自動でワークツリーを作ってくれます。
終了時のクリーンアップ
ワークツリーのセッションを終了すると、Claude が状態に応じて後片付けしてくれます。
- 変更がない場合 → ワークツリーとブランチが自動で削除される
- 変更やコミットがある場合 → 残すか削除するか聞いてくれる
つまり、使い捨てのワークツリーを気軽に作っても、ゴミが溜まる心配がありません。
Tip:
.gitignoreに.claude/worktrees/を追加しておくと、ワークツリーの中身がメインリポジトリのgit statusに表示されなくなります。
実践:3つのユースケース
ワークツリーが活きる代表的なシーンを3つ紹介します。
ユースケース 1:機能開発中のホットフィックス
これは一番よくあるパターンです。さきほどの Before / After で見た通り、claude -w bugfix-xxx で別ターミナルに修正用のワークツリーを立ち上げるだけ。メインの開発を止める必要がありません。
# ターミナル 1:機能開発を続行中
claude -w feature-auth -n "認証機能の開発"
# ターミナル 2:ホットフィックス
claude -w hotfix-payment -n "決済バグ修正"
-n でセッションに名前を付けておくと、あとから /resume で探すときに便利です。
それぞれのワークツリーで Claude に指示を出せば、あとは並行して作業が進みます。
ターミナル 1(認証機能):
OAuth2 のログインフローを実装して。
Google と GitHub プロバイダーに対応させて。