◉CLAUDE LABEN
●2.1.302 — fork サブエージェントが claude -p・Agent SDK・デスクトップで既定オンになりました。無効化は CLAUDE_CODE_FORK_SUBAGENT=0(10/16)●2.1.301 — 使用量上限に達した無人実行の再試行を、待ち続けず自動で止めるようになりました(10/15)。最新は 2.1.304(10/19)●SONNET 4.5 — Claude API での提供終了は 11/30、残り40日。移行先は Sonnet 5.5●WINDOWS — 日本語の環境でだけフックが黙って壊れる報告があり、文字コードの確認が呼びかけられています●FAST MODE — Opus 5.5 の Fast mode がリサーチプレビューを終え、ベータヘッダーが不要になりました(10/15)●NEW — Cowork に渡したフォルダの先頭に、十行の約束ファイルを置いてみました●2.1.302 — fork サブエージェントが claude -p・Agent SDK・デスクトップで既定オンになりました。無効化は CLAUDE_CODE_FORK_SUBAGENT=0(10/16)●2.1.301 — 使用量上限に達した無人実行の再試行を、待ち続けず自動で止めるようになりました(10/15)。最新は 2.1.304(10/19)●SONNET 4.5 — Claude API での提供終了は 11/30、残り40日。移行先は Sonnet 5.5●WINDOWS — 日本語の環境でだけフックが黙って壊れる報告があり、文字コードの確認が呼びかけられています●FAST MODE — Opus 5.5 の Fast mode がリサーチプレビューを終え、ベータヘッダーが不要になりました(10/15)●NEW — Cowork に渡したフォルダの先頭に、十行の約束ファイルを置いてみました
記事一覧/Claude Code
⟐ Claude Code/2026-04-02中級

Claude Code を worktree ごとに走らせる並列開発の実装メモ

Git worktree でブランチを物理的に分け、Claude Code を作業場所ごとに起動するための実装メモ。共有されるもの・されないものを手元の Git で実測し、追跡外ファイルの扱いと畳み方まで書き残します。

Claude Code271worktree3並列開発Git5ワークフロー21

✦ プレミアム記事

金曜の夕方に、公開中のアプリでクラッシュが出ているという連絡を受け取りました。手元では別のアプリの機能追加を半分ほど進めていて、変更はまだコミットできる形になっておりません。ブランチを切り替えれば作りかけが宙に浮き、切り替えなければ修正に取りかかれない——この二択が、個人開発でいちばん胃が痛くなる場面です。

その日から、私は作業ツリーそのものを分ける方に倒しました。Git の worktree でディレクトリを 1 本増やし、そこで Claude Code をもう一つ起動します。ブランチの付け替えではなく、場所の移動として扱う運用です。

以下は、手元の Git 2.34 で挙動を一つずつ確かめながら書いた実装メモです。コマンドの一覧よりも先に「何が分かれていて、何が分かれていないのか」を押さえた方が、事故はずっと減るのだと思います。

worktree が分けるもの、共有するもの

worktree を足すと、ディレクトリは増えますが、リポジトリは増えません。ここを取り違えると、片方の worktree での操作がもう片方に波及して驚くことになります。

追加した worktree の .git は、ディレクトリではなくテキストファイルです。中身は親リポジトリへの道しるべだけで、実体はありません。

$ git worktree add ../wt-a feature/a
Preparing worktree (checking out 'feature/a')
HEAD is now at dc6dc31 a
 
$ file ../wt-a/.git
../wt-a/.git: ASCII text
 
$ cat ../wt-a/.git
gitdir: /home/me/demo/.git/worktrees/wt-a

共有されている度合いは、stash で確かめるのがいちばん早いと感じています。メイン側で退避した内容が、追加した worktree からもそのまま見えます。

# メイン側の作業ツリーで退避
$ git stash
Saved working directory and index state WIP on main: c88bbda init
 
# 追加した worktree から一覧を見る
$ git -C ../wt-a stash list
stash@{0}: WIP on main: c88bbda init

ローカル設定も同じく共有です。片方で git config --local を書けば、もう片方から読めます。

$ git config --local demo.key mainside
$ git -C ../wt-a config --get demo.key
mainside

実測した結果を一覧にすると、次のようになります。

対象worktree ごとに分かれる備考
作業ディレクトリのファイル分かれるここを分けるための機能
index(ステージ)分かれる.git/worktrees/<名前>/index に個別に持ちます
HEAD とチェックアウト中のブランチ分かれるだから同時に別ブランチを触れます
rebase・merge・bisect の途中状態分かれる片方で衝突していても、もう片方は平常運転
コミット・ブランチ・タグ共有オブジェクトは一つのデータベース
stash共有退避した内容はどの worktree からも見えます
.git/config(--local)共有worktree 別に持つには extensions.worktreeConfig が必要
hooks・remote 設定共有片方で入れた hook は全部に効きます

分かれているのは「いま触っている手元」だけで、リポジトリの記憶は一つです。 この一行を最初に腹落ちさせておけば、「stash したのにもう一方で見えている」といった戸惑いは起きません。

新しい worktree には、動く環境が付いてきません

初日にいちばんつまずいたのがここでした。git worktree add が展開するのはコミットに入っているものだけで、.gitignore に置いたものは一切付いてきません。

$ ls -a ../wt-a
.  ..  .git  .gitignore  src
 
node_modules:                なし
.env.local:                  なし
.claude/settings.local.json: なし

つまり、新しい worktree はリポジトリとしては完成していても、開発環境としては空です。依存も、ローカルの環境変数も、エディタやツールの手元設定も、自分で運び込む必要があります。私は最初、git worktree add の直後に npm run dev を叩いて動かず、Git の不具合を疑って 20 分ほど溶かしました。原因は単に依存が入っていないことでした。

そこで、作る操作と環境を揃える操作を一つのスクリプトにまとめています。

#!/usr/bin/env bash
# wt-new.sh — worktree を 1 本作り、追跡外の作業環境まで揃える
set -euo pipefail
 
BRANCH="$1"                          # 例: hotfix/login-timeout
DIR="../wt-${BRANCH//\//-}"
ROOT="$(git rev-parse --show-toplevel)"
 
git fetch -q origin main
git worktree add "$DIR" -b "$BRANCH" origin/main
 
# 追跡外だが手元に必要なものだけを、明示的に運ぶ
for f in .env.local .claude/settings.local.json; do
  [ -f "$ROOT/$f" ] || continue
  mkdir -p "$DIR/$(dirname "$f")"
  cp "$ROOT/$f" "$DIR/$f"
done
 
( cd "$DIR" && npm ci --prefer-offline )
echo "ready: $DIR"

運ぶファイルを列挙式にしているのには理由があります。.gitignore の中身を丸ごと複製してしまうと、本番の鍵や他アプリの資格情報まで新しいディレクトリに増えてしまうためです。持ち出すものは、毎回名前で書く。 面倒でも、この一手間だけは省かないようにしております。

CLAUDE.md はリポジトリに追跡されているので、何もしなくても新しい worktree に付いてきます。一方で .claude/settings.local.json のような手元だけの設定は来ません。この非対称が、次の節の話につながります。

✦

ここまでお読みいただきありがとうございます。

この記事の続きを読む

この先には、実装コードやベンチマーク結果など、実務でお役に立てる内容をご用意しています。このサイトは広告を掲載しておらず、サーバーや開発にかかる費用はメンバーの皆様のご支援で成り立っています。もしお役に立てていましたら、ご支援いただけますと大変ありがたいです。

この記事で得られること
✦worktree 間で共有される stash・config・hooks と、分離される作業ツリー・index・HEAD の実測一覧
✦新しい worktree に node_modules や .env.local、.claude/settings.local.json が来ない理由と、それを埋める初期化スクリプト
✦割り込みが入った日に worktree を 1 本足して畳むまでの手順と、prunable を残さない後片付け
Stripe による安全な決済 · いつでもキャンセル可能
✦

この記事を購入する

この先の内容をすべてお読みいただけます。一度のご購入で、いつでも何度でもアクセスできます。このサイトは広告を掲載しておらず、皆さまのご支援がサーバー費用などの運営を支えています。

または
メンバーシップなら全記事が読み放題 →
シェア

お読みいただきありがとうございます

Claude Lab は広告なしで運営しており、サーバー費用などの運営コストはメンバーシップのご支援で賄っています。実装コード・ベンチマーク・本番設計パターンなど、実務でお役立ていただける記事を毎日更新しています。もし読んでよかったと感じていただけましたら、ぜひご覧ください。

  • ✦コピー&ペーストで使える実装コード付き
  • ✦毎日新しい上級ガイドを追加
  • ✦¥580/月 または ¥1,480 の永久アクセス
メンバーシップを見る →

関連記事

⟐ Claude Code2026-05-24
Claude Code Skills を毎日の開発に組み込むときに、私が見ている 5 つの選定軸
公開されている Claude Code Skills は数が増え続けています。個人でいくつかのサイトを Claude Code で運用している立場から、毎日の開発フローに残った Skill と、結局外した Skill を分けた判断軸を整理します。superpowers・dig/decomposition・drawio・自作 Skill の使い分けを実例で紹介します。
⟐ Claude Code2026-04-27
Claude Code Hooks — 中核8フックの設計判断と、33イベントに増えた今の歩き方
Claude Code のフックは強力ですが、どのイベントで何ができるかが曖昧で、結局使いこなせないまま終わる人が多いです。私が半年運用して辿り着いた、フック種別ごとの設計判断と典型的な落とし穴を整理します。
⟐ Claude Code2026-04-26
Claude Code でテスト駆動開発を実装する — エージェントと書く TDD ワークフロー
Claude Code に「先にテストを書いてもらう」という制約を加えると、エージェントの暴走が止まり、生成コードの質が劇的に変わります。私が半年間試行錯誤して辿り着いた、エージェント時代の TDD ワークフローを共有します。