Deepseek ArtifactsDeepseek Artifacts
ワークツリーガイド

Claude Code ワークツリー:衝突なしで並列セッションを走らせる

コマンド 1 つで、Claude Code の各セッションにリポジトリの完全なコピーを渡せます。claude --worktree、.claude/worktrees の構成、サブエージェントのワークツリー分離、終了時のクリーンアップ、そして手動 git worktree add がまだ勝る場面まで解説します。

要点まとめ

  • claude --worktree(省略形 -w)を使うと、セッションは .claude/worktrees/<name> に作られたリポジトリの新鮮なコピー内で始まり、worktree-<name> というブランチがチェックアウトされます。
  • 別のターミナルでさらにセッションを起動すれば並列作業ができます — 各セッションは自分のディレクトリだけを編集しながら、同じ Git 履歴とリモートを共有します。
  • サブエージェントにもワークツリーが渡されます:自然言語で頼むか、.claude/agents/*.md のフロントマターに isolation: worktree と書いて常時化します。
  • 終了時、変更のない名前なしワークツリーは自動削除、作業中のものは保持/削除を尋ねられます。結果のマージは worktree-<name> を普通に git merge するだけ。

Claude Code Worktrees in 7 Minutes

チャンネル: Developers Digest7:10

動画を見る

I'm using claude --worktree for everything now

チャンネル: Matt Pocock7:57

動画を見る

Worktrees — official documentation

公式ドキュメント: code.claude.com/docs

動画を見る

このページのすべてのフラグ、パス、クリーンアップ動作は公式の worktrees ドキュメントに対して検証しています。上の動画がビジュアルと事実のソースです — 終了時の保持/削除プロンプトと main への push の罠も含めて。

スクリーンショットは各制作者に帰属し、該当タイムスタンプへ深リンクしています。顔出しフレームは使用していません。

Claude Code ワークツリーを使う、ステップごとに

パート 1 — 初めての分離セッション

  1. 1

    コミット 1 つ以上ある Git リポジトリを用意する

    ワークツリーは既存の履歴から分岐するため、worktree 機能には本物の Git リポジトリが必要です。新規フォルダで git init を実行し、ファイルを作り(デモは touch index.html を実行するだけ)、コミットします。省略すると、Claude Code には分岐元がありません。

    Terminal running git init in a demo-app folder with Initialized empty Git repository output and touch index.html, the one-commit starting point Claude Code worktrees require
    git init と touch index.html — claude --worktree が動く前に必要なのはコミット 1 個だけ。1:06 から視聴
  2. 2

    ワークツリーとは何かを理解する

    Git ワークツリーとは、リポジトリの履歴とリモートを共有しつつ、独自のブランチをチェックアウトした第 2 の作業ディレクトリです。ブランチ切り替えと違って何も stash されません:メインのチェックアウトも各ワークツリーも同時に使えるまま — まさに並列エージェントが求めるものです。

    Worktrees diagram showing one Git repository fanning out into three folders labeled ../main, ../feature1 and ../feature2, each checked out on its own branch
    1 つのリポジトリに複数の作業フォルダ:../main、../feature1、../feature2 がそれぞれ別ブランチに同時に載っています。0:30 から視聴
  3. 3

    --worktree を付けて Claude Code を起動する

    リポジトリ内で claude --worktree(短縮形 claude -w)を実行します。Claude Code は .claude/worktrees/<name> を作り、名前を渡さなければ bright-tumbling-rabbit のような名前を生成し、セッションをそのコピーへ直送します。デスクトップアプリでは、セッション開始時にワークツリーのオプションを選びます。

    Claude Code v2.1.50 welcome banner after launching claude --worktree in the demo-app repo, with the session working directory set to .claude/worktrees/bright-tumbling-rabbit
    ウェルカムバナーの作業ディレクトリはすでに .claude/worktrees の中 — 以降のすべてはコピー内で起きます。1:22 から視聴
  4. 4

    2 つ目のタスク用にセッションをもう 1 つ開く

    別のターミナルでもう一度 claude --worktree を実行します。名前を渡さなければ独立したワークツリーがもう 1 つ手に入り、同じ名前を 2 回渡せば同じものを再オープンします。各エージェントは自分のディレクトリしか見えないため、2 つのエージェントが同じプロジェクトを同時に編集できます。

パート 2 — ファイルとコマンドの行き先

  1. 5

    .claude/worktrees 配下の完全コピーを確認する

    フォルダをファイラーで開いてみてください:各ワークツリーは完全なチェックアウトで、専用の index.html、専用の .claude/settings.local.json、専用の git ファイルを持ち、重いオブジェクトデータベースはメインの .git に共有されたままです。だからコピーをもう 1 つ作るのはほぼ無料なのです。

    macOS Finder window listing .claude/worktrees with clever-munching-toast and spicy-napping-otter copies behind two browser tabs, each worktree holding its own git folder and index.html
    ディスク上の 2 つのワークツリー — clever-munching-toast と spicy-napping-otter — どちらも専用の git フォルダと index.html を持つ完全なプロジェクトコピーです。1:50 から視聴
  2. 6

    コマンドがワークツリー内にとどまることを確認する

    最初のセッションがブラウザでページを開くと、権限プロンプトはパスが .claude/worktrees/clever-munching-toast を指していることを示します — メインのチェックアウトではありません。Claude Code はサブエージェントがメインのチェックアウトを直接編集するのもブロックし、この分離チェックの 1 つはオフにできません。

    Claude Code permission prompt for an open command targeting .claude/worktrees/clever-munching-toast/index.html, showing the session working only inside its own worktree copy
    承認ダイアログにはワークツリーの正確なパスが示され、セッション 1 が触れるのは自分のプロジェクトコピーだけだと証明しています。1:42 から視聴
  3. 7

    ワークツリーに名前を付ける/PR から分岐する(任意)

    claude --worktree feature-auth なら名前付きワークツリーが予測可能に作られ、同じ名前を再度実行すれば複製ではなく再オープンします。クォートした PR 番号(claude --worktree "#1234")や GitHub/GitLab の PR URL を渡せば、そのプルリクエストのワークツリーが .claude/worktrees/pr-<number> に作られます。

パート 3 — 並列サブエージェントとクリーンアップ

  1. 8

    ワークツリー分離付きの並列サブエージェントを頼む

    分離はターミナルを超えてスケールします。「5 つの異なるサブエージェントを spawn して 5 つのバリエーションを作り、git worktree 分離を活用して」という 1 つのプロンプトで、Claude Code は Task エージェントをそれぞれ独立したワークツリーで起動し、衝突なく同じリポジトリに同時に取り組みます。

    Claude Code spawning five Task agents in parallel after a single prompt requesting creative SaaS landing page variations with git worktree isolation
    5 つの Task エージェントが並列に spawn — 各々が自分の分離 git worktree で作業すると告知されています。2:42 から視聴
  2. 9

    各エージェントが自分のレーンで走るのを見る

    タスクリストには 5 つのバリエーションすべてがツール使用とトークン数つきで並ぶため、ターミナルを 5 つ開かずとも進捗が見えます。サブエージェントのトランスクリプトはメインスレッドのコンテキストに載らないので、エージェントたちが重い持ち場を担う間も、指揮するセッションはコンパクトに保たれます。

    Claude Code task list with all five SaaS landing page subagents mid-run, each labeled with tool uses and token counts while isolated in its own worktree
    走行中の 5 つのサブエージェント — Variation 1 はすでに 50.3k トークンで完了、他は各自のワークツリーでファイルを読んでいます。3:42 から視聴
  3. 10

    バリエーションを比較し、勝者をマージする

    エージェントが完了すると、Claude Code は各バリエーションとその .claude/worktrees/agent-<id>/ パスを一覧表示するので、ブラウザで並べて開けます。気に入ったものは、そのワークツリーブランチを普通に git merge する(または PR を出す)だけで出荷できます — 衝突があれば、他の Git マージと同じように解決します。

    Claude Code summary listing five landing page variations with their .claude/worktrees/agent-prefixed index.html paths next to a rendered dark FlowSync preview
    サマリーは各バリエーションと .claude/worktrees のパスを示し、レンダリング結果の 1 つがリストの隣に開いています。4:22 から視聴
  4. 11

    分離を再利用可能なサブエージェントとして保存する

    ワークツリー分離を常時化するには、お願いするだけです:「フロントエンド開発者のサブエージェントを作って、Haiku モデルを使い、ワークツリー分離を活用して」。Claude Code は自らのエージェントドキュメントを調べ、.claude/agents/ 配下に新しいファイルを書いてくれます。

    Claude Code accepting a natural-language request to create a front-end developer subagent with Haiku that leverages work tree isolation
    自然言語で十分 — Claude Code はファイルを書く前に、カスタムエージェントの形式を自分のドキュメントで確認します。5:42 から視聴
  5. 12

    isolation: worktree フロントマターを確認する

    生成された frontend-dev.md には name、description、model: haiku、ツールのホワイトリスト、そして — 新しい行 — isolation: worktree が含まれます。以降、このサブエージェントの実行は毎回一時ワークツリーで行われ、変更なしで終われば自動削除されます。

    Claude Code writing the .claude/agents/frontend-dev.md subagent file with isolation: worktree in its YAML frontmatter so every future run gets its own worktree
    フロントマター 8 行目の isolation: worktree — これがこのサブエージェントの全実行に専用ワークツリーを与えます。6:42 から視聴
  6. 13

    マージしたら、クリーンアップは Claude に任せる

    セッションを終了すると、Claude Code はワークツリーを点検します:クリーンな名前なしワークツリーは自動削除、作業のあるものは保持/削除を尋ねられ — 保持すれば後で使える claude --worktree <name> --resume コマンドを出力します。ヘッドレスの -p 実行は決してクリーンアップしないので、git worktree remove で削除してください。

Claude Code ワークツリー vs 手動 git worktree add

ワークツリー自体は何年も前から Git にあります — 新しいのは、Claude Code がそのライフサイクル全体を管理することです。効いてくる違いは:

  • 1作成:手作業なら git worktree add ../project-feature -b feature を実行し、cd して、Claude を起動します。claude --worktree なら 1 ステップで .claude/worktrees/<name> 内にセッションが着地し、名前は自動でも自分でも付けられます。
  • 2起点コミット:worktree.baseRef が開始点を制御 — fresh(デフォルト)はリモートのデフォルトブランチから、head は未 push のローカルコミットを引き継ぎます。特定ブランチを狙うフラグはなく、公式ドキュメントはその場合の手動 git worktree add を勧めています。
  • 3ドットファイル:プロジェクトルートの .worktreeinclude ファイルが、.env など gitignore されたファイルを各新しいワークツリーにコピーします。手作りワークツリーにはこの扱いはありません。
  • 4クリーンアップ:Claude Code は終了時にワークツリーを点検し、クリーンな名前なしものは自動削除、作業中のものは触る前に確認し、放置されたサブエージェントのワークツリーも定期的に掃除します。手動ワークツリーは完全に自己責任です。
  • 5ガードレール:分離チェックがサブエージェントによるメインチェックアウトの編集を止め、セッション再開時はそのワークツリーに戻されます。素の git worktree add にこうした安全網はありません。

土台はあくまで普通の Git です。VS Code のソース管理パネルは各ワークツリーとその変更を一覧し、マージは普通の git マージ、手作りと Claude 作りのワークツリーは同じリポジトリに共存 — タスクごとに道具を選べばいいのです。

ワークツリーの調子がおかしいとき

落とし穴のほとんどは、機能のバグではなく Git の基本が顔を出したものです。この 5 つがほぼすべての角をカバーします:

  • 1push が main に乗る。新鮮なワークツリーブランチは origin のデフォルトブランチを追跡するため、素の git push が main を狙えます。git push origin worktree-<name> と明示的に push し、main は保護しましょう。
  • 2ファイルやツールがない。gitignore されたファイル(.env、vendor ディレクトリ)や LFS などリポジトリローカルのフィルタドライバは新しいワークツリーに伝播しません。.worktreeinclude に列挙するか、ワークツリー内で git lfs pull とセットアップコマンドを実行しましょう。
  • 3起動が trust エラーで失敗する。信頼されていないディレクトリでは、claude --worktree はワークスペースの承認を促すエラーで終了します — 承認して再実行してください。(非対話の -p 実行はこのチェックをスキップします。)
  • 4マージ時に 2 つのワークツリーが衝突する。両方のタスクが同じファイル(ルート、サイドバー、package.json)を編集したら、マージ時の衝突解消は他の Git ワークフローと同じです。ワークツリーが取り除くのは実行中の衝突であって、意図の重複ではありません。
  • 5ヘッドレス実行後にワークツリーが残る。-p 実行は後片付けをしません。git worktree remove で手動削除してください(ロックされているなら先に git worktree unlock)。

セッションの足元からワークツリーを削除しても致命的ではありません:次の resume は起動ディレクトリにフォールバックし、紐付けが解消されるだけ。セッションの他の部分は壊れません。

FAQ

関連ガイド