同時に触ったら、片方の変更が消えていた
あるチームでのことです。メンバーAが「トップページの見出しを直して」とClaude Codeに頼みました。ほぼ同じタイミングで、メンバーBが同じリポジトリの同じフォルダで「フッターにリンクを追加して」と頼みました。
数分後、Aの変更がフッターの修正に上書きされて消えていました。二人とも同じ作業フォルダ、同じブランチを見ていたからです。
これは特別な事故ではありません。同じ作業フォルダを複数の人・複数のセッションが同時に触れば、必ず起きることです。ブランチを知っているだけでは防げません。ブランチは「どの変更を記録するか」を分けるものであって、今ディスク上にあるファイルそのものを分けてはくれないからです。
同じフォルダに二人が入ると何が起きるか
作業フォルダの分け方
フォルダは1つ。誰かがブランチを切り替えると、そこにあるファイルが丸ごと入れ替わる。別のメンバーが同時に別の作業をしていれば、保存前の変更がそのまま置き換わってしまう。
同じリポジトリから、もう1つ作業フォルダを作る。ブランチも中身のファイルも別。片方をどう触っても、もう片方には影響しない。
worktreeはGit本体が持つ機能で、Claude Code固有のものではありません。自分で作ることもできます。
$git worktree add ../project-feature-a -b feature-a
Preparing worktree (new branch 'feature-a')
これで ../project-feature-a という、元とは別の作業フォルダができます。ここでClaude Codeを起動すれば、プラグインや権限の承認、.claude/skills の読み込みも普段どおりに使えて、元のフォルダとは完全に独立して動きます。使い終わったら消します。
$git worktree remove ../project-feature-a
Claude Codeの--worktreeフラグで作業場所を分ける
自分でフォルダを作らなくても、Claude Code起動時に名前を渡すだけで同じことができます。
$claude --worktree feature-a
--worktree(短縮形 -w)に名前を渡すと、独立したworktreeを作ってその中でClaude Codeを起動してくれます。既定では、リポジトリ直下の .claude/worktrees/feature-a/ に、worktree-feature-a という新しいブランチで作られます。
名前は省略してもかまいません。省略すると bright-running-fox のような名前が自動でつきます。
$claude --worktree
同じ会話の途中で「worktreeで作業して」と頼んでも、EnterWorktree というツールが同じことをしてくれます。ただしv2.1.206以降、.claude/worktrees/ の外に入ろうとする場合は承認が必須です。「今後は聞かない」を選んでも省略されず、bypassPermissions モードのときだけ承認が省かれます。
このひと続きの流れを図にすると、次のようになります。
worktreeで作業する一連の流れ
作る
claude --worktree <名前> で起動
そこで作業する
元のフォルダとは独立。他の人の作業に触れない
終了する
変更なしなら自動で片付く
続きから再開する
変更が残っていれば、再開コマンドが表示される
サブエージェントをworktreeで分離する
チームの .claude/agents/ に置いたサブエージェント定義にも、worktree隔離を設定できます。frontmatterに 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.
親の会話と同じ作業フォルダを共有する。同時に別の作業を頼むとファイルが競合しうる
一時的な独立コピーの中で動く。既定ではリポジトリのdefault branchから分岐し、変更が無ければ終了時に自動で片付く
「今動いている会話の続きから分岐させたい」場合は、設定で worktree.baseRef を "head" にすると、default branchではなく親セッションの現在のHEADから分岐します。機械的な一括修正のような、時間のかかる作業をサブエージェントに任せるとき、この隔離があるとメインの会話のブランチを汚さずに済みます。
終わったら片付ける
Claude Codeを --worktree で起動したセッションを終えるとき、何が起きるかは中身次第です。
名前を付けなかったセッションなら、worktreeとブランチをClaude Codeが自動で片付ける
維持するか消すか聞かれる。維持を選ぶと、再開用のコマンド claude --worktree <名前> --resume が表示される
手で作ったworktreeは、git worktree remove ../project-feature-a で自分で消します。
注意
.gitignoreに1行足しておく
.claude/worktrees/ を .gitignore に足しておきましょう。足しておかないと、worktreeの中身が「追跡されていないファイル」として元の作業フォルダのgit statusに表示され続けます。
チームのルールにする
ここまでの仕組みを、チームの運用ルールに落とし込みます。
時間のかかる作業や複数ファイルにまたがる作業は、名前付きworktreeで区別する。名前を見れば誰が何をしているか分かるようにしておく
同じworktreeを二人で同時に使わない。worktreeを分けても、その中でさらに同時編集すれば同じ事故が起きる
Claudeに「worktreeで作業して」と頼むと自動で作られること、.claude/worktrees/の外は承認が必要なことを、チームで共有しておく
複数のClaudeが1つの会話でチームを組む実験的機能を使う場合、teammate同士はworktreeで分離されないため、ファイル単位で担当を分けておく
worktreeは「同じリポジトリの中に、もう1つ独立した作業場所を作る」という一点だけ覚えておけば、あとは名前を付けて起動し、終わったら片付けるだけです。
今日のまとめ
- 同じ作業フォルダを複数の人・セッションが同時に触ると、片方の変更が消える
claude --worktree <名前>で独立した作業場所を作り、終わったら自動または手動で片付く- サブエージェントには
isolation: worktreeを付けると、一括修正のような作業をメインのブランチから隔離できる
次のレッスンでは、GitHubにClaudeを常駐させて、リポジトリの中からClaudeを呼び出す方法を見ていきます。GitHubにClaudeを置くを見ていきましょう。
セルフチェック
1. worktreeとは何ですか?
2. Claude Codeで名前付きのworktreeを作って起動するには?
3. 変更が残ったままworktreeのセッションを終えると、どうなりますか?