Claude Codeのセッションを2つ同時に動かして、片方に機能を作らせ、もう片方にバグを直させる。便利そうですが、同じフォルダの中だと困ったことになります。
この記事の目次(4節)
このサイトの開発でも2026年8月9日に、AIのサブエージェント(本体のAIから仕事を任される別のAI)が、本体と同じ作業フォルダでブランチを切り替えました。
そのせいでコミットが、ほかの作業のブランチに積まれてしまいました。そのブランチがrebaseされたとき、コミットは消えてしまいました。
え、AI同士で足を引っぱり合うの? と思いますよね。片方が git checkout すると、同じフォルダを使うもう片方の足元まで、まるごと入れ替わってしまうんです。
Claude Codeのworktree(ワークツリー)を使えば、これを防げます。
worktreeはもともとgitの機能で、1つのリポジトリで複数のブランチを同時にチェックアウトできます。履歴は共有したまま、ファイルとブランチだけを分けた作業フォルダをもう1つ作れるんです。
claude --worktree で始めると、どこに何ができるのか
使い方はシンプルで、起動するときに claude --worktree feature-auth と名前を付けるだけです。短く claude -w feature-auth とも書けます。
すると、リポジトリの中の .claude/worktrees/feature-auth/ に作業フォルダができます。ブランチも worktree-feature-auth という名前で新しく作られます。
別のターミナルで違う名前を付けて起動すれば、2つ目のセッションも自分のフォルダで動きます。
新しいフォルダは、今の作業の続きではない
新しいworktreeは、今いるブランチではなく、リポジトリのデフォルトブランチ(ふつうはリモートのmain)から始まります。手元でまだpushしていないコミットや、作りかけのブランチは引き継ぎません。
今の作業の続きから分けたいときは、settings.json の worktree.baseRef を "head" にします。選べる値は既定の "fresh" と "head" の2つだけで、ブランチの名前は書けません。
.envも依存パッケージも、新しいフォルダには無い
worktreeはチェックアウトしたばかりの状態なので、gitで管理していないファイルは入っていません。
.env のような、gitの管理から外しているファイルを毎回コピーしたいなら、リポジトリのルートに .worktreeinclude というファイルを置きます。
中身は .gitignore と同じ書き方で、コピーするファイルを並べます。コピーされるのは、書いたパターンに合い、しかもgitが無視しているファイルだけです。
依存パッケージ(node_modulesなど)も入っていないので、新しいフォルダで入れ直します。
.claude/worktrees/ は、.gitignore に足しておきましょう。足さないと、本体のフォルダで作業フォルダの中身が「追跡されていないファイル」として見えてしまいます。
サブエージェントをworktreeで動かしてみた
サブエージェントにも、worktreeを使わせられます。
会話の中で「エージェントにはworktreeを使って」と頼むのが手軽です。いつも分けるなら、.claude/agents/ の定義ファイルの先頭(フロントマター)に isolation: worktree の1行を足します。
このサイトの記事を書く作業環境で、worktreeで動くサブエージェントを2つ同時に起動してみました。試したのは2026年11月7日、Claude Codeのバージョンは2.1.319です。
先に、本体のフォルダに、まだコミットしていない目印のファイルを1つ置きました。最初のサブエージェントには何も変えさせず、もう一方には新しいファイルを作らせます。
2つのサブエージェントは、.claude/worktrees/agent-<ID>/ にそれぞれ自分のフォルダを持ち、別々のブランチで動きました。
動いているあいだ、git worktree list には2つとも「locked」と出ました。作業中のフォルダが片づけの処理で消されないよう、Claude Codeがかけるロックです。
本体に置いた目印のファイルは、どちらのフォルダにもありませんでした。
依存パッケージのフォルダ(node_modules)も、生成して作るファイルもありませんでした。テストをさせるなら、まずパッケージを入れるよう指示しましょう。
もう一方に作らせたファイルは、本体のフォルダには現れませんでした。
このサイトの開発では8月の件のあと、リポジトリを触るサブエージェントは必ずworktreeで動かすと決めました。
記事の公開前に点検するAIも、gitで変更を取り出して読むので、別の作業フォルダで動かしています。書き込みツールを外したAIにレビューさせる話と同じく、役割ごとに分ける考え方です。
終わったworktreeは自動で消える? 残ったときの消し方
さっきのサブエージェントたちが終わると、何も変えなかった方のフォルダとブランチは、跡形もなく消えていました。
ファイルを作った方は、フォルダもブランチも残り、「locked」だけが外れていました。フォルダは155MBで、リポジトリのファイルが丸ごと入っています。
変更が無ければ自動で片づくのは公式の説明どおりで、変更のあるフォルダは消さずに残ったわけです。
claude --worktree のセッションは、終えるときに聞かれる
claude --worktree で始めた対話モードのセッションでは、終えるときにClaude Codeがフォルダの中を確かめます。
変更もコミットも無く、セッション自体に名前を付けていなければ、フォルダとブランチは自動で消えます。
claude -n auth-refactor や /rename でセッションに名前を付けたときは別です。セッションに名前があるときと、変更が残っているときは、残すか消すかを聞かれます。
残しておけば、終えるときに表示される claude --worktree <名前> --resume で、あとから戻れます。ただし、-p を付けて対話なしで動かしたときは、この確認が無く、worktreeは消されずに残ります。
自動で消えずに残ったサブエージェントのworktreeは、cleanupPeriodDays の設定より古くなると、定期的に動く片づけの処理の対象になります。ただ、変更やpushしていないコミットが残っていれば、その処理も消しません。
手で消すときは --force が要ることがある
残ったworktreeを手で消すときは、git worktree remove <フォルダ> を使います。
今回残ったフォルダは、このコマンドでは「contains modified or untracked files, use --force to delete it」と断られました。
--force は中の変更ごと消すので、付ける前に、残す作業が無いかを見ておきましょう。
gitでは、変更の残るフォルダは --force を付けないと消せません。
ロック(locked)が残っているときは、先に git worktree unlock で外します。
フォルダを消しても、ブランチは残ります。要らなければ git branch -D で消します。
自分で組むのが大変なら、このサイトのAI秘書が議事録やマニュアル・手順書の作成など、社内・総務の仕事を引き受けています。
AIを何人並べるかを、無料AI業務診断で決める
worktreeは、AIを同時に何人も働かせるための、机の分け方のようなものです。机を分けても、誰に何を任せて、どこで人が確かめるかは、また別に決めないといけません。
このサイトがルーティンで記事を書かせて公開している仕組みと、/loopと/goalの使い分けもあわせて読むと、AIを同時に動かす段取りを考えやすくなります。
自社のどの仕事をAIに手分けして任せられるかは、無料AI業務診断(30分のオンライン相談)で一緒に整理できます。相談のページから申し込めます。
机は増やせても、机の上を片づけるのは、最後まで人の仕事ですね。
Source:
- Claude Code Docs「Run parallel sessions with worktrees」(参照 2026-11-07)
- Claude Code Docs「Create custom subagents」(参照 2026-11-07)
- Claude Code Docs「Manage sessions」(参照 2026-11-07)
- Git「git-worktree Documentation」(参照 2026-11-07)
