はじめに
Claude Codeを毎日使っていると、ある「もったいない時間」に気づく。複雑な実装タスクを投げると、Claudeが処理している間、画面の前でぼーっと待つしかない。
1タスクが5〜15分かかるとして、1日10タスクをシリアルにこなすと、純粋な「待ち時間」だけで1〜2時間になる。その時間、何もできていない。
解決策は並列化だ。Claude Codeチームが「単一で最大の生産性向上施策」と評価しているのが、Git Worktreesを使った複数セッションの同時実行だ。3〜4つのWorktreeで独立したClaudeセッションを走らせることで、1つが処理中でも残りが動き続ける。本記事ではその仕組みと実践方法を解説する。
なお、本記事は「人間が複数Claude Codeセッションを手動で並列運用する」話だ。「Claudeが複数のサブエージェントを自律制御する」マルチエージェント設計とはアングルが異なる。
Git Worktreesとは何か
簡単に仕組みから説明する。
通常のgitでは、1つのリポジトリで1つのブランチしか同時に展開できない。feature-aで作業中にfeature-bを確認したければ、ブランチを切り替えるしかない。
Git Worktreesはこれを解消する仕組みで、同一の .git ディレクトリを共有しながら、複数のブランチを異なるディレクトリに同時展開できる。
Git Worktrees使用時:
リポジトリ/ ← メインworktree(feature-a)
.git/ ← 単一の.gitを共有
../repo-feature-b/ ← 別ディレクトリにfeature-bを同時展開
../repo-bugfix/ ← さらに別ディレクトリにbugfixブランチ
リポジトリを複数クローンするよりディスク容量を節約できるのも利点だ。基本コマンドはシンプルで、git worktree add で追加、git worktree list で一覧確認、git worktree remove で削除できる。
3つのアプローチと選び方
Claude Codeで並列開発を実現するアプローチは3つある。どれを選ぶかは状況によるが、迷ったらこの基準で選べばいい。
初めて試す → ① --worktreeオプション(Claude Codeが全自動)
もう少し制御したい → ② 手動worktree(コマンドを自分で打つ)
依存管理が複雑 → ③ 複数クローン(最もシンプルな独立性)
アプローチ①:--worktree オプション(最も簡単)
Claude Codeがworktreeの作成・命名まで自動で行う。
# Claude Codeが自動でworktreeを作成してその中で起動
claude --worktree
# worktreeに名前を指定
claude --worktree --name feature-auth
# tmuxセッションと組み合わせる
claude --worktree --tmux
Claude Codeが「どのworktreeで動いているか」を認識した状態でセッションが始まるため、最初に試すならここから始めるのが一番ラクだ。
アプローチ②:手動でworktreeを作成して並列起動
# 3つのworktreeを作成
git worktree add ../myapp-feature-a feature-a
git worktree add ../myapp-feature-b feature-b
git worktree add ../myapp-bugfix bugfix-branch
# それぞれのディレクトリでClaude Codeを起動(別タブ/ターミナルで)
cd ../myapp-feature-a && claude
cd ../myapp-feature-b && claude
cd ../myapp-bugfix && claude
各Claude Codeセッションが独立したディレクトリで動くため、ファイル変更の競合が発生しない。
アプローチ③:複数クローン方式
Git Worktreesの設定が煩雑に感じる場合、リポジトリを複数クローンする方法もある。Claude Code開発者のBoris Cherny本人もこの完全独立checkout方式を採用している——物理的にディレクトリを分離することでセッション間の干渉を根本から排除できるためだ。node_modulesなど依存管理が複雑なプロジェクトでは、こちらの方がシンプルに動くことがある。
並列開発の実践パターン
パターン①:PR待ち時間をゼロにする
従来は feature-a の実装が終わるまで feature-b に手をつけられなかった。Worktrees導入後は全てが同時進行し、PRのレビュー待ち中に別機能を実装できる。
[worktree-feature-a] Claude Codeが実装中...
[worktree-feature-b] PRレビューコメントに返信中...
[worktree-bugfix] バグ調査・修正中...
パターン②:カスケード方式(タブ管理)
[永続タスク] [feature-a] [feature-b] [調査] [ドキュメント]
← 古い 新しい →
新タスクは右に新タブを開き、左から右へ順番にスイープして確認する。同時に集中するのは3〜4タスクまでが目安だ。それ以上は管理コストが高くなり生産性が低下する。
パターン③:バックグラウンドタスクとの組み合わせ
Git Worktreesは「独立したブランチで別機能を並列開発」したいときに使う。同一ブランチ内で時間のかかる処理を逃がすなら Ctrl+B のバックグラウンド実行、同じ文脈で別アプローチを試すなら /fork が適している。状況に応じて使い分けるのが現実的だ。
incident.ioとBoris Chernyの実践
incident.ioは4ヶ月前はClaude Codeをほとんど使っていなかったが、現在は4〜5つのClaude Codeエージェントを同時実行している。Worktreeによる完全環境分離で「AIとの並列開発チーム」を実現し、PR待ちの「空白時間」がなくなったという。
Claude Code開発者のBoris Cherny自身は、ローカルで5セッション、リモートで5〜10セッション、合計10〜15セッションを日常的に運用している。「セッションの一部は途中で破棄される——それは想定内。1つが行き詰まっても他が進み続ける」というスタンスだ。
セットアップのコツ:まず①タブ命名から
セットアップは段階的に進めるのがおすすめだ。
まず①:タブの命名から始める
難しい設定は一切不要で、ターミナルの各タブに作業名をつけるだけで管理が格段に楽になる。feature-auth、bugfix-api-500、refactor-user-model のように命名し、ターミナルアプリの色分け機能でタブを識別する。これだけで「今どのブランチで何をやっていたか」が一目でわかるようになる。
慣れてきたら②:エイリアスを追加する
alias c='claude' # 毎回打つのが面倒なので
alias cc='claude -c' # 前回の会話を継続
alias cr='claude -r' # 最近の会話一覧から選択
十分に慣れてから、カスタムコマンドとしてworktree作成を自動化するのも良い。~/.claude/commands/new-worktree.md にworktree作成手順を書いておけば、/new-worktree feature-auth の一発でブランチ作成からClaude Code起動まで済む。
注意しておくべき3つの落とし穴
並列数は3〜4が上限:5以上になると管理コストが高くなり生産性が低下する。「最小限の並列化でどれだけ成果を出せるか」という視点を忘れないでほしい。
同じファイルへの競合:複数のworktreeが同じファイルを編集すると後でマージコンフリクトが発生する。タスクのスコープを明確に分けてオーバーラップを最小化することが前提になる。
ディスク容量:各worktreeがnode_modulesを独立して持つ場合、ディスク容量を消費する。pnpmのモジュール共有機能を活用すると削減できる。
まとめ
ビフォーアフターをシンプルに示すとこうなる。
Before(1セッションのみ):タスクを投げて10分待ち、レビューして次のタスクを投げて10分待つ。1日10タスクで待ち時間だけで1〜2時間。
After(3〜4並列):タスクAを投げながらタスクBを投げ、タスクCを投げる。全てが同時進行し、切り替えのオーバーヘッドだけが残る。
まず claude --worktree を1回試してみてほしい。PR待ち中に別ブランチで別worktreeのClaudeを起動する習慣をつけるだけで、1日の中に空白時間があることが信じられなくなる。

コメント