Claude CodeはGit Worktreeを活用し、メインの作業ディレクトリを汚さずに別ブランチでの開発を並列実行できます。並列開発の安全性は、エージェントの賢さではなくディレクトリ構成という「仕組み」で担保するものです。
Claude CodeはGit Worktreeを活用し、メインの作業ディレクトリを汚さずに別ブランチでの開発を並列実行できます。並列開発の安全性は、エージェントの賢さではなくディレクトリ構成という「仕組み」で担保するものです。
ブログ目次
HubSpotゴールドパートナーのStartLinkが、HubSpot導入・AI活用・CRM整備・業務効率化までをまとめて支援しています。記事で気になったテーマを、そのまま相談ベースで整理できます。
Claude CodeはGit Worktreeを活用し、メインの作業ディレクトリを汚さずに別ブランチでの開発を並列実行できます。並列開発の安全性は、エージェントの賢さではなくディレクトリ構成という「仕組み」で担保するものです。
「AIに任せた作業とレビュー対応がぶつかって、どちらの変更か分からなくなった」「ブランチを切り替えるたびにstashして、戻すのを忘れて事故った」「複数のClaude Codeを同時に立ち上げたら、同じファイルを取り合って壊れた」——並列開発を試した現場から、こうした声をよく聞きます。
Git Worktreeとは、1つのGitリポジトリから複数の作業ディレクトリ(ワークツリー)を作成する機能です。作業がディレクトリ単位で物理的に分かれるため、複数のエージェントが同時に動いてもファイルの上書き競合が起きません。本記事では、この仕組みをClaude Codeの並列開発にどう組み込むかを、設計の考え方から運用のルールまで整理します。
本記事は、Claude Codeの実践シリーズの一部です。AI活用の全体像はAI活用完全ガイドで解説しています。
Claude Codeを1つのウィンドウで使っていて、そろそろ並列で動かしたいと考えている開発者・開発リーダーの方に向けて、設計の考え方から運用のルールまでをまとめました。
git checkoutが作業ディレクトリを置き換えるのに対し、ワークツリーは別ディレクトリに展開します。この差が並列開発の可否を決めます。node_modulesや.envの扱い、同一ブランチを複数チェックアウトできない制約など、正直な限界を書きます。最後まで読むと、自分のチームに合ったワークツリーの配置ルールとクリーンアップ運用を、自分で設計できるようになります。
まず前提となる概念を整理します。Git Worktreeは、1つのGitリポジトリから複数の作業ディレクトリを作成する機能です。通常、Gitリポジトリには作業ディレクトリが1つしかありませんが、git worktree addコマンドで別のディレクトリに別ブランチをチェックアウトできます。この「1リポジトリ=1作業場所」という暗黙の前提を外すことが、並列開発の出発点になります。
git checkoutによるブランチ切り替えとの違いを整理すると、次のようになります。
| 操作 | 従来(git checkout) |
Git Worktree |
|---|---|---|
| ブランチ切り替え | 作業ディレクトリの中身が置き換わる | 別ディレクトリに新しいブランチが展開される |
| 未コミットの変更 | stashまたはコミットが必要 | そのまま残せる |
| 同時作業 | 1ブランチのみ | 複数ブランチを同時に操作可能 |
| ファイル競合リスク | ブランチ切り替え時に発生しうる | ディレクトリが分離しているため発生しない |
表の4行目が、この記事の核心です。人間が1人で作業している限り、git stashの運用ルールを徹底すれば何とかなります。しかしClaude Codeのようなエージェントが複数同時に動く環境では、ワークツリーによる物理的なディレクトリ分離が前提になります。同じディレクトリで複数のエージェントがファイルを変更すると、意図しない上書きが発生するためです。
並列開発の事故対策には、大きく2つのアプローチがあります。1つは運用ルールで防ぐ方法、もう1つは構造で防ぐ方法です。
| アプローチ | 具体例 | 弱点 |
|---|---|---|
| 運用ルールで防ぐ | 「同じファイルを触るタスクは同時に出さない」と申し合わせる | 人が増えると守られなくなる/新人に引き継げない |
| 構造で防ぐ | ワークツリーでディレクトリを分け、そもそも同じファイルが存在しない状態にする | 初期設定の学習コストがかかる |
私たちは一貫して、人の注意力に依存する運用より、仕組みで事故を起こせなくする設計をおすすめしています。ワークツリーは後者の典型で、「気をつける」を「そもそも物理的に起こり得ない」に変換する仕組みです。属人的な注意力ではなく構造で担保されるため、チームに新しいメンバーが入っても同じ品質で回ります。
この構図は、営業データをExcelで複数人管理しているときの問題とよく似ています。同じファイルを複数人が開いて編集すると、誰の変更が残ったのか分からなくなり、「最新版_最終_v3.xlsx」が量産されます。解決策は「気をつけて編集する」ではなく、レコード単位で排他が効くデータベースに移すことです。
ワークツリーも発想は同じで、作業の単位を物理的に切り分けることで、衝突そのものを構造から取り除きます。ツールは違っても、「共有資源への同時書き込みをどう設計するか」という課題の形は共通しています。
ここからClaude Code側の挙動に入ります。Claude Codeには、ワークツリーを自動的に作成・管理する機能が組み込まれています。利用者が毎回コマンドを打たなくても、新しいブランチでの作業開始時にエージェント側でワークツリーを用意する動きになります。
Claude Codeで新しいブランチを作成して作業を始める場合、エージェントが自動的にワークツリーを作成します。複数のClaude Codeインスタンスで並列実行する際にも、各タスクが独立したワークツリーで実行されます。ディレクトリ構成としては、次のような形になります。
メインディレクトリ: ~/project/
├── .git/ ← 共有のGitオブジェクトDB
├── src/ ← mainブランチの作業ディレクトリ
└── ...
ワークツリー: ~/project/.worktrees/feature-auth/
├── src/ ← feature-authブランチの作業ディレクトリ
└── ...
ワークツリー: ~/project/.worktrees/fix-bug-123/
├── src/ ← fix-bug-123ブランチの作業ディレクトリ
└── ...
注目したいのは、.git/が1つだけである点です。履歴やオブジェクトは共有され、作業ディレクトリだけが増えていきます。このあと説明するディスク容量の話も、共有リソースの注意点も、すべてこの構造から導かれます。
自動任せにせず、Claude Codeのセッション中に手動でワークツリーを操作することも可能です。仕組みを理解しておくと、想定外の状態になったときに自分で戻せます。
# 新しいワークツリーを作成
git worktree add ../.worktrees/feature-new-api feature-new-api
# ワークツリーの一覧を確認
git worktree list
# 不要になったワークツリーを削除
git worktree remove ../.worktrees/feature-new-api
上の画面は、本記事で扱うgit worktree add・git worktree list・git worktree removeなどのコマンドと、git checkoutとの対比をターミナル上に並べたものです。先頭行はバージョン確認の出力で、それ以外は入力するコマンドの形を示しています。

Claude Codeに「feature-new-apiブランチでワークツリーを作成して、そこでAPI実装を進めてください」と指示すれば、上記のコマンドを自動で実行します。こうした指示は、目的と制約を明示するほど正確に実行されます。
ここで押さえておきたいのは、AIと人間の役割分担です。ワークツリーの作成・一覧確認・削除といった定型のGit操作はAIに任せて問題ありません。一方で「どのタスクを並列にするか」「どのブランチを切るか」というタスク分割の判断は、プロダクトの構造とチームの事情を知っている人間が決めるべき領域です。私たちは、HubSpotの導入支援でも定型作業は仕組みに任せ、最終判断は人が持つ設計をおすすめしており、Claude Codeの並列開発でも同じ考え方が当てはまると考えています。指示の書き方はClaude Codeのプロンプト設計術で解説しています。
ワークツリーの使い道は1つではありません。いきなり複数エージェントの同時実行から始めると、どこで事故が起きたのか分からなくなります。ここでは実務でよく使う3パターンを、理解しやすい順に整理します。
大規模なプロジェクトでは、複数のClaude Codeインスタンスが同時に異なる機能を開発するケースがあります。
エージェントA: feature-auth ブランチ(認証機能実装)
→ ワークツリー: .worktrees/feature-auth/
エージェントB: feature-dashboard ブランチ(ダッシュボード実装)
→ ワークツリー: .worktrees/feature-dashboard/
エージェントC: fix-performance ブランチ(パフォーマンス改善)
→ ワークツリー: .worktrees/fix-performance/
各エージェントは物理的に別のディレクトリで作業するため、ファイルの競合が発生しません。それぞれが独立してコミット・プッシュ・PR作成まで完結できます。複数のAIエージェントが同時にコードを変更する場面ほど、ワークツリーによる物理的な分離の効果は大きくなると考えられます。
運用面の工夫として、どのウィンドウがどのワークツリーかを見分けやすくするため、テーマやステータスラインを変えておくと混乱を防げます。設定方法はClaude Codeの見た目カスタマイズをご覧ください。別ベンダーのAIにセカンドオピニオンを取らせる構成も可能で、その手順はClaude CodeとCodexの連携方法で解説しています。
3パターンの中で最も始めやすいのがこれです。PRのレビュー待ちの間に別の作業を進めたい場合に有効で、エージェントは1つのままでも効果が出ます。
# 現在の作業をPRとして提出
git push origin feature-current
gh pr create --title "機能A実装"
# 別のワークツリーで新しい作業を開始
git worktree add ../.worktrees/feature-next -b feature-next
cd ../.worktrees/feature-next
Claude Codeに「現在のブランチのPRを作成してから、新しいワークツリーで次の機能開発に着手してください」と指示すれば、このフローを自動で実行します。レビューの修正指摘が来たら、元のワークツリーに戻って対応できます。ここでstashが不要になる点が効いていて、「戻すのを忘れる」という事故がそもそも発生しません。
外出中に指摘が届いた場合は、Claude Codeのリモート操作方法で手元の端末から対応を始められます。Claude Codeを使った経営データの可視化やコンテンツマーケティングにも、こうした並列の考え方が活かされています。
Claude Code SDKを使えば、複数のタスクを並列で実行できます。各タスクは独立したワークツリーで実行されるため、タスク間の干渉を気にする必要がありません。
SDK経由で3タスクを並列実行:
タスク1: 「テストを追加」 → .worktrees/task-1/
タスク2: 「ドキュメント更新」 → .worktrees/task-2/
タスク3: 「リファクタリング」 → .worktrees/task-3/
各タスクが完了すると、それぞれ独立したPRが作成されます。レビューとマージは個別に進められます。ただし、並列度を上げるほど人間側のレビュー負荷は積み上がります。PRが同時に何本も並ぶと、結局レビューがボトルネックになって並列化の効果が相殺されるケースがあります。並列度は「同時に自分がレビューできる本数」を上限に考えるのが現実的です。
| パターン | 向く場面 | 必要なエージェント数 | 最初の一歩としての適性 |
|---|---|---|---|
| パターン2(レビュー分離) | レビュー待ち時間が長いチーム | 1 | 高い |
| パターン1(機能並列開発) | 独立性の高い機能が複数ある | 2〜3 | 中程度 |
| パターン3(SDK並列実行) | 定型タスクを一括で回したい | プログラム制御 | 低い(設計が前提) |
まずはパターン2のレビュー待ち中の別作業から始めて、事故なく回ることを確認してからパターン1へ広げるのが実務的な順序です。いきなり並列度を上げず、チームの開発フローに合わせて段階的に拡大していくほうが、結果的に定着します。
ここからは設計の話です。ワークツリーをどこに置くかは、IDEの検索挙動、.gitignoreの運用、チームメンバーの認知負荷に直結します。汎用的な正解はなく、リポジトリの構成とチームの習慣によって最適解は変わります。
ワークツリーの配置場所には、プロジェクトの外に置くパターンとプロジェクト内に置くパターンがあります。
| 配置パターン | パス例 | メリット | デメリット |
|---|---|---|---|
| プロジェクト外 | ../project-worktrees/feature/ |
IDEの検索対象に含まれない | パスが長くなる |
| プロジェクト内 | .worktrees/feature/ |
管理しやすい | .gitignoreに追加が必要 |
| 隠しディレクトリ | ~/.claude-worktrees/project/feature/ |
完全に分離 | プロジェクトとの距離が遠い |
Claude Codeのデフォルトでは、プロジェクト内の.worktrees/ディレクトリにワークツリーが作成されます。.gitignoreに.worktrees/を追加しておくことをおすすめします。これを忘れると、ワークツリーの中身がGitの差分として見えてしまい、レビューのノイズになります。
選択の判断軸は、おおむね次の3点に整理できます。
~/.claude-worktrees/配下にリポジトリ名でまとめる形が管理しやすくなります。ただし、企業様によって最適な形は異なります。モノレポで1リポジトリのサイズが大きい場合と、小さなリポジトリを多数抱えている場合では、答えは変わります。まずはデフォルトのプロジェクト内配置で運用してみて、検索の誤ヒットや認知負荷が問題になった時点で移すのが、無駄の少ない進め方です。
配置パターンを決めたら、それを個人の記憶に置かず、リポジトリのドキュメントに書き残します。CLAUDE.mdに「ワークツリーは.worktrees/配下に作成する」「ブランチ名とディレクトリ名を一致させる」といったルールを明記しておけば、Claude Code自身がそのルールに従って動きます。
これは、SFAで不要なプロパティが乱立しないように入力ルールを設計するのと同じ発想です。ルールを人の頭ではなくシステム側に置くことで、担当者が変わっても同じ運用が続きます。引き継ぎ資料を書かなくても新しいメンバーが同じ形で作業できる状態が、仕組み化のゴールです。
ワークツリーは作るのは簡単ですが、消すのを忘れがちです。長期間運用していると、マージ済みブランチのワークツリーが残り続け、どれが生きている作業か分からなくなります。ここは運用ルールを決めておく価値が大きい領域です。
定期的なクリーンアップには、次の3つのコマンドを使います。
# マージ済みワークツリーの一覧確認
git worktree list
# 不要なワークツリーを削除
git worktree remove .worktrees/feature-completed
# 残骸の一括クリーンアップ
git worktree prune
Claude Codeに「マージ済みブランチのワークツリーをクリーンアップしてください」と指示すれば、上記の操作を安全に実行します。ここでも、一覧を取って判断する部分はAIに任せられますが、「このブランチはまだ使う予定があるか」の最終判断は人間が持ったほうが安全です。
「定期的に掃除しましょう」という呼びかけは、たいてい守られません。そこで、削除のタイミングを作業フローの特定イベントに紐づけます。
| トリガー | やること | 担当 |
|---|---|---|
| PRがマージされたとき | 対応するワークツリーをgit worktree removeで削除 |
作業者(Claude Codeに指示) |
| 週次の開発ミーティング前 | git worktree listで棚卸し、不要分を削除 |
開発リーダー |
| ブランチを新規作成するとき | 同名の残骸がないか確認してから作成 | 作業者 |
ポイントは、「気づいたら掃除する」ではなく「この操作をしたら、これもやる」という形にすることです。営業がステージを進めるときに必須入力プロパティを設定しておくと、入力漏れが構造的に起きなくなるのと同じ考え方です。人の善意ではなく、フローの中に組み込んで初めて継続します。
クリーンアップを完全自動化したくなりますが、そこは慎重に設計したほうがよい部分です。未コミットの変更が残っているワークツリーを自動削除すると、作業内容が失われます。自動化するとしても、削除対象の一覧を提示して人が確認してから実行する形をおすすめします。
AIエージェントに削除系の操作を委ねる場合も同様で、実行前の確認を挟む運用のほうが安全です。破壊的な操作は、便利さより復旧可能性を優先する——これは、AIを業務に組み込むときの一般的な原則だと考えています。
ここまでの内容を整理すると、ワークツリーを事故なく運用するための工夫は、次の3点に集約できます。
node_modulesや.envの扱いを事前にドキュメント化するこの3点は個別のTipsではなく、セットで設計して初めて効果が出ます。どれか1つだけ整えても、別の箇所で残骸や事故が発生しやすくなります。
ワークツリーは万能ではありません。導入後につまずきやすいポイントを、率直に書いておきます。ここを知らずに始めると、「ワークツリーを作ったのにビルドが通らない」という状態になりがちです。
ワークツリーは独立したディレクトリですが、.gitオブジェクトデータベースは共有しています。逆に言えば、Git管理外のものは共有されません。
node_modulesや.venvはワークツリーごとに独立して存在するため、各ワークツリーでnpm installやpip installが必要です.envファイルはGit管理外のため、ワークツリーには自動的にコピーされません。手動でコピーするか、シンボリックリンクを設定してくださいpackage-lock.json、poetry.lock)はブランチごとに異なる可能性があるため、ワークツリー作成後に依存関係の再インストールをおすすめしますこの3点は、ワークツリーを作ったあとの初期セットアップ手順としてCLAUDE.mdに書いておくと、毎回の手戻りがなくなります。
Gitの仕様上、同じブランチを複数のワークツリーで同時にチェックアウトすることはできません。各ワークツリーは異なるブランチを担当する必要があります。「同じブランチで2つのエージェントに別々の作業をさせる」という使い方はできないため、タスク分割の段階でブランチを分ける前提で設計します。
| 状況 | 理由 | 代替の考え方 |
|---|---|---|
| 依存関係のインストールに非常に時間がかかる | ワークツリーごとに再インストールが必要で、並列化の利得が相殺される | 並列度を落とし、1ブランチずつ進める |
| 変更が同じファイルに集中するタスク | ディレクトリは分かれてもマージ時に競合する | タスクを直列化するか、分割の粒度を見直す |
| 1人で1タスクずつ進めている | 分離の必要性が薄く、管理対象だけ増える | 通常のgit checkoutで十分 |
正直なところ、ワークツリーは「並列作業をしている人・チーム」にとっての道具です。1タスクずつ丁寧に進めているなら、導入しないほうがシンプルに回ります。ツールを入れること自体が目的にならないよう、自分の作業スタイルに照らして判断していただければと思います。
ワークツリーは単体で価値を出す機能というより、Claude Codeの開発フロー全体を支える土台です。ここでは、SDK・パーミッション設定との関係を整理します。
Claude Code SDKを使えば、プログラムから複数のワークツリーを作成し、並列でタスクを実行できます。
import { claude } from "@anthropic-ai/claude-code";
const tasks = [
{ branch: "feature-auth", prompt: "認証機能を実装してください" },
{ branch: "feature-api", prompt: "REST APIを実装してください" },
];
const results = await Promise.all(
tasks.map((task) =>
claude({
prompt: task.prompt,
options: {
maxTurns: 30,
cwd: `/path/to/project/.worktrees/${task.branch}`,
},
})
)
);
cwdにワークツリーのパスを渡している点が本質です。各インスタンスの作業場所を明示的に分けることで、並列実行の安全性がコード上で担保されます。逆に言えば、cwdを分け忘れると同じディレクトリで複数タスクが動いてしまうため、SDK利用時はここを設計上の必須項目として扱うことをおすすめします。
ワークツリーでの作業は、メインディレクトリと同じパーミッション設定が適用されます。.claude/settings.jsonはメインリポジトリの設定が共有されるため、ワークツリーごとに権限を変える必要はありません。
設定が一元化されているのは運用上ありがたい一方で、「このワークツリーだけ権限を緩める」といった細かい調整はできないことを意味します。権限設計はリポジトリ単位で一度しっかり決め、その設定が全ワークツリーに効くという前提で組み立ててください。
ワークツリーを、Claude Codeを使った開発の流れの中に置くと、次のような位置になります。これは、HubSpotで1つの商談がコンタクト獲得から契約・請求まで複数のフェーズを通過し、各フェーズで異なる機能が連携するのと同じ発想です。ワークツリーも単体の機能として覚えるより、フェーズごとの役割で理解するとつながりが見えます。
| フェーズ | やること | ワークツリーの役割 |
|---|---|---|
| タスク分割 | 人間が並列可能な単位に分ける | 分割の粒度がワークツリーの数を決める |
| 実装 | Claude Codeが各ブランチで作業 | 作業場所を物理的に分離する |
| PR作成・レビュー | ブランチごとに独立してPR | 並列度=同時レビュー本数の上限 |
| マージ・後片付け | ワークツリーを削除 | 残骸を残さない運用がここに入る |
この表で見ると、ワークツリーは実装フェーズだけの話ではなく、タスク分割から後片付けまでの一連の流れに関わっていることが分かります。個別のコマンドとして覚えるのではなく、開発フロー全体の設計要素として捉えると、導入判断がしやすくなります。
いいえ、Gitのオブジェクトデータベース(.git/)は全ワークツリーで共有されるため、リポジトリの履歴データは重複しません。増えるのは作業ディレクトリのファイル(ソースコード、node_modulesなど)のみです。ソースコード自体のサイズは通常小さいため、実質的な増加はnode_modulesなどの依存関係が主です。
ファイルシステム上は完全に分離されているため、あるワークツリーでの変更が別のワークツリーのファイルに影響することはありません。ただし、同じブランチを複数のワークツリーで同時にチェックアウトすることはGitの仕様上できません。各ワークツリーは異なるブランチを担当する必要があります。
Claude Codeのデフォルト設定では、プロジェクトルートの.worktrees/ディレクトリ配下に作成されます。git worktree listコマンドで全ワークツリーの場所を確認できます。不要になったワークツリーはgit worktree removeで削除するか、Claude Codeに「ワークツリーをクリーンアップしてください」と指示してください。
一律の正解はなく、レビューできる体制によって変わります。実装が並列化されてもレビューは人間が行うため、同時に走らせる数は「自分またはチームが同時にレビューできるPRの本数」を上限に考えるのが現実的です。まず2つから試し、レビューが滞らないことを確認してから増やすことをおすすめします。
git worktree removeは作業ディレクトリを削除する操作で、ブランチ自体は残ります。ブランチも不要であれば別途削除が必要です。逆に、ディレクトリだけを手動で消した場合はGit側に管理情報が残るため、git worktree pruneで残骸を整理してください。
Git Worktreeは、Claude Codeの並列開発能力を安全に引き出すための基盤技術です。物理的なディレクトリ分離により、複数エージェントの同時作業でもファイル競合が発生しません。本記事の要点を整理します。
node_modulesや.envは共有されないため、初期セットアップ手順をドキュメント化しておく最初の一歩としては、レビュー待ちの間に別作業を進めるパターン2から始めてください。次の3ステップで試せます。
.gitignoreに.worktrees/を追加するgit worktree addで次の作業用ワークツリーを1つ作るgit worktree removeし、削除までを1セットの手順として定着させるここまで回ったら、エージェントを2つに増やしてパターン1へ広げ、チームの開発フローに合わせて並列度を拡大していくのが実務的な進め方です。Claude Codeの全コマンド一覧はClaude Codeチートシート、AI活用の全体像はAI活用完全ガイドをご覧ください。
CRMを活用した業務効率化やAIとの連携に関するご相談は、CRM特化型コンサルティングのHubSpotゴールドパートナーのStartLinkまでお気軽にお問い合わせください。
株式会社StartLinkは、事業推進に関わる「販売促進」「DXによる業務効率化(ERP/CRM/SFA/MAの導入)」などのご相談を受け付けております。 サービスのプランについてのご相談/お見積もり依頼や、ノウハウのお問い合わせについては、無料のお問い合わせページより、お気軽にご連絡くださいませ。
株式会社StartLink 代表取締役。累計150社以上のHubSpotプロジェクト支援実績を持ち、Claude CodeやHubSpotを軸にしたAI活用支援・経営基盤AXのコンサルティング事業を展開。
HubSpotのトップパートナー企業や大手人材グループにて、エンタープライズCRM戦略策定・AI戦略ディレクションを経験した後、StartLinkを創業。現在はCRM×AIエージェントによる経営管理支援を専門とする。