はじめに
Claude Code にタスクを投げる。待つ。終わるまで暇。
「X見よ」「SNSで推しの更新を確認」「インスタで可愛い女の子見つける」
......気づいたら30分溶けてる。Claude のタスクはとっくに終わってるのに、自分はリールを無限スクロールしている。
効率がいいんだか悪いんだか、正直わからない。
そんな日々を過ごしていたときに出会ったのが、git worktree を使った並列コーディングです。
調べると「tmux を使えばターミナル分割できて〜」みたいな記事が出てくるんだけど、そもそも tmux そんなに使えねぇし、Vimmer でもない。 ターミナルをカッコよく使いこなすタイプのエンジニアじゃないんだわ。
じゃあもうダサくていいから VSCode で並列コーディングしよう! と思ったのがきっかけです。
結果、Claude が働いてる間に別の Claude にも働いてもらうという、SNS見るよりよっぽど生産的なスタイルが完成しました。
この記事では、tmux とか難しいこと一切なし、VSCode のウィンドウを複数開くだけでできる Claude Code の並列処理を、超雑魚でもわかるように解説します。
そもそも「並列処理」って何がうれしいの?
Claude Code でコードを書いてもらっているとき、こんな状況になりがち:
- Claude がコード書いてる → 暇 → SNS見る → 30分消える
- テスト書いてもらってる → 暇 → YouTube見る → 1時間消える
- レビュー待ち → 暇 → 気づいたら昼休み終わってる
要するに「Claude待ち」の時間がもったいなさすぎる。
並列処理は、この「暇」の時間に 別の Claude にも働いてもらう というだけの話です。
【Before: 直列処理】
機能A実装(20分)→ テスト作成(10分)→ バグ修正(15分)→ ドキュメント更新(10分)
合計: 55分
【After: 並列処理】
Claude ①: 機能A実装(20分)─────────────→
Claude ②: テスト作成(10分)→ バグ修正(15分)→
Claude ③: ドキュメント更新(10分)──→
合計: 約20分
体感3倍速です。
前提知識: なぜ「同じフォルダ」で複数 Claude Code を動かすとヤバいのか
ここが一番大事なところです。
同じディレクトリで複数の Claude Code を同時に動かすと、ファイルの編集が衝突します。
【事故例】
Claude ①: src/app.js の10行目を編集中...
Claude ②: src/app.js の10行目を別の内容で上書き!
→ Claude ① の変更が消える
これを防ぐのが git worktree です。
git worktree とは?
同じリポジトリの別ブランチを、別のフォルダとしてチェックアウトする仕組み です。
普通の git clone との違い:
| git clone | git worktree | |
|---|---|---|
.git の数 |
リポジトリごとに1つ | 共有(1つ) |
| ディスク使用量 | リポジトリ丸ごとコピー | 差分のみ |
| ブランチの関係 | 独立(push/pullで同期) | 同じリポジトリの一部 |
| 使い分け | 別プロジェクト感覚 | 同プロジェクトの並行作業 |
つまり 「同じプロジェクトだけど、物理的に別フォルダで作業できる」 のが git worktree です。
実践: セットアップ手順
Step 0: VSCode に拡張機能を入れる
並列開発を始める前に、VSCode に必要な拡張機能を入れておく。
必須: Claude Code 公式拡張機能
Anthropic 社が公式に出している VSCode 拡張機能。これを入れると、ターミナルで claude を叩かなくても VSCode のサイドバーから直接 Claude Code を操作できるようになる。
拡張機能の検索バーで「Claude Code」と検索
→ 発行元が「Anthropic」のものをインストール
VSCode の左サイドバーに Claude のアイコンが追加されて、そこからチャットUIでやり取りできる。ターミナルでコマンドを打つのと機能は同じだけど、各ウィンドウでサイドバーから Claude の状態が見えるので、並列で動かしているときに「このウィンドウの Claude、今何やってるんだっけ?」が一目で分かる。
おすすめ: Git Worktree 管理の拡張機能
| 拡張機能名 | 何ができるか |
|---|---|
| Git Worktrees | VSCode 上から worktree の作成・切り替え・削除ができる。コマンドを覚えなくていい |
| GitLens | git の履歴やブランチの可視化。どの worktree がどのブランチかが分かりやすくなる |
どっちも必須ではないけど、入れておくとターミナルで git worktree add ... を毎回打たなくてよくなるので楽。
Step 1: git worktree でブランチを作る
# プロジェクトのルートディレクトリで実行
cd ~/my-project
# 作業用のブランチを別フォルダに展開する
git worktree add ../my-project-feature-a -b feature/add-login
git worktree add ../my-project-feature-b -b feature/fix-dashboard
git worktree add ../my-project-tests -b chore/add-tests
これで以下のフォルダ構成になります:
~/
├── my-project/ ← 元のリポジトリ(mainブランチ)
├── my-project-feature-a/ ← feature/add-login ブランチ
├── my-project-feature-b/ ← feature/fix-dashboard ブランチ
└── my-project-tests/ ← chore/add-tests ブランチ
各フォルダは独立したディレクトリなので、ファイルの衝突が起きません。
Step 2: VSCode で各 worktree を開く
ターミナルからでも VSCode からでもOK:
# ターミナルから開く場合
code ~/my-project-feature-a
code ~/my-project-feature-b
code ~/my-project-tests
VSCode のメニューからやる場合は File > Open Folder...(Mac: Cmd+O)で各 worktree のフォルダを選択。新しいウィンドウで開くこと(既存のウィンドウで開くと上書きされる)。
開いたら、ウィンドウのタイトルバーにフォルダ名が表示されるので、どのウィンドウがどのタスクか一目で分かる:
ウィンドウ1: my-project-feature-a — Visual Studio Code
ウィンドウ2: my-project-feature-b — Visual Studio Code
ウィンドウ3: my-project-tests — Visual Studio Code
ウィンドウの切り替え方:
-
Mac:
Cmd + @で同一アプリのウィンドウを切り替え。または Dock の VSCode アイコンを長押しでウィンドウ一覧が出る -
Windows:
Alt + Tab、または タスクバーの VSCode アイコンにカーソルを合わせてプレビューから選択 -
共通: VSCode 内で
Ctrl + W(Windows)/Cmd + W(Mac)で ウィンドウ切り替えの Command Palette を使うことも可能
Step 3: 各ウィンドウで Claude Code を起動する
各 VSCode ウィンドウでターミナルを開いて(Ctrl + `)Claude Code を起動:
# ウィンドウ1(feature-a)のターミナル
claude
# ウィンドウ2(feature-b)のターミナル
claude
# ウィンドウ3(tests)のターミナル
claude
これで3つの Claude Code が、それぞれ独立したディレクトリで同時に動きます!
Step 4: 各 Claude に別々のタスクを投げる
【ウィンドウ1の Claude】
「ログイン機能を実装して。メールとパスワードでの認証で、
JWTトークンを使って。」
【ウィンドウ2の Claude】
「ダッシュボードのグラフが表示されないバグを修正して。
コンソールに "Cannot read property 'map' of undefined" って出てる。」
【ウィンドウ3の Claude】
「既存のユーティリティ関数のユニットテストを書いて。
Jest を使って、カバレッジ80%以上を目指して。」
あとは各 Claude が 並列で 作業を進めてくれます。
Step 5: 作業が終わったらマージする
各ブランチの作業が完了したら、元のリポジトリでマージします。
# 元のリポジトリに戻る
cd ~/my-project
# 各ブランチをマージ
git merge feature/add-login
git merge feature/fix-dashboard
git merge chore/add-tests
コンフリクトが発生したら、Claude Code に解決してもらいましょう:
「feature/add-login と feature/fix-dashboard のマージコンフリクトを解決して」
Step 6: worktree の後片付け
# 不要になった worktree を削除
git worktree remove ../my-project-feature-a
git worktree remove ../my-project-feature-b
git worktree remove ../my-project-tests
# 確認
git worktree list
アンチパターン集: こうするとハマる
ここからが本番です。やらかしポイント を先に知っておくと、無駄な時間を過ごさずに済みます。
アンチパターン 1: 同じディレクトリで複数 Claude を起動する
【ダメな例】
ターミナル1: cd ~/my-project && claude
ターミナル2: cd ~/my-project && claude ← 同じディレクトリ!
何が起きるか:
- 2つの Claude が同じファイルを同時に編集して 変更が上書きされる
-
git statusがカオスになる - 最悪、片方の作業が全部消える
対策: 必ず git worktree で別ディレクトリに分けてから起動する。
アンチパターン 2: 依存関係のあるタスクを並列にする
【ダメな例】
Claude ①: 「データベースのスキーマを変更して」
Claude ②: 「そのDBを使うAPIエンドポイントを新規作成して」
→ Claude ② が古いスキーマ前提でコードを書いてしまう
何が起きるか:
- Claude ② は worktree にある(まだ変更されていない)古いスキーマを見てコードを書く
- Claude ① の変更が終わっても、Claude ② の worktree には反映されない
- マージ時にコンフリクト地獄になる
対策: タスクの依存関係を整理してから並列化する。
判断基準: 「片方の変更を知らなくても、もう片方は正しく実装できるか?」→ Yes なら並列OK。
OK パターン(並列にしてよい)
| タスクA | タスクB | なぜOKか |
|---|---|---|
| ログイン機能の実装 | ダッシュボードのバグ修正 | 触るファイルが完全に別。お互いの存在を知らなくても問題ない |
| フロントエンドのCSS修正 | バックエンドのAPIテスト追加 | レイヤーが違う。フロントが変わろうがバックのテストには関係ない |
| README・ドキュメント更新 | リファクタリング | ドキュメントはコードの実行に影響しない。完全に独立 |
NG パターン(直列にすべき)
| タスクA | タスクB | なぜNGか |
|---|---|---|
| DBスキーマ変更 | そのテーブルを使うAPI実装 | API側が古いスキーマを見てコードを書く。マージしたら型が合わなくて全部書き直し |
| 共通コンポーネント作成 | そのコンポーネントを使う画面実装 | 画面側が「まだ存在しないコンポーネント」をimportしようとする。成果物がかみ合わない |
| パッケージ導入・設定変更 | そのパッケージを使った機能実装 | package.json や tsconfig をいじるブランチと、その設定前提で書くブランチが同時に動くとマージが壊滅的になる |
アンチパターン 3: worktree を作りすぎる
【ダメな例】
git worktree add ../proj-1 -b feature/a
git worktree add ../proj-2 -b feature/b
git worktree add ../proj-3 -b feature/c
git worktree add ../proj-4 -b feature/d
git worktree add ../proj-5 -b feature/e
git worktree add ../proj-6 -b feature/f
git worktree add ../proj-7 -b feature/g
→ 7個の Claude Code が同時に動いている...
→ VSCode のタスクバーに似たようなフォルダ名が7つ並んでいる...
何が起きるか:
- APIレート制限に引っかかる(Claude Code はAPIを叩いているので、同時に多すぎるとエラーになる)
- PCのメモリ・CPU が逝く
- VSCode のウィンドウが増えすぎて、どのウィンドウがどのタスクか分からなくなる
- マージ時にコンフリクトが多発して、結局やり直しになる
対策: まずは 2並列から始める。慣れてきたら3、4と増やしていく。筆者は今は4並列でやっている。ただし最初から4はやめとけ、確実にパニックになる。
ちなみに VSCode で worktree を管理するなら、ワークスペースにフォルダを追加する方法もある。File > Add Folder to Workspace... で各 worktree のフォルダを1つのウィンドウにまとめられる。サイドバーのエクスプローラーにフォルダが並ぶので、タブの切り替えだけで各ブランチのファイルを行き来できる。ただし Claude Code のターミナルは worktree ごとに別ウィンドウで開く必要がある ので、ファイル確認用として使うのがおすすめ。
アンチパターン 4: worktree の後片付けを忘れる
# 1ヶ月後...
$ git worktree list
/home/user/my-project abc1234 [main]
/home/user/my-project-feature-a def5678 [feature/add-login] ← もう終わったのに...
/home/user/my-project-feature-b ghi9012 [feature/fix-dashboard] ← 残ってる...
/home/user/my-project-old-experiment jkl3456 [experiment/something] ← 何これ...
何が起きるか:
- ディスクを無駄に消費する
- 同じブランチ名で新しい worktree を作れない(「すでに存在する」エラー)
-
git branch -dでブランチを消せない(worktree が参照しているため)
対策: 作業が終わったら即片付ける。
# 作業完了後のルーチン
git worktree remove ../my-project-feature-a
git branch -d feature/add-login # マージ済みなら削除
実用テンプレート: すぐ使えるコマンド集
日常的に使う一連のコマンドをまとめました。コピペでOK。
worktree 作成 + 初期化スクリプト
#!/bin/bash
# setup-worktree.sh
# 使い方: ./setup-worktree.sh feature/my-feature my-project-feature
BRANCH=$1
DIR_NAME=$2
BASE_DIR=$(cd "$(dirname "$0")" && pwd)
if [ -z "$BRANCH" ] || [ -z "$DIR_NAME" ]; then
echo "Usage: ./setup-worktree.sh <branch-name> <dir-name>"
exit 1
fi
# worktree 作成
git worktree add "../${DIR_NAME}" -b "${BRANCH}"
# 依存関係インストール
cd "../${DIR_NAME}" && npm install
# VSCode で開く
code "../${DIR_NAME}"
echo "Worktree '${DIR_NAME}' is ready on branch '${BRANCH}'"
echo "Open the terminal in VSCode and run: claude"
worktree 一括削除スクリプト
#!/bin/bash
# cleanup-worktrees.sh
# メインの worktree 以外をすべて削除する
git worktree list | tail -n +2 | awk '{print $1}' | while read dir; do
echo "Removing worktree: $dir"
git worktree remove "$dir" --force
done
echo "All extra worktrees removed."
git worktree list
どういうタスク分割がベストか
並列化で一番大事なのは 「何を並列にして、何を直列にするか」 の判断です。
並列向きなタスク
| パターン | 例 |
|---|---|
| 別機能の実装 | ログイン機能 ‖ 検索機能 |
| 別レイヤーの作業 | フロントエンド修正 ‖ バックエンドAPI追加 |
| テストと実装 | 既存コードのテスト追加 ‖ 新機能の実装 |
| ドキュメントとコード | README更新 ‖ バグ修正 |
| リファクタリング | ファイルA整理 ‖ ファイルB整理(互いに依存なし) |
直列にすべきタスク
| パターン | 例 |
|---|---|
| スキーマ → それを使うコード | DB変更 → API変更 |
| ライブラリ導入 → 使う側 | パッケージ追加 → そのパッケージを使う実装 |
| 型定義 → 実装 | インターフェース設計 → 実装 |
| 共通関数 → 呼び出し側 | ユーティリティ作成 → それを使う機能 |
Tips: よく使うコマンドは辞書登録しろ
並列開発をやっていると、毎回同じようなコマンドを打つことになる。正直めんどくさい。
IME の辞書登録(ユーザー辞書)に登録しておくと、日本語入力のまま一発で呼び出せる。
| 読み | 変換候補 | 用途 |
|---|---|---|
gw |
git worktree add ../-b |
worktree 作成(後ろにフォルダ名とブランチ名を足すだけ) |
gwrm |
git commit -am "done" && git checkout main && git merge && git worktree remove ../ |
commit → main へマージ → worktree 削除を一発で |
gwls |
git worktree list |
今ある worktree の確認 |
Mac の場合: システム設定 > キーボード > テキスト入力 > ユーザ辞書、または使っている IME(Google 日本語入力など)の辞書ツールから登録。
Windows の場合: MS-IME なら 設定 > 時刻と言語 > 言語 > 日本語 > オプション > Microsoft IME > 学習と辞書 > ユーザー辞書ツール から登録。
特に gw → worktree 作成と gwrm → マージ&削除は、並列開発の「開始」と「終了」で毎回使うので、登録しておくだけでかなり快適になる。
まとめ
| やること | コマンド |
|---|---|
| worktree 作成 | git worktree add ../dir-name -b branch-name |
| 依存インストール | cd ../dir-name && npm install |
| VSCode で開く | code ../dir-name |
| Claude 起動 | 各ウィンドウで claude
|
| 作業後マージ | git merge branch-name |
| worktree 削除 | git worktree remove ../dir-name |
覚えることは3つだけ:
git worktreeで物理的にフォルダを分ける- 独立したタスクだけを並列にする
- 2並列から始めて、少しずつ増やす(筆者は現在4並列)
これだけで、Claude Code を使った開発速度が格段に上がります。
あと、地味にうれしいのが プランの使用量ゲージがゴリゴリ減っていく快感。Claude Code の Settings > Usage を見ると、並列で動かしてるぶん使用済みの量がどんどん増えていく。「おれは今、月額分をしっかり使い倒している」という実感がある。直列で1個ずつチマチマ動かしてたときは「この課金、元取れてるのか...?」と不安だったけど、並列にしてからは 払った分ちゃんと働かせてる感 がすごい。プラン使用量のバーが埋まっていくのを眺めるの、普通に気持ちいい。
まずは2並列から試してみてください。慣れたら3、4と増やせばOKです。