「新機能の実装とバグ修正を同時に進めたい」「Claudeに2つのタスクを並行して任せたい」しかし通常のgit操作では、同じリポジトリで複数のブランチを同時に使うことはできません。git stashやgit checkoutでの切り替えは作業の中断を強いられます。
これを解決するのがClaude Code のWorktree機能です。claude --worktree 名前と入力すると、同じリポジトリの別のディレクトリに独立したブランチと作業環境が作られます。複数のターミナルでそれぞれ別のWorktreeを開き、ファイル競合ゼロで並行して作業できます。
この記事では、Worktreeの仕組みから実践的な並行開発パターン、SubagentとのWorktree隔離まで解説します。Claude Code全般の基礎はClaude Code完全ガイドを参照してください。
Worktreeとは何か:git worktreeの仕組み
Claude CodeのWorktree機能は、Gitのgit worktreeコマンドを活用しています。通常のgit操作では、1つのリポジトリに対して1つの作業ディレクトリしか持てません。git worktreeを使うと、同じ.gitディレクトリを共有しながら複数の作業ディレクトリをそれぞれ別のブランチで同時に使えるようになります。
| 比較項目 | 通常のgit操作 | git worktree(Claude Code Worktree) |
|---|---|---|
| 並行ブランチ数 | 1つのみ(checkout で切り替え) | 制限なし(各worktreeが独立) |
| ファイル競合 | stash が必要 | ゼロ(物理的に別ディレクトリ) |
| .gitディレクトリ | 1つ | 共有(全worktreeが同じ .git を参照) |
| Claude Codeセッション | 1つ | 各worktreeで独立したセッション |
| 作業の切り替え | checkout(現在の変更が消える) | ターミナルを切り替えるだけ |
- ターミナルAで新機能を実装しながら、ターミナルBでバグ修正を同時進行
- Claude Codeに複数のタスクを並行して任せて待ち時間ゼロ
- 実験的な変更を試しながらメインブランチの作業は汚染しない
- SubagentをWorktree隔離で実行してメインコードに影響なく検証
–worktreeフラグの基本的な使い方
Worktreeを作成して起動する
# 名前を指定してWorktreeを作成 claude --worktree feature-auth # 短縮フラグ(-w)も使える claude -w bugfix-login # 名前を省略すると自動生成(例: bright-running-fox) claude --worktree
claude --worktree feature-authを実行すると、以下が自動で行われます。
- リポジトリルートの
.claude/worktrees/feature-auth/ディレクトリを作成 worktree-feature-authという名前のブランチを作成(デフォルトブランチから分岐)- そのWorktreeディレクトリでClaude Codeセッションを起動
Worktreeのディレクトリ構造
my-project/ ├── .git/ ← すべてのworktreeが共有するgit管理 │ └── worktrees/ │ └── feature-auth/ ← git内部のworktree管理ファイル ├── .claude/ │ └── worktrees/ │ └── feature-auth/ ← Claude Codeの作業ディレクトリ(ここで作業) │ ├── src/ ← リポジトリのファイルが展開される │ ├── package.json │ └── ... ├── src/ ← メインブランチの作業ディレクトリ(変更されない) ├── package.json └── ...
Worktreeの作業ディレクトリはgit管理に含めないようにしましょう。
.gitignoreに.claude/worktrees/を追加してください。追加しないと、worktree内のファイルがgit statusに現れて混乱の原因になります。echo ".claude/worktrees/" >> .gitignore
ブランチの自動管理と命名規則
Worktreeを作成すると、ブランチ名は自動で決まります。--worktreeフラグに渡した名前の前にworktree-が付きます。
| コマンド | 作業ディレクトリ | 作成されるブランチ名 |
|---|---|---|
claude --worktree feature-auth |
.claude/worktrees/feature-auth/ |
worktree-feature-auth |
claude --worktree bugfix-123 |
.claude/worktrees/bugfix-123/ |
worktree-bugfix-123 |
claude -w payment-refactor |
.claude/worktrees/payment-refactor/ |
worktree-payment-refactor |
作成されたブランチはデフォルトブランチ(通常はmainまたはmaster)から分岐します。Worktree内でのすべてのコミットはこのブランチに積まれるため、メインブランチには影響しません。
セッション終了時の自動クリーンアップ
Worktreeのセッションを終了すると、変更の有無によって動作が変わります。
| 状態 | 動作 | ファイル・ブランチ |
|---|---|---|
| 変更なし(コミット・ステージングなし) | Worktreeとブランチを自動削除 | 跡形なくクリーンアップ |
| 変更あり(コミット済みまたは未コミットの変更) | keep / remove をユーザーに選択させる | keepを選ぶと保存、removeを選ぶと削除 |
# Worktreeセッションでコミットあり → 終了時に選択肢が表示される # Claude Code: # "The worktree has changes. Would you like to keep or remove it?" # > keep → .claude/worktrees/feature-auth/ とブランチ worktree-feature-auth が保存される # > remove → 両方削除(変更は失われる) # keepした場合: 後からマージする git merge worktree-feature-auth # keepした場合: PRを作成する gh pr create --head worktree-feature-auth --title "feature: ログイン認証機能の追加"
keepしたWorktreeは後から
claude --resumeでセッションを再開できます。同じgitリポジトリ内の全Worktreeセッションが選択肢として表示されます。複数ターミナルで並行開発する
Worktreeの真価は複数のターミナルで同時に動かすことで発揮されます。各ターミナルが独立したディレクトリ・ブランチ・セッションを持つため、お互いに干渉しません。
# ターミナル1: メインブランチで通常作業 claude # ターミナル2: ログイン機能の実装(新しいWorktreeで) claude --worktree feature-login # ターミナル3: ダッシュボードのUIバグ修正(別のWorktreeで) claude --worktree bugfix-dashboard # 各ターミナルで独立して作業できる # → ターミナル2のファイル変更がターミナル1やターミナル3に影響しない
tmuxと組み合わせる
--tmuxオプションを使うと、Worktreeを独立したtmuxセッションとして起動できます。ターミナルを複数開かなくても、tmuxのウィンドウ・ペインで並行作業を管理できます。macOSのiTerm2を使っている場合は、iTerm2のネイティブペインが自動的に使われます。従来のtmuxを使いたい場合は--tmux=classicを指定してください。
# Worktreeをtmuxセッションとして起動(iTerm2がある場合はネイティブペインを使用) claude --worktree feature-auth --tmux # 従来のtmuxを使いたい場合 claude --worktree feature-auth --tmux=classic # tmuxの基本操作(参考) # Ctrl+B → c: 新しいウィンドウ(タブ)を作成 # Ctrl+B → n: 次のウィンドウへ移動 # Ctrl+B → 数字: 指定番号のウィンドウへ移動
SubagentのWorktree隔離(isolation: worktree)
SubagentにWorktreeを割り当てると、Subagentが行う変更をメインの作業ディレクトリから完全に隔離できます。実験的なコード生成や大規模な変更をSubagentにさせるとき、メインコードが汚染される心配がありません。
Subagent定義でisolation: worktreeを指定する
--- name: experimental-refactor description: 実験的なリファクタリングを隔離されたWorktreeで実行する isolation: worktree --- あなたはリファクタリング専門のエージェントです。 与えられたコードを現代的なパターンに書き直してください。 実験的な変更を行うため、このWorktreeの変更がメインブランチに 影響しないことを前提として自由に変更してください。 変更後は必ず: 1. テストを実行して動作確認する 2. 変更内容のサマリーを作成する 3. 本採用すべき変更と、実験的すぎて採用しない変更を分類する
このSubagentを呼び出すと、自動的に新しいWorktreeが作成されてその中で実行されます。Subagent終了時は通常のWorktreeと同じクリーンアップ動作(変更なし→自動削除、変更あり→選択)が行われます。Subagentsの詳細な定義方法はClaude Code Subagents完全ガイドを参照してください。
Worktree隔離が特に有効なSubagentの例
| Subagentの役割 | Worktree隔離が有効な理由 |
|---|---|
| 大規模リファクタリング | メインコードを壊さずに変換を試せる。結果を見てから採用を判断できる |
| 依存パッケージの更新 | package.jsonやlock fileの変更を隔離。テストが通るか確認してからマージ |
| コード生成・プロトタイプ | 大量のファイル生成がメインブランチを汚染しない |
| 破壊的変更のテスト | APIの互換性を壊す変更を安全に実験できる |
実践的な並行開発ワークフロー
新機能とバグ修正を同時進行する
# ── セットアップ ────────────────────────────────── # .gitignoreにWorktreeディレクトリを追加(初回のみ) echo ".claude/worktrees/" >> .gitignore # ── ターミナル1: 新機能の実装 ───────────────────── claude --worktree feature-payment # Worktree内でClaudeに指示 > 決済フローにStripe決済を追加してください。 > src/services/payment.ts を新規作成して、 > src/routes/checkout.ts から呼び出す実装にしてください。 # ── ターミナル2: バグ修正(別ターミナル)────────── claude --worktree bugfix-cart-total > カート合計金額の計算がおかしい。 > src/utils/cart.ts の computeTotal() 関数を調べて修正してください。 > テストも更新してください。 # ── 作業完了後: それぞれをPR化 ─────────────────── # ターミナル1で git push origin worktree-feature-payment gh pr create --head worktree-feature-payment # ターミナル2で git push origin worktree-bugfix-cart-total gh pr create --head worktree-bugfix-cart-total
Plan Modeを組み合わせてレビューしながら並行実装する
Plan ModeとWorktreeを組み合わせると、「メインセッションで計画を作り、Worktreeセッションで実装する」という安全な開発フローが組めます。
# ── ターミナル1: メインセッションで計画(Plan Mode)── claude /plan > src/ 全体を読んで、認証システムをJWTからセッションベースに移行する計画を作ってください。 > 影響するファイルと変更順序を詳しく教えてください。(変更はしないでください) # 計画を確認・承認 # ── ターミナル2: Worktreeで実装開始 ────────────────── claude --worktree auth-migration > 今から認証システムをJWTからセッションベースに移行します。 > まずsrc/middleware/auth.ts を修正してください。
手動git worktreeとの使い分け
claude --worktreeは内部でgitのgit worktree addを呼び出しています。Claude Codeのフラグを使わずに手動でgit worktreeを作成して、その中でClaudeを起動することもできます。既存のブランチをWorktreeとして使いたい場合などに有効です。
# 既存ブランチをWorktreeに追加 git worktree add .claude/worktrees/existing-feature existing-feature-branch # Worktreeのディレクトリでclaude起動 cd .claude/worktrees/existing-feature claude # 作業完了後: Worktreeを削除 cd ../../.. git worktree remove .claude/worktrees/existing-feature # 全Worktreeの一覧を確認 git worktree list
| 方法 | 向いているシーン | 特徴 |
|---|---|---|
claude --worktree 名前 |
新しいタスクを新ブランチで始めるとき | ブランチ自動作成・自動クリーンアップ |
手動git worktree add |
既存ブランチをWorktreeとして使いたいとき | ブランチ名・ディレクトリ名を自由に指定できる |
まとめ
Claude CodeのWorktree機能を使うと、claude --worktree 名前の一行で独立したブランチ・作業ディレクトリ・Claudeセッションが立ち上がります。複数のターミナルで並行して作業してもファイルが競合することはなく、終了時は変更の有無によって自動でクリーンアップされます。
SubagentのWorktree隔離(isolation: worktree)を使えば、大規模リファクタリング・実験的な変更・依存関係の更新をメインコードを汚染せずに安全に試せます。
.claude/worktrees/を.gitignoreに追加することを忘れずに。この一行でWorktreeの管理がぐっとクリーンになります。
よくある質問
QWorktreeのブランチ名は自分で決められますか?
Aできません。--worktreeフラグに渡した名前の前にworktree-が自動で付きます。例えばclaude --worktree feature-authだとworktree-feature-authというブランチが作られます。ブランチ名を自由に指定したい場合は、手動でgit worktree addを使ってからそのディレクトリでclaudeを起動してください。
QWorktree内でgit commitしたらどこに記録されますか?
AそのWorktreeに対応するブランチ(例: worktree-feature-auth)にコミットされます。メインブランチ(main/master)には影響しません。作業後にPRを作成するかgit mergeすることで、メインブランチに取り込めます。
QWorktreeを使っていると.gitリポジトリが壊れることはありますか?
Agit worktreeはGit公式の機能で、安全に設計されています。同じ.gitを共有していますが、各Worktreeが独立したindex(ステージング状態)を持つため、ある作業ディレクトリの変更が別のWorktreeに影響することはありません。念のためgit worktree listで定期的に確認することを推奨します。
QWorktreeを削除したいのですが、どうすればいいですか?
AClaude Codeのセッション終了時に「remove」を選択するか、セッション外からgit worktree remove .claude/worktrees/feature-authで削除できます。git worktree listで残っているWorktreeを確認して、不要なものは定期的に削除しておきましょう。
Q何個まで並行してWorktreeを使えますか?
Agitの制限上、上限は設けられていません。ただし各Worktreeがファイルシステム上にコピーを持つため、ディスク容量に注意してください。実用的には3〜5個程度が管理しやすい上限です。それ以上を同時に扱う場合はSubagentsの並列実行(isolation: worktree)の方が管理しやすくなります。
QWindowsでもWorktreeは使えますか?
Aはい、Windows版のClaude CodeとGitでも動作します。ただし--tmuxオプションはtmuxが必要なため、Windowsでは利用できません(WSL2環境を除く)。Windowsで複数セッションを並行させる場合は、通常のコマンドプロンプト・PowerShellを複数開いて、それぞれでclaude --worktreeを実行してください。

