Claude Code と git worktree で複数タスクを並列に進める手順

Claude Code 公開: 更新:

claude --worktree で隔離された並列セッションを起動する手順を解説します。.worktreeinclude による .env の持ち込み、メインのチェックアウトへの操作をブロックする隔離チェック、終了時の後片付けまでまとめます。

検証日 2026年10月10日 検証バージョン Claude Code v2.1.283 仕様変更が早い分野です。最新の公式ドキュメントも併せてご確認ください。 記事の作り方と検証手順
目次
  1. worktree でセッションを起動する
  2. 各 worktree の環境を用意する
  3. 競合しやすいポイントと対策
  4. 隔離チェックが実際にブロックするもの
  5. メインのチェックアウトと共有されるもの
  6. 後片付け
  7. 並列作業の設計のコツ
  8. まとめ

Claude Code は 1 セッションで 1 つのタスクを進めるのが基本です。「機能 A の実装」と「バグ B の修正」を同時に頼むと、同じ作業ディレクトリ上で変更が混ざり、差分の切り分けが難しくなります。

そこで使うのが git worktree です。同じリポジトリの履歴とリモートを共有しながら、ファイルとブランチだけを別に持つ作業ディレクトリです。Claude Code には worktree を作ってその中でセッションを開始する起動オプションがあるため、git のコマンドを自分で打つ必要はほとんどありません。

KEY POINT

この記事で分かること

  • --worktree での隔離セッションの起動と、Git 管理外のファイルの持ち込み
  • メインのチェックアウトへの操作をブロックする隔離チェックの内容
  • 終了時の後片付けと、worktree が残る条件

worktree でセッションを起動する

--worktree(短縮形 -w)に名前を渡します。

claude --worktree feature-auth

既定では、リポジトリのルート直下の .claude/worktrees/<名前>/ に、worktree-<名前> という名前の新しいブランチで作られます。別のターミナルで違う名前を指定すれば、2 つ目の隔離セッションが始まります。名前を省略すると bright-running-fox のような名前が生成されます。

前提が 2 つあります。worktree は既存のコミットから作られるため、リポジトリに少なくとも 1 つコミットが必要です(1 つもない場合は Failed to resolve base branch "HEAD": git rev-parse failed で失敗します)。また対話実行ではワークスペースの信頼が必要で、そのディレクトリで claude を一度も実行していない場合は、先に claude を起動して信頼ダイアログを承認します。claude -p --worktree は信頼チェックを飛ばします。

# worktree の中身がメインのチェックアウトで未追跡ファイルとして見えないようにする
echo '.claude/worktrees/' >> .gitignore

対話中に「worktree で作業して」と頼むこともでき、その場合は EnterWorktree ツールで作られます。.claude/worktrees/ の外のパスに入る場合は必ず承認を求められます。セッションの作業ディレクトリ・書き込み権限・CLAUDE.md などのプロジェクト設定がその場所に移るためで、権限ルールや「今後は確認しない」ではこの確認を抑制できません。

各 worktree の環境を用意する

worktree は新規のチェックアウトなので、開発環境は入っていません。Claude に依存関係をインストールさせるか、.claude/worktrees/ 配下のディレクトリで自分でセットアップを実行します。

.env のような Git 管理外のファイルは、プロジェクトルートに .worktreeinclude を置くと自動でコピーされます。記法は .gitignore と同じで、パターンに一致しかつ Git で無視されているファイルだけがコピーされるため、追跡済みのファイルが二重になることはありません。

.env
.env.local
config/secrets.json

これは Claude Code が git で作るすべての worktree に適用されます(サブエージェントの worktree、デスクトップアプリの並列セッションを含む)。

競合しやすいポイントと対策

競合症状対策
開発サーバーのポート2 つ目の npm run dev が起動失敗PORT=3001 npm run dev のように worktree ごとにポートを変える
データベース両方が同じローカル DB を変更DB 名を環境変数で分ける、または片方は DB を使わない作業にする
.envGit 管理外なので新しい worktree に存在しない元の worktree からコピーし、ポートや DB 名を書き換える
ビルドキャッシュ共有キャッシュを使うツールで不整合.next、dist などが worktree ごとに独立していることを確認する
Claude のセッション履歴--resume で別 worktree の履歴が出るセッションは作業ディレクトリ単位で保存されるため、正しいディレクトリで再開する

同じブランチを 2 つの worktree でチェックアウトできない

git は 1 つのブランチを複数の worktree で同時にチェックアウトすることを拒否します。--worktree が毎回 worktree-<名前> という新しいブランチを作るのはこのためです。

隔離チェックが実際にブロックするもの

セッションが worktree にいる間、Claude Code は次の 4 種類のツール呼び出しをブロックします。--worktree で起動した場合、EnterWorktree で入った場合、worktree セッションを再開した場合のいずれでも同じで、そのセッションが起動するサブエージェントにも適用されます。

チェックブロックされるもの
ファイル編集メインのチェックアウト内のパスを対象にした Edit・Write・NotebookEdit
コマンドの作業ディレクトリ作業ディレクトリがメインのチェックアウトに解決される、または外にあると確認できない Bash・PowerShell・Monitor コマンド
git のリダイレクトgit -C、--git-dir、GIT_DIR、GIT_WORK_TREE、先に cd するなどで git をメインのチェックアウトに向けるコマンド
コマンドの形コマンド文から「実行する git が worktree 内に留まる」と確認できない場合。コマンド名が実行時に決まる、構文を解析できない、${!name} のような展開を含むなど。このチェックは無効化できません

これらが見るのは、編集対象のパス、コマンドの実行ディレクトリ、コマンドの文字列です。シェルコマンドが実際にどのファイルへ書くかは追跡しないため、cp やシェルのリダイレクトでメインのチェックアウトへ書き込む操作はこれらでは拒否されず、通常の permissions とサンドボックスの設定に従います。

メインのチェックアウトと共有されるもの

共有されるもの内容
.git ディレクトリworktree 内の git コマンドはメインリポジトリの .git に書き込み、サンドボックスもその書き込みを許可するため、サンドボックス有効でも git commit が動く
プロジェクトスコープのプラグインメインのチェックアウトから入れたプラグインが同じリポジトリの worktree でも読み込まれる(v2.1.200 以降)
権限の承認Bash コマンドで「今後も許可」を選ぶとメインのチェックアウトの .claude/settings.local.json に保存され、どこでも効き、worktree を削除しても残る(v2.1.211 以降)
未追跡のスキル・エージェント・コマンドworktree 側に .claude/skills がない場合(自分の .claude/skills が Git 管理外のときなど)、メインのチェックアウトのプロジェクトスキルが読み込まれる。.claude/agents と .claude/commands も同様

新しい worktree はリモートの既定ブランチから分岐します。設定の worktree.baseRef を "head" にすると、ローカルの現在の HEAD から分岐し、push していないコミットも引き継げます。ブランチ名を指定することはできないため、特定の既存ブランチから始めたい場合は git で直接 worktree を作ります。

後片付け

対話セッションを終了するとき、Claude は worktree を削除すると失われる作業(変更・未追跡ファイル、サブモジュール内の未コミット作業、新しいコミット)の有無を確認します。

  • きれいな場合: 名前なしのセッションでは worktree とブランチが自動で削除されます。名前付きのセッションでは、残せるように先に確認されます。
  • 作業が残っている場合: 残すか削除するかを確認されます。残すとディレクトリとブランチが保持され、あとで戻るための claude --worktree <名前> --resume コマンドが終了時に表示されます。削除するとディレクトリ・ブランチ・その中の作業がすべて消えます。
  • 状態を確認できない場合: 自動削除せず確認し、何を確認できなかったかを示します。

-p の非対話実行には終了時の確認がないため、worktree は作成時に取ったロックとともに残ります。削除は git worktree remove で、未コミットの変更があれば --force を付けます。ロックされていて git が拒否する場合は、先に git worktree unlock を実行します。

並列作業の設計のコツ

  • タスクを独立させる: 同じファイルを両方が触るタスクを並列にすると、マージ時に衝突します。先に Plan Mode で影響範囲を洗い出してから分けます。
  • 2〜3 並列まで: 人間が確認できる量には限りがあります。並列数を増やしても、レビューが追いつかなければ品質は下がります。
  • サブエージェントとの使い分け: 1 つのタスク内での並列(調査を複数の観点から同時に行うなど)は、worktree より サブエージェント が向いています。サブエージェントの編集も隔離したい場合は、定義の frontmatter に isolation: worktree を書きます。

まとめ

  • claude --worktree <名前> で .claude/worktrees/ 配下に worktree を作り、その中でセッションが始まる
  • worktree は新規のチェックアウト。依存関係はその場で入れ、.env は .worktreeinclude で持ち込む
  • 隔離チェックは編集・作業ディレクトリ・git のリダイレクトを止めるが、単純な cp は止めない
  • .git、プロジェクトのプラグイン、権限の承認はメインのチェックアウトと共有される
  • 対話セッションの終了時に、作業が残っている worktree の扱いを確認される。-p 実行では残る

よくある質問

git worktree と git clone を複数回するのは何が違いますか?
worktree は 1 つのリポジトリ(.git)を共有したまま作業ディレクトリだけを増やします。clone を繰り返すより容量が小さく、ブランチやスタッシュも共有されます。
各 worktree で npm install は必要ですか?
必要です。worktree は新規のチェックアウトなので node_modules はありません。Claude に入れさせるか、.claude/worktrees/ 配下のディレクトリで自分でセットアップを実行します。.env のような Git 管理外のファイルは .worktreeinclude で自動コピーできます。
Claude Code に worktree を作らせることはできますか?
--worktree(短縮形 -w)に名前を渡すと、Claude Code が .claude/worktrees/<名前>/ に worktree-<名前> ブランチで worktree を作り、その中でセッションを開始します。対話中に「worktree で作業して」と頼むと EnterWorktree ツールで作ることもできます。

参考にした一次情報

この記事は公式ドキュメントを基に AI が下書きを作成し、運営者が内容を確認して公開しています。誤りを見つけた場合は お問い合わせからお知らせください。