Claude Code worktreeとは?使い方・設定・片付け方を解説
この記事でわかること
- worktreeの仕組みと、サブエージェント・エージェントビュー・Agent Teamsとの違い
- claude --worktree の始め方と、作られる場所・ブランチ名
- 終了時の片付け(自動で消える場合・残す場合)と、作業の再開のしかた
- ブランチの起点・.worktreeinclude・symlinkDirectoriesなどの設定
- サブエージェント・バックグラウンドセッション・デスクトップアプリでの使い方
- うまく動かないときの原因と対処
目次
- worktreeとは
- 他の並列の仕組みとの違い
- worktreeが向いている場面
- worktreeの使い方
- 最初の1回の手順
- 作られる場所とブランチ名
- worktreeの中の準備
- 会話の途中で「worktreeで作業して」と頼む
- プルリクエストの内容から始める
- tmuxと一緒に使う
- 片付け・再開
- 残したworktreeで作業を再開する
- 同じ名前をもう一度使ったとき
- 非対話モード(-p)で動かしたとき
- Windowsでのリンクの扱い
- 設定のしかた
- ブランチの起点を決める(baseRef)
- .envなどの設定ファイルをコピーする(.worktreeinclude)
- 大きなフォルダの扱い(symlinkDirectories・sparsePaths)
- worktreeと元のフォルダで共有されるもの
- サブエージェント・デスクトップでの使い方
- サブエージェントを専用のworktreeで動かす
- バックグラウンドのセッション
- /batchで大きな変更を分担する
- デスクトップアプリで使う
- Gitのコマンドで手動で作る
- Git以外のバージョン管理を使っている場合
- 注意点・困ったとき
- 使用量は並列の数だけ増える
- worktreeの外には書き込めない
- 症状と対処
- 会社で使うときに決めておくこと
- よくある質問
- まとめ
「Claude Codeに機能の追加を頼んでいる間に、別の不具合も直してもらいたい」「2つのClaudeに同じフォルダで作業させたら、ファイルが混ざってしまった」という場面は、使い込むほど増えてきます。
こうした場面で使うのがworktree(ワークツリー)です。同じプロジェクトを、別のフォルダ・別のブランチ(変更を分けて進めるための枝)としてもう1つ取り出し、そこでClaudeに作業させます。作業場所が分かれるので、並行して頼んでも、お互いの編集が混ざりません。Claude Codeでは、起動時に --worktree と名前を付けるだけで使えます。
この記事では、worktreeの仕組みと他の並列の仕組みとの違いから、始め方、終了時の片付け、設定、サブエージェントやデスクトップアプリでの使い方、うまく動かないときの対処までを順に解説します。内容は2026年10月時点の公式ドキュメントをもとにしています。Claude Codeは更新が頻繁なので、使う前に公式ドキュメントもあわせて確認してください。
worktreeとは

worktreeは、もともとバージョン管理の仕組み「Git」の機能です。公式ドキュメントでは、自分専用のファイルとブランチを持つ別の作業フォルダで、変更履歴とリモート(GitHubなどの保管先)は元のフォルダと共有するものと説明されています。
ふつうは、プロジェクトのフォルダが1つあり、そこで作業するのは1回に1つの仕事だけです。worktreeを使うと、同じプロジェクトを別のフォルダにもう1つ取り出せます。たとえば、1つ目では新機能を作り、2つ目では不具合の修正を進める、という分け方ができます。
Claude Codeは、並行して頼まれた仕事が同じファイルを触ると、お互いの変更を上書きしたり、作りかけの状態を読み込んだりしてしまいます。Claudeのセッションごとにworktreeを分けておけば、各セッションが自分専用のコピーを編集するので、こうした混線を防げます。
| worktreeを使わない場合 | worktreeを使う場合 | |
|---|---|---|
| 作業するフォルダ | 1つのフォルダを全員で共有する | セッションごとに別のフォルダ |
| ブランチ | 1つのブランチに変更が混ざる | セッションごとに別のブランチ |
| 編集の衝突 | 同じファイルを同時に触ると、上書きや混線が起きる | お互いの編集は見えない。統合するときに初めて突き合わせる |
| 変更履歴 | 共有 | 共有(元のプロジェクトと同じ履歴・リモート) |
| 準備の手間 | なし | 依存ファイルの再インストールなど、環境の準備が必要になることがある |
他の並列の仕組みとの違い
Claude Codeには、複数の仕事を同時に進める仕組みがいくつかあります。worktreeは、その中で「ファイルの編集を分ける」ことだけを担当する部品です。公式ドキュメントでも、worktreeは並列に動かす方法そのものではなく、それを支える道具として整理されています。
| 仕組み | 何をするものか | worktreeとの関係 |
|---|---|---|
| worktree | セッションごとに別のチェックアウト(作業用のコピー)を用意し、編集を分ける | この記事の主役 |
| サブエージェント | 1つのセッションの中で、調査などの副作業を別のClaudeに任せ、要約だけを受け取る | 各サブエージェントに専用のworktreeを持たせることもできる |
| エージェントビュー | バックグラウンドで動くセッションを1画面で依頼・確認する(研究プレビュー)。claude agentsで開く | ここから依頼したセッションは、編集の前に自動でworktreeへ移る |
| Agent Teams | リーダーのClaudeが、複数のセッションを分担させて進める(試験的機能。初期状態では無効) | メンバーはworktreeで分けられない。担当するファイルを分けて衝突を避ける |
つまり、自分でターミナルを複数開いて、それぞれにClaudeを動かす使い方では、worktreeが主役になります。サブエージェントやエージェントビューを使う場合は、裏側でworktreeが使われます。
worktreeが向いている場面
| 場面 | 向き・不向き | 理由 |
|---|---|---|
| 機能追加を頼みながら、別の不具合も直したい | 向いている | 別々のブランチで進められ、片方が失敗してももう一方に影響しない |
| 同じ課題に、2通りのやり方を試させたい | 向いている | 結果を見比べて、良い方だけを採用できる |
| 本番に近い状態を壊したくない実験 | 向いている | 気に入らなければ、worktreeごと捨てられる |
| 1つの作業を最初から最後まで順番に進める | 不要 | ふつうのフォルダで作業すれば足りる |
| 同じファイルの同じ箇所を、両方のセッションで変えたい | 向かない | 編集は分かれるが、あとで統合するときに衝突する。担当する範囲を分けておく |
なお、worktreeを使うにはGitが入っていて、プロジェクトがGitで管理されている必要があります。Git以外のバージョン管理を使っている場合は、後述するフックの設定が必要です。
worktreeの使い方

基本の使い方は、1つのコマンドです。--worktree(短く書く場合は-w)に名前を付けてClaude Codeを起動します。
claude --worktree feature-auth
これで、feature-authという名前のworktreeが作られ、その中でClaudeが起動します。別のターミナルで、別の名前を付けて同じコマンドを実行すれば、2つ目の独立したセッションが始まります。
最初の1回の手順
- プロジェクトのフォルダに移動するGitで管理しているプロジェクトのフォルダを、ターミナルで開きます。そのプロジェクトで初めてClaude Codeを使う場合は、先に
claudeだけを一度起動して、フォルダを信頼するかの確認に答えておきます。確認が済んでいないと、--worktreeはエラーで終了します。 - 名前を付けて起動する
claude --worktree 名前を実行します。名前は作業内容が分かるものにします(例:feature-auth、fix-login)。名前を省略すると、bright-running-foxのような名前が自動で付きます。 - Claudeに作業を頼む通常のセッションと同じように依頼を書きます。ファイルの編集は、このworktreeの中だけで行われます。
- 別の作業は、別のターミナルで始める2つ目のターミナルを開き、別の名前で
claude --worktreeを実行します。2つのセッションは互いのファイルに触れません。 - 終了して、片付けを選ぶ作業が終わったらセッションを終了します。worktreeを残すか消すかは、次の章で説明する条件に応じて決まります。
コミットが1つもないプロジェクトでは使えない
worktreeは、既存のコミット(変更の記録)から作られます。git initしただけでコミットがない状態で実行すると、Failed to resolve base branch "HEAD": git rev-parse failedというエラーで失敗します。最初のコミットを作ってから実行してください。
作られる場所とブランチ名
| 項目 | 既定の動き |
|---|---|
| フォルダの場所 | プロジェクトのルート直下の .claude/worktrees/名前/ |
| ブランチ名 | worktree-名前(新しく作られる) |
| 名前を省略したとき | Claude Codeが自動で名前を付ける(例:bright-running-fox) |
| 同じ名前で再実行したとき | すでにあるworktreeを開く(新しくは作らない) |
Windowsでも考え方は同じで、プロジェクトの .claude\worktrees\ の下に作られます。
.gitignoreに追記しておく
worktreeの中身が、元のプロジェクトで「未追跡のファイル」として表示されないように、.claude/worktrees/を.gitignoreに追加しておくと安心です。公式ドキュメントでもこの設定が勧められています。
worktreeの中の準備
worktreeは新しいチェックアウトなので、元のフォルダにある依存ファイル(node_modulesなど)や、Gitに入れていない設定ファイル(.envなど)は入っていません。Claudeに「依存関係をインストールして」と頼むか、worktreeのフォルダでプロジェクトのセットアップ手順を自分で実行します。毎回コピーしたいファイルがある場合は、後述する.worktreeincludeに書いておけます。
会話の途中で「worktreeで作業して」と頼む
起動時に指定しなくても、セッションの途中でClaudeに「worktreeで作業して」と頼めば、ClaudeがEnterWorktreeというツールを使って作ってくれます。worktreeの中にいる間は、.claude/worktrees/の下にある別のworktreeへ切り替えることもでき、前のworktreeはそのまま残ります。
切り替え先が.claude/worktrees/の外にある場合は、Claude Codeが事前に承認を求めます。作業フォルダ・書き込み権限・CLAUDE.mdや設定が、その場所に移るためです。この確認は、権限ルールの設定や「今後は確認しない」を選んでも省略できません。
プルリクエストの内容から始める
レビューや修正のために、特定のプルリクエスト(変更の提案)の状態から始めたいときは、--worktreeに番号を渡します。#はシェルでコメントの開始と解釈されるので、引用符で囲みます。
claude --worktree "#1234"
GitHubのプルリクエストのURL、GitLabのマージリクエストのURLも指定できます。Claude Codeが、そのプルリクエストの最新の状態をoriginから取得し、.claude/worktrees/pr-1234のような名前でworktreeを作ります。GitLabのマージリクエストを使うにはClaude Code v2.1.233以降が必要です。取得の際にパスワードやパスフレーズの入力が必要になる場合は、取得が失敗してエラーで終了します。SSHの鍵はあらかじめssh-agentに読み込んでおいてください。
tmuxと一緒に使う
ターミナルの分割ツール「tmux」を使っている場合は、--tmuxを付けると、worktree用のtmuxセッションが作られます。--worktreeと一緒に指定する必要があります。
claude -w feature-auth --tmux
iTerm2が使える環境では、iTerm2のネイティブなペインが使われます。従来のtmuxを使いたい場合は--tmux=classicを指定します。
片付け・再開

worktreeは作りっぱなしにするとフォルダが増えていきます。Claude Codeは、セッションを終了するときに、worktreeの中に消すと失われる作業(変更したファイル、新しいファイル、新しいコミット)があるかを確認し、その結果に応じて動きます。
| 終了時のworktreeの状態 | Claude Codeの動き |
|---|---|
| 変更がない・名前を付けずに始めた | worktreeとブランチを自動で削除する |
| 変更がない・名前を付けて始めた | 残すかどうかを確認する |
| 作業(変更・新しいファイル・新しいコミット)がある | 残すか削除するかを確認する。残すとフォルダとブランチが残り、削除すると作業ごと消える |
| 状態を確認できなかった | 自動では削除せず、確認できなかった内容を示して確認する |
「削除する」を選ぶと、作業も消える
作業のあるworktreeを「削除する」と、フォルダだけでなくブランチも消え、その中の作業は元に戻せない場合があります。コミットしたものも、別の場所へ送って(プッシュして)いなければ失われます。迷ったときは残しておき、あとから確認する方が安全です。
残したworktreeで作業を再開する
worktreeを残して終了すると、Claude Codeが再開用のコマンドを表示します。次のような形で、同じworktreeに戻れます。
claude --worktree feature-auth --resume
worktreeの中で終了した(片付けを選ばずに閉じた)セッションを再開した場合は、Claude Codeが自動でそのworktreeに戻します。元のプロジェクトのフォルダなど、worktreeの外から--resumeを実行する方法でも戻れます。一方、worktreeのフォルダ自体がすでに削除されている場合は、起動したフォルダでセッションが再開され、worktreeがなくなったことが表示されます。
同じ名前をもう一度使ったとき
すでにあるworktreeと同じ名前を指定すると、新しいworktreeは作られず、既存のものが開かれます。このとき、起点が既定の"fresh"の場合は、次の条件がすべて当てはまると、前回の続きではなくリポジトリの既定ブランチの状態にリセットされます。
- 未コミットの変更や未追跡のファイルがない
- Claude Codeが作ったブランチのままになっている
- 自分のコミットがない、または、プルリクエストがマージされてリモートのブランチが削除されている
それ以外の場合は、前回の最後の状態のまま開かれます。作業を続けたいときは、同じ名前で再起動すれば続きから始められます。
非対話モード(-p)で動かしたとき
プログラムの中や自動化の中でclaude -pを使った場合は、終了時の確認がないため、worktreeは自動では片付けられません。不要になったら自分でgit worktree removeを実行します。ロックがかかっていて削除を拒否された場合は、先にgit worktree unlockを実行します。
git worktree remove .claude/worktrees/feature-auth
Windowsでのリンクの扱い
Windowsでは、worktreeの中にあるフォルダが、別の場所へのリンク(NTFSのジャンクションやディレクトリのシンボリックリンク)になっていることがあります。worktreeを削除すると、リンクだけが消え、リンク先のフォルダは残ります。公式ドキュメントによると、v2.1.205より前のバージョンでは、サブフォルダの中にあるリンクのリンク先まで消えてしまう場合がありました。古いバージョンを使っているときは、更新してから使ってください。
設定のしかた

worktreeの作られ方は、既定のままでも多くの場面で足ります。必要に応じて、起点のブランチ、コピーするファイル、共有するフォルダなどを変えられます。
ブランチの起点を決める(baseRef)
新しいworktreeは、既定では、リポジトリの既定ブランチ(多くはmain)の、リモートの最新の状態から作られます。この動きは、設定のworktree.baseRefで変えられます。
| 値 | 起点 | 向いている場面 |
|---|---|---|
"fresh"(既定) | リモートの既定ブランチ(origin/<既定ブランチ>) | リモートと同じ、きれいな状態から始めたいとき |
"head" | いま自分がいる場所のHEAD(プッシュしていないコミットも含む) | 作業途中の変更を引き継いで、別のセッションに続きを任せたいとき |
設定は、プロジェクトの.claude/settings.jsonや、自分用の設定ファイルに書きます。
{
"worktree": {
"baseRef": "head"
}
}
作業途中の変更が入らないことがある
既定の"fresh"では、手元でコミットしたがまだプッシュしていない変更は、新しいworktreeに入りません。「さっきまでの作業を引き継いでほしいのに、ファイルがない」というときは、この設定が原因のことが多いです。なお、baseRefにブランチ名は指定できません。特定のブランチから始めたいときは、後述のとおりGitのコマンドで作ります。
リモートが設定されていない場合や、既定ブランチの情報を取得できない場合は、現在のローカルのHEADから作られます。
.envなどの設定ファイルをコピーする(.worktreeinclude)
worktreeは新しいチェックアウトなので、Gitに入れていない.envのようなファイルはコピーされません。これを自動でコピーしたいときは、プロジェクトのルートに.worktreeincludeというファイルを作ります。書き方は.gitignoreと同じです。
.env
.env.local
config/secrets.json
コピーされるのは、このファイルに書いたパターンに一致し、かつ.gitignoreで除外されているファイルだけです。Gitで管理しているファイルが二重にコピーされることはありません。この設定は、--worktreeで作られるworktree、サブエージェントのworktree、デスクトップアプリの並行セッションのすべてに適用されます。
秘密情報は、必要なものだけを書く
.worktreeinclude に書いたファイルは、worktreeごとにコピーされます。APIキーなどの秘密情報を含むファイルは、本当に必要なものだけを指定してください。複製が増えるほど、うっかり外に出してしまう場所も増えます。
大きなフォルダの扱い(symlinkDirectories・sparsePaths)
プロジェクトが大きいと、worktreeを作るたびに時間とディスクを使います。次の2つの設定で軽くできます。
| 設定 | 動き | 書き方の例 |
|---|---|---|
worktree.symlinkDirectories | 元のプロジェクトにある大きなフォルダを、各worktreeにコピーせず、リンク(シンボリックリンク)でつなぐ | {"worktree": {"symlinkDirectories": ["node_modules", ".cache"]}} |
worktree.sparsePaths | 指定したフォルダと、ルート直下のファイルだけをチェックアウトする(Gitのスパースチェックアウト)。大きなリポジトリで作成が速くなる | {"worktree": {"sparsePaths": ["packages/my-app", "shared/utils"]}} |
どちらも、初期状態では未設定です。sparsePathsを使うと、Gitがリポジトリの設定でextensions.worktreeConfigを有効にします。大きなリポジトリの扱い全般は、公式ドキュメントの「大きなコードベース」の章も参照してください。
worktreeと元のフォルダで共有されるもの
worktreeは別のファイルとブランチを持ちますが、次のものは元のプロジェクトと共有されます。
| 共有されるもの | 動き |
|---|---|
リポジトリの.gitフォルダ | worktreeの中でのGitの操作は、元のリポジトリの.gitに書き込まれる。サンドボックスが有効でも、git commitは使える |
| プロジェクト単位のプラグイン | 元のフォルダでプロジェクト単位に入れたプラグインは、同じリポジトリのworktreeでも読み込まれる(v2.1.200以降) |
| 権限の許可 | Bashコマンドで「今後は確認しない」を選ぶと、元のフォルダの.claude/settings.local.jsonに保存され、他のworktreeにも効く。Windowsなど、Claude Codeがリポジトリのルートを使わない場合は、そのworktreeだけに保存される |
| Gitに入れていないスキル・エージェント・コマンド | worktreeの直下に.claude/skillsがない場合は、元のフォルダのものが読み込まれる(スキルはv2.1.277以降) |
これらは、--worktreeで作った場合も、git worktree addで自分で作った場合も同じです。なお、フックのスクリプトで使う${CLAUDE_PROJECT_DIR}は、worktreeに移っても元のプロジェクトのルートを指したままです。worktreeの場所が必要なフックは、フックに渡される入力のcwdを読みます。
サブエージェント・デスクトップでの使い方

worktreeは、ターミナルで--worktreeを付けて起動する以外にも、いくつかの場面で自動的に使われます。
サブエージェントを専用のworktreeで動かす
サブエージェントを並行して動かすと、同じファイルを同時に編集して衝突することがあります。サブエージェントごとにworktreeを持たせれば、これを避けられます。Claudeに「エージェントにはworktreeを使って」と頼むか、自作のサブエージェントの定義にisolation: worktreeを書きます。
---
name: refactorer
description: Applies mechanical refactors across many files
isolation: worktree
---
Apply the requested refactor across every affected file, then run the tests
and report the results.
この定義のサブエージェントは、毎回専用のworktreeの中で動きます。変更なしで終わったworktreeは自動で削除され、変更があったものは残ります。残ったworktreeは、後述する定期的な掃除の対象になります。
サブエージェントのworktreeも、--worktreeと同じ起点(既定ではリモートの既定ブランチ)から作られます。作業途中の変更を引き継がせたい場合は、先ほどのworktree.baseRefを"head"にします。
サブエージェントが読むCLAUDE.mdに注意
専用のworktreeで動くサブエージェントは、起動時に読む指示ファイルを、メインの会話から受け取ります。既定の場所(.claude/worktrees/の下)のworktreeでは、そのworktreeのルートにあるCLAUDE.mdや.claude/rules/は、ブランチによって内容が違っていても読み込まれません。
バックグラウンドのセッション
エージェントビューから依頼したセッションや、claude --bgで起動したセッションは、最初は現在のフォルダで始まります。ファイルを編集する前に、Claudeが自動で.claude/worktrees/の下のworktreeへ移ります。並行するセッションが同じチェックアウトを読めても、書き込みは別々のworktreeに行われます。
次のような場合は、worktreeへ移りません。
- 開いていたセッションを、
←や/backgroundでバックグラウンドに回した場合(その場所で編集を続ける) - すでにGitのworktreeの中で動いている場合
- 作業フォルダがGitのリポジトリではなく、
WorktreeCreateフックも設定されていない場合
Gitのworktreeが使いにくいリポジトリでは、設定のworktree.bgIsolationを"none"にすると、バックグラウンドのセッションが元のフォルダを直接編集するようになります。既定は"worktree"です。
バックグラウンドのセッションが、worktreeの中でコードを変更した場合は、Claudeがセッションを終える前に、変更をコミットし、リモートがあればブランチをプッシュします。ただし、公式ドキュメントでは、mainへのプッシュ、強制プッシュ、マージは行わないと説明されています。コミットやプッシュを自分で行うとCLAUDE.mdなどに書いてある場合は、その指示が優先されます。
/batchで大きな変更を分担する
/batchは、1つの大きな変更を5〜30個のサブエージェントに分け、それぞれをworktreeで動かすスキルです。公式ドキュメントでは、サブエージェントとworktreeを組み合わせた使い方で、独立した調整方式ではないと説明されています。ファイル数の多い修正など、機械的に分けられる変更で使います。
デスクトップアプリで使う
Claudeのデスクトップアプリでは、画面の操作だけでworktreeを使えます。Gitのリポジトリでセッションを始めるとき、ブランチ名の隣にある「worktree」のオプションを選ぶと、そのセッションが専用のコピーで動きます。サイドバーの「+ New session」からセッションを増やせるので、並行作業もマウスだけで進められます。
| 項目 | 内容 |
|---|---|
| 保存場所 | 既定はプロジェクトの .claude/worktrees/。「設定」→「Claude Code」の「Worktree location」で変えられる |
| ブランチ名の接頭辞 | 「設定」→「Claude Code」の「Branch prefix」で指定すると、worktreeのブランチ名の前に付く |
| 片付け | サイドバーのセッションにカーソルを合わせ、アーカイブのアイコンを押すと、worktreeを削除できる |
| 自動の片付け | 「Auto-archive after PR merge or close」をオンにすると、プルリクエストのマージまたはクローズ後に、終了したローカルのセッションが自動でアーカイブされる |
| 前提 | Gitが入っていること(Macは標準で入っていることが多い) |
デスクトップアプリでも、.worktreeincludeは使えます。また、デスクトップアプリのworktreeセッションでは、設定・フック・スキルなどのプロジェクトの設定を、worktreeではなく元のフォルダのルートから読みます。CLAUDE.mdと.claude/rules/だけは、worktreeから読み込まれます。
Gitのコマンドで手動で作る

特定の既存ブランチから始めたいとき、worktreeをプロジェクトの外の場所に置きたいときは、Claude Codeを使わず、Gitのコマンドで自分で作れます。
新しいブランチを作って、worktreeを用意するコマンドです。
git worktree add ../project-feature-a -b feature-a
すでにあるブランチ(下の例ではfix-issue-456)からworktreeを作る場合は、次のようにします。
git worktree add ../project-bugfix fix-issue-456
作ったworktreeに移動して、Claude Codeを起動します。
cd ../project-feature-a
claude
いまあるworktreeの一覧はgit worktree listで確認でき、不要になったものはgit worktree remove ../project-feature-aで削除します。
| 項目 | claude --worktreeで作る | git worktree addで自分で作る |
|---|---|---|
| 場所 | プロジェクトの.claude/worktrees/の下 | 好きな場所(プロジェクトの外でもよい) |
| 起点のブランチ | 既定ブランチ(baseRefで変更可) | 既存のブランチを自由に指定できる |
| 終了時の自動の片付け | ある(変更がなければ自動削除、または確認) | 公式の説明は、Claudeが作ったworktreeが対象。自分で削除する |
| 定期的な掃除 | サブエージェントやバックグラウンドのworktreeは対象 | 自分で作ったworktreeは対象外 |
共有されるもの(.git・プラグイン・権限の許可など) | 共有される | 共有される |
手動で作ったworktreeは、Claudeが勝手に片付けません。裏を返せば、自分で作ったworktreeは、自分で削除するまで残るということです。使い終わったら、git worktree listで確認して整理しましょう。
Git以外のバージョン管理を使っている場合
SVN・Perforce・Mercurialなど、Git以外のバージョン管理を使っている場合は、WorktreeCreateとWorktreeRemoveのフックを設定して、作成と削除の処理を自分で用意します。フックが既定のGitの処理を置き換えるため、.worktreeincludeは処理されません。必要なファイルは、フックのスクリプトの中でコピーします。
フックは、作ったフォルダのパスを標準出力に出力します。Claude Codeはそのパスを、セッションの作業フォルダとして使います。フックが作るフォルダは、どのGitリポジトリの中にも入らない場所にしてください。リポジトリの中に作ると、Claude Codeがそのフォルダを使うのを拒否します。
注意点・困ったとき

使用量は並列の数だけ増える
worktreeを使うと、複数のセッションを同時に動かしやすくなります。公式ドキュメントでは、セッションやサブエージェントを同時に動かすと、トークン(AIが読み書きする文字量)の使用量が増えると案内されています。プランの上限に達しやすくなるので、並列にする数は、使用量を見ながら決めましょう。
worktreeの外には書き込めない
worktreeの中で動いているセッションは、元のフォルダ(メインのチェックアウト)を、うっかり書き換えないように守られています。Claude Codeは、次のような操作を止めます。
| チェック | 止められる操作 |
|---|---|
| ファイルの編集 | 元のフォルダのパスを対象にした、ファイルの編集・書き込み |
| コマンドの実行場所 | 作業フォルダが元のフォルダになっている、またはそうでないと確認できないコマンド |
| Gitの向き先の変更 | git -Cや--git-dir、環境変数、cdなどで、Gitを元のフォルダへ向ける操作 |
| コマンドの形 | Gitが元のフォルダに触れないと、コマンドの文面から確認できないもの(コマンド名を実行時に組み立てる場合など) |
止められたときは、Claudeにエラーとして伝わり、書き直し方も示されます。ただし、これらのチェックは、コマンドが書き込むファイルまでは追跡しません。たとえばcpやシェルのリダイレクトで元のフォルダへ書き込む操作は、このチェックでは止まらず、通常の権限とサンドボックスの設定に従って扱われます。worktreeは、完全な隔離ではなく、事故を減らすための仕組みとして使うのが現実的です。
症状と対処
| 症状 | 原因 | 対処 |
|---|---|---|
Failed to resolve base branch "HEAD"というエラーで失敗する | リポジトリにコミットが1つもない | 最初のコミットを作ってから実行する |
--worktreeがエラーで終了し、確認を促される | そのフォルダでまだ信頼の確認を済ませていない | そのフォルダでclaudeを一度起動し、信頼の確認に答える |
| 新しいworktreeに、直前までの変更がない | 起点が、リモートの既定ブランチになっている | 変更をプッシュするか、worktree.baseRefを"head"にする |
.envや依存ファイルがない | worktreeは新しいチェックアウトで、Gitに入っていないものは入らない | .worktreeincludeに書く、symlinkDirectoriesを使う、またはセットアップを実行する |
| Git LFSのファイルが、中身の入っていない小さなファイルになっている | git lfs install --localで設定していると、Claude Codeはリポジトリ内のフィルタを使わずにworktreeを作る | worktreeの中でgit lfs pullを実行する |
| worktreeを作れない(シンボリックリンクのエラー) | .claude、.claude/worktrees、またはworktreeのフォルダがシンボリックリンクになっている | リンクを外して、もう一度実行する |
| worktreeを削除しようとして断られる | 実行中のセッションがロックしている、または変更が残っている | セッションを終了する。未コミットの変更があるときはgit worktree remove --force。ロックされていれば先にgit worktree unlock |
| 再開したら「worktreeが存在しない」と表示された | worktreeのフォルダが、すでに削除されている | 対処は不要。元のフォルダで、隔離なしのままセッションが続く |
| 再開したのに、worktreeに戻れない | worktreeの中から起動した、など、場所が確認できなかった | 表示されたメッセージの内容に従う。worktreeの中から起動していた場合は、元のプロジェクトのフォルダから再開する |
Git LFSの動きは、安全のための仕様です。フィルタはシェルのコマンドを実行できるため、リポジトリに書き込める何か(Claude自身を含む)が仕込んだものが実行されないように、リポジトリ自身の設定にあるフィルタは使われません。グローバルのGit設定にあるフィルタ(git lfs installだけで設定したもの)には影響しません。
会社で使うときに決めておくこと
複数のセッションを並行して動かせるようになると、「どのセッションが、どの変更をしたのか」が分かりにくくなります。チームで使うなら、次のような決めごとを先に共有しておくと、混乱を避けられます。
- worktreeの名前の付け方(例:
機能名・fix-内容など、内容が分かる名前) - Claude Codeが作るブランチを、どのタイミングでプッシュ・マージするか
- 終わったworktreeを、誰がいつ片付けるか
.worktreeincludeに書いてよいファイルの範囲(秘密情報を含むファイルの扱い)- 並列で動かすセッションの数の目安(使用量とレビューの負担を見て決める)
並行して進めた変更は、最終的に人がレビューして統合します。同時に動かせる数よりも、確認できる量の方が、実際の上限になります。
よくある質問
worktreeは、Claude Codeだけの機能ですか?
いいえ。worktreeはGitの機能で、Claude Codeはその仕組みを使いやすくしています。git worktree addで作ったworktreeの中でClaude Codeを起動することも、claude --worktreeで作ることもできます。
worktreeは、いくつまで作れますか?
公式ドキュメントのworktreeのページには、数の上限は書かれていません。実際には、使用量の上限と、人がレビューできる量が目安になります。
worktreeの名前を付けないとどうなりますか?
bright-running-foxのような名前が自動で付きます。名前を付けずに始めて、変更がないまま終了すると、worktreeとブランチは自動で削除されます。
worktreeを使うとき、元のブランチは変わりますか?
変わりません。worktreeは新しいブランチ(worktree-名前)を作り、そこで作業します。元のフォルダで開いているブランチは、そのままです。
worktreeで作った変更は、どうやって元に戻しますか?
worktreeのブランチは、通常のGitのブランチです。マージやプルリクエストなど、いつものやり方で、変更を元のブランチに取り込めます。取り込む操作そのものを、Claudeに頼むこともできます。
forkとは違いますか?
違います。Claude Codeの/forkなどのforkは、会話の内容を引き継いだ別のセッションを作る機能で、ファイルの作業場所を分けるworktreeとは目的が違います。GitHubのforkも、リポジトリそのものを複製する別の機能です。
worktreeを使うのに、追加の料金はかかりますか?
worktree自体に、追加の料金があるとは公式には案内されていません。ただし、複数のセッションを同時に動かすと、そのぶん使用量が増えます。
Gitを使っていないフォルダでは使えませんか?
そのままでは使えません。Git以外のバージョン管理を使っている場合は、WorktreeCreateとWorktreeRemoveのフックで、作成と削除の処理を用意すれば使えます。
worktreeを消してしまいました。作業を戻せますか?
worktreeを削除すると、ブランチと中の作業も消えます。コミットしたものは、プッシュ済みであればリモートに残っています。プッシュしていない作業は、戻せない場合があります。迷ったら削除せずに残すのが安全です。
worktreeの置き場所を変えられますか?
デスクトップアプリでは、「設定」→「Claude Code」の「Worktree location」で変えられます。claude --worktreeで作る場合は.claude/worktrees/の下に作られるため、別の場所に置きたいときはgit worktree addを使います。
Agent Teamsのメンバーも、worktreeで分けられますか?
公式ドキュメントでは、Agent Teamsはメンバーをworktreeで分離しないと説明されています。担当するファイルを、メンバーごとに分けて衝突を避けます。
まとめ
この記事のまとめ
- worktreeは、同じプロジェクトを別のフォルダ・別のブランチで取り出し、複数のClaudeが互いの編集を壊さずに作業できるようにする仕組み
- 始めるには、
claude --worktree 名前を実行する。既定では.claude/worktrees/名前/に、worktree-名前というブランチが作られる - 終了時は、変更がなければ自動で削除され、作業があれば残すか削除するかを確認される。削除すると作業も消える
- 新しいworktreeは、既定ではリモートの既定ブランチから作られる。作業途中の変更を引き継ぐなら、
worktree.baseRefを"head"にする .envなどは.worktreeinclude、大きなフォルダはsymlinkDirectories・sparsePathsで扱う- サブエージェント、バックグラウンドのセッション、デスクトップアプリでも、裏側でworktreeが使われる。並列の数は、使用量とレビューできる量で決める
worktreeは、1つのプロジェクトで複数の仕事を同時に進めるための基本の道具です。まずは、機能追加と不具合修正のように、触るファイルが重ならない2つの仕事を別のworktreeで頼むところから試してみてください。
社内の開発や業務ツールづくりにClaude Codeを使うときは、並列の使い方、ブランチの運用、権限の設定をあらかじめ決めておくと、安心して広げられます。INTERCREATE JAPANでは、Claude CodeやCodexの導入から、社内で使い続けられる運用の仕組みづくりまでをお手伝いしています。
参考・出典
INTERCREATE JAPAN