コンテンツにスキップ

worktree でセッションを分ける

tier 2(効いてくる)確認 1 か月前(2026年8月23日)

どこまで来たら使えたと言えるか

面: 操作が異なる — ターミナルとデスクトップで操作が違うので、条件を分けています

段達成したと言える状態
1. 触るターミナルclaude --worktree <name> で分離セッションを起動し、.claude/worktrees/<name>/ が作られたことを確認した

デスクトップ新しいセッションを作り、Git リポジトリでは各セッションが自動で worktree を持つことを確認した

2. 入れるターミナル並行して進めたい作業を worktree に分け、終了時の後片付け(保持するか削除するか)を毎回選べている

デスクトップworktree の保存先とブランチ接頭辞を Settings → Claude Code で自分の運用に合わせた

3. 効かせるターミナルbase branch の決まり方と分離の強制範囲を把握し、.worktreeinclude や isolation: worktree を必要に応じて使える

デスクトップ不要になったセッションをアーカイブで片付け、.worktreeinclude で gitignore 済みのファイルを新しい worktree へ持ち込んでいる

何のためのものか

git worktree ごとにセッションを分離し、並行して走るセッションのファイル編集が衝突しないようにする仕組み。git リポジトリが前提。

触る

  1. claude --worktree <name>(短縮形 -w)で起動する
  2. 既定の作成先はリポジトリルートの .claude/worktrees/<name>/、ブランチ名は worktree-<name>
  3. 名前を省略すると bright-running-fox のような名前が生成される

worktree は新しい checkout なので、依存関係のインストールなど開発環境の初期化が必要。 対話実行には workspace trust が要る(未承認だとエラー終了する)。

セッション中に Claude へ依頼すると EnterWorktree ツールで作られる。

入れる

  • PR から分岐する。 --worktree に # 付きの PR 番号か GitHub の pull request URL を渡すと、origin から pull/<number>/head を fetch して .claude/worktrees/pr-<number> に作る(シェルが # を解釈しないよう引用符で囲む)
  • 必要なローカルファイルを持ち込む。 プロジェクトルートに .worktreeinclude を置くと、gitignore されているファイルのうちパターンに一致するものが作成時にコピーされる
  • 終了時の後片付けを意識する。 クリーンなら(名前なしセッションでは)自動削除、作業が残っていれば保持か削除かを尋ねられる。削除するとディレクトリ・ブランチとその中の作業がすべて消える
  • base branch を決める。 worktree.baseRef の既定 "fresh" はリモートのリポジトリ既定ブランチから分岐する。手元のブランチ状態を引き継ぎたいなら "head"

効かせる

  • 分離は強制される。 worktree に分離されたセッションでは、main checkout に到達するツール呼び出しがブロックされる。ファイル編集だけでなく、作業ディレクトリが main checkout に解決される Bash コマンドや、git -C / --git-dir / GIT_DIR などで git を main checkout に向けるコマンドも止まる。分離セッションから起動した subagent にも適用される
  • subagent 単位で分けるなら isolation: worktree。 一時的な worktree が割り当てられ、変更なしで終了すると自動削除される
  • resume すると worktree へ戻る。 対話でも -p の --continue / --resume でも同じ。ただし --fork-session した場合は起動したディレクトリで始まり、元の worktree には手を付けない

落とし穴

  • -p の非対話実行は後片付けされない。 終了時のプロンプトが無いため、git worktree remove で自分で消す
  • -p は workspace trust のチェックも飛ばす。 claude -p --worktree はそのまま進む
  • 同じ名前を再利用すると、条件次第で既定ブランチへリセットされる。 未コミット変更も未追跡ファイルも無く、Claude Code が作ったブランチのままで、独自のコミットが無い(または PR がマージ済み)場合。それ以外は古い tip で再オープンされる
  • 定期スイープは自分が --worktree で作った worktree を消さない。 消えるのは subagent とバックグラウンドセッション用のもので、cleanupPeriodDays より古く、かつ作業が残っていないものだけ
  • リポジトリの .claude/worktrees/ の外へ入るときは必ず承認を求められる。permission rule でも「don't ask again」でも抑止できない

根拠と前後

このページが書ける範囲は、根拠にした facts に書かれていることだけです。 仕様そのものはそちらを読んでください。