← レッスンに戻る
第6章 · Claude Code応用

Worktrees で並列開発

Parallel Development with Worktrees · 約 12 分

重要キーワード

English日本語説明
git worktree ワークツリー 同一リポジトリの複数ブランチを別ディレクトリで同時にチェックアウトする git 機能
EnterWorktree ワークツリー突入 Claude Code が isolation: worktree オプションで自動隔離する仕組み
Linked Worktree リンク済みワークツリー メインリポジトリと .git を共有する別ディレクトリ

なぜ Worktrees?

Claude Code に 複数のタスクを同時に走らせる、または リスキーな作業を隔離する 場面で git worktree が劇的に効きます。

従来のフロー (worktree なし)

[main 作業ツリー]
  ├ feat/oauth ブランチで作業中
  ├ urgent: 緊急バグ修正したい
  ↓
  git stash             # 退避
  git checkout main
  git checkout -b hotfix/xxx
  # 修正...
  git checkout feat/oauth
  git stash pop         # 戻す  ← 競合の可能性

→ 切替えごとに stash / checkout / 競合解決 が発生。Claude Code を 2 つ立ち上げて並行作業も難しい。

worktree を使うと

my-app/                # メイン (feat/oauth ブランチ)
  └ claude (作業中)

my-app-hotfix/         # 別ディレクトリ (hotfix/xxx ブランチ)
  └ claude (緊急対応)

2 つの別ディレクトリで別ブランチを同時にチェックアウト。stash 不要、お互い独立。 両方で同時に Claude Code を立てて並行作業できる。

基本コマンド

worktree を追加

git worktree add ../my-app-hotfix -b hotfix/issue-42
cd ../my-app-hotfix
claude

../my-app-hotfix/ に新しい作業ツリーが作成され、hotfix/issue-42 ブランチがチェックアウトされる。 .git は元のリポジトリと共有 (容量を食わない)。

既存ブランチをチェックアウト

git worktree add ../my-app-review feat/review-pr-123

レビュー用に PR ブランチを別ディレクトリに展開。

一覧を見る

git worktree list
# /home/user/my-app          abc123 [feat/oauth]
# /home/user/my-app-hotfix   def456 [hotfix/issue-42]
# /home/user/my-app-review   789012 [feat/review-pr-123]

削除

# 1. 作業ツリーを削除
git worktree remove ../my-app-hotfix

# 2. ブランチも消すなら
git branch -d hotfix/issue-42

Claude Code との連携: isolation: worktree

Claude Code の Agent ツール には isolation: "worktree" オプションがあります。

何が起きるか

ユーザー: 「リスキーな大規模リファクタを試して」
   ↓
Claude (メイン) → Agent サブを isolation: worktree で起動
   ↓
[サブエージェント]
   git worktree add /tmp/cc-experiment-xxx -b cc-experiment-xxx
   cd /tmp/cc-experiment-xxx
   # ...作業...
   ↓
変更があれば: ブランチとパスを返す (人がレビュー → merge or 破棄)
変更がなければ: worktree を自動削除

リスキーな実験をメインの作業ツリーから完全に隔離。最悪サブが暴走しても、メインの作業は無傷。

使い分け

シーン 推奨
確実に通したい変更 メインで普通に作業
試してみたいリファクタ isolation: worktree のサブ
並行で複数案を試す 各案を別 worktree で
信頼度の低いコード生成 必ず worktree で隔離

並列パターン 1: 「同じタスクを 3 つの方法で試す」

ユーザー: 「キャッシュ層を Redis / Memcached / in-memory の 3 案で試して、
            それぞれ性能を計測したい」
   ↓
Claude (メイン) → 3 つの subagent を並列起動 (各 isolation: worktree)
   ├─ subagent A: ../experiment-redis     (cache/redis 実装)
   ├─ subagent B: ../experiment-memcached (cache/memcached 実装)
   └─ subagent C: ../experiment-inmemory  (cache/inmem 実装)
   ↓ 各々が pytest --benchmark を実行
   ↓
3 つの結果を集約 → ユーザーに比較表で提示

これは Claude Code を 真の並列開発機械 に変える使い方。

並列パターン 2: 「ベース修正 + 並行で関連タスク」

[main worktree]: 認証バグの根本修正 (Claude Code セッション 1)
[../docs worktree]: 関連ドキュメント更新 (Claude Code セッション 2)
[../tests worktree]: テストカバレッジ拡充 (Claude Code セッション 3)

→ 3 つの Claude Code を別 IDE タブで同時に動かせる。お互いの状態を意識せず作業可能。

注意とハマりどころ

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

$ git worktree add ../experiment feat/oauth   # 既に main にチェックアウト中
fatal: 'feat/oauth' is already checked out at '/home/user/my-app'

→ 別ブランチを切るか、-B で強制 (危険なので非推奨)。

② worktree のディレクトリを rm -rf で消した

rm -rf ../my-app-hotfix     # 物理削除はしたけど git は知らない
git worktree list           # まだ残ってる表示
git worktree prune          # ← これで掃除

③ submodule との相性

submodule を含むリポジトリでは worktree 作成後に git submodule update --init が必要。

④ IDE が worktree を別プロジェクトと認識する

VS Code は worktree を別 workspace として開く。共有設定 (.vscode/) はメインから symlink するか、各 worktree にコピー。

ベストプラクティス

やる やらない
✅ リスキーな実験は worktree で ❌ main 作業ツリーで実験
✅ 終わったら worktree remove rm -rf で物理削除
✅ 命名規約を決める (<repo>-<purpose>) ❌ 適当な名前で増殖
.gitignoreinstance/ などを共有 ❌ DB ファイルを worktree 間で共有

💡 worktree は git の隠れた最強機能。Claude Code 時代において再評価されています。

▶ Worktree 計画
私は EC サイトを開発中です。次の 3 タスクを並行で進めるための git worktree 構成を提案してください。1) main の小さなバグ修正 2) 大規模なカート機能リファクタ (実験的) 3) リリースノートの執筆。各 worktree のディレクトリ名・ブランチ名・推奨される使い方を示してください。

演習問題

演習 1: worktree で 3 案を並列実装

あなたのプロジェクトで、同じ問題を 3 つの異なるアプローチ で実装し比較してください。

: 「JSON ファイルのパース」を以下 3 案で: 1. worktree-stdlib: 標準 json モジュールのみ 2. worktree-pydantic: pydantic でバリデーション 3. worktree-orjson: orjson で高速化

手順:

git worktree add ../experiment-stdlib -b experiment-stdlib
git worktree add ../experiment-pydantic -b experiment-pydantic
git worktree add ../experiment-orjson -b experiment-orjson

各 worktree で Claude Code を立ち上げて実装 → ベンチマーク → 結果を比較。

スタータープロンプト:
このディレクトリで、JSON パースを <案名> で実装してください。requirements.txt を更新し、tests/test_parser.py に 5 ケース追加し、benchmark/run.py で計測。
ヒントを見る

3 つの worktree で同時に Claude Code を立ち上げると、計算リソースを並列で使えます。終わったら worktree remove で掃除を。

演習 2: isolation: worktree でリスキーリファクタ

Claude Code に大規模リファクタを依頼するとき、サブエージェントを isolation: worktree で起動するよう指示してください。

プロンプト:

大規模なディレクトリ構造変更を試したい。Agent ツールで isolation: worktree を使って、隔離環境で試行してください。完了したら worktree のパスとブランチ名を教えてください。

観察ポイント: - メインの作業ツリーが汚染されないこと - 試行が失敗してもメインに影響がないこと - 成功した場合は git merge で取り込めること

スタータープロンプト:
src/ の構造を Domain-Driven Design 風 (domain/, application/, infrastructure/) に再構成したい。リスキーなのでサブエージェントを isolation: worktree で起動して試してください。終了したら結果のパスとブランチを報告。
ヒントを見る

Agent ツールの isolation: worktree オプションは Claude Code が自動で worktree を作成・破棄します。変更があれば worktree を残し、なければ自動削除されます。

理解度チェック

  1. git worktree の主な利点は?
    1. GPU を使える
    2. 同一リポジトリの複数ブランチを別ディレクトリで同時にチェックアウトできる
    3. git の容量を 1/10 にする
    4. リモートにバックアップする
  2. Claude Code の Agent ツールの `isolation: "worktree"` オプションは何をする?
    1. Docker コンテナで隔離
    2. git worktree を一時ディレクトリに作成し、変更がなければ自動削除
    3. ブラウザの incognito モードで実行
    4. ファイルシステムを read-only にする
  3. worktree を物理削除 (rm -rf) してしまった後にやるべきは?
    1. git worktree prune で git の認識を掃除
    2. git fsck --recover
    3. git reset --hard
    4. リポジトリを clone し直す
  4. 次のうち worktree が **特に効く** シーンは?
    1. 1 人が 1 ブランチで 1 機能を作る通常開発
    2. 複数案を同時に試して比較したい時
    3. リポジトリを別マシンに移したい時
    4. submodule を増やしたい時
解答と解説を見る
  1. B — stash/checkout を頻繁に切り替えることなく、複数ブランチを別ディレクトリで並列に作業できます。
  2. B — isolation: worktree は git worktree で隔離環境を作り、リスキーな実験を main から守ります。変更がなければ自動クリーンアップ。
  3. A — git worktree prune で残った参照を掃除します。普段は git worktree remove を使う方が安全。
  4. B — 並列で複数案を試す・実験を隔離する用途で worktree は劇的に効きます。通常開発では使わなくても問題ありません。