Worktrees で並列開発
重要キーワード (3 語)
git worktree
(ワークツリー)
— 同一リポジトリの複数ブランチを別ディレクトリで同時にチェックアウトする git 機能
EnterWorktree
(ワークツリー突入)
— Claude Code が isolation: worktree オプションで自動隔離する仕組み
Linked Worktree
(リンク済みワークツリー)
— メインリポジトリと .git を共有する別ディレクトリ
なぜ Worktrees?
Claude Code に 複数のタスクを同時に走らせる、または リスキーな作業を隔離する 場面で git worktree が劇的に効きます。
従来のフロー (worktree なし)
[main worktree]: 認証バグの根本修正 (Claude Code セッション 1)
[../docs worktree]: 関連ドキュメント更新 (Claude Code セッション 2)
[../tests worktree]: テストカバレッジ拡充 (Claude Code セッション 3)
→ 切替えごとに stash / checkout / 競合解決 が発生。Claude Code を 2 つ立ち上げて並行作業も難しい。
worktree を使うと
$ git worktree add ../experiment feat/oauth # 既に main にチェックアウト中
fatal: 'feat/oauth' is already checked out at '/home/user/my-app'
→ 2 つの別ディレクトリで別ブランチを同時にチェックアウト。stash 不要、お互い独立。 両方で同時に Claude Code を立てて並行作業できる。
基本コマンド
worktree を追加
rm -rf ../my-app-hotfix # 物理削除はしたけど git は知らない
git worktree list # まだ残ってる表示
git worktree prune # ← これで掃除
→ ../my-app-hotfix/ に新しい作業ツリーが作成され、hotfix/issue-42 ブランチがチェックアウトされる。
.git は元のリポジトリと共有 (容量を食わない)。
既存ブランチをチェックアウト
[main worktree]: 認証バグの根本修正 (Claude Code セッション 1)
[../docs worktree]: 関連ドキュメント更新 (Claude Code セッション 2)
[../tests worktree]: テストカバレッジ拡充 (Claude Code セッション 3)
レビュー用に PR ブランチを別ディレクトリに展開。
一覧を見る
$ git worktree add ../experiment feat/oauth # 既に main にチェックアウト中
fatal: 'feat/oauth' is already checked out at '/home/user/my-app'
削除
rm -rf ../my-app-hotfix # 物理削除はしたけど git は知らない
git worktree list # まだ残ってる表示
git worktree prune # ← これで掃除
Claude Code との連携: isolation: worktree
Claude Code の Agent ツール には isolation: "worktree" オプションがあります。
何が起きるか
---
name: weekly-slack-digest
description: ユーザーが Slack の #general の 1 週間ぶんメッセージ (URL or JSON) を貼り付けた時に、人事週報フォーマットで要約する
---
# 週次お知らせダイジェスト
1. メッセージを「重要 / お知らせ / 雑談」に分類
2. 「重要 / お知らせ」のみを Notion ページ用 Markdown で要約
3. 出力フォーマット: 見出し + 日付 + 投稿者 + 1 文サマリ
→ リスキーな実験をメインの作業ツリーから完全に隔離。最悪サブが暴走しても、メインの作業は無傷。
使い分け
| シーン | 推奨 |
|---|---|
| 確実に通したい変更 | メインで普通に作業 |
| 試してみたいリファクタ | isolation: worktree のサブ |
| 並行で複数案を試す | 各案を別 worktree で |
| 信頼度の低いコード生成 | 必ず worktree で隔離 |
並列パターン 1: 「同じタスクを 3 つの方法で試す」
wzxhzdk:4
これは 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>) |
❌ 適当な名前で増殖 |
✅ .gitignore の instance/ などを共有 |
❌ DB ファイルを worktree 間で共有 |
💡 worktree は git の隠れた最強機能。Claude Code 時代において再評価されています。
私は EC サイトを開発中です。次の 3 タスクを並行で進めるための git worktree 構成を提案してください。1) main の小さなバグ修正 2) 大規模なカート機能リファクタ (実験的) 3) リリースノートの執筆。各 worktree のディレクトリ名・ブランチ名・推奨される使い方を示してください。