T-CREATOR

<div />

Claude Code と Codex を並列で動かしたときの動き: 同じファイルでも書き換えは消えない

Claude Code と Codex を並列で動かしたときの動き: 同じファイルでも書き換えは消えない

Claude Code と Codex を同じフォルダーで同時に動かし、同じファイルに別々の関数を足させても、片方の書き換えが消えることはありませんでした。2026年11月9日に Claude Code 2.1.309 と Codex CLI 0.166.0 で確かめると、--worktree で分けた場合は作業中にはぶつからず、あとで main にまとめるときに衝突しました。

経緯

複数のエージェントに別々の作業を同時にさせると、同じファイルを両方が書き換えることがあります。後から書いた方が先の書き換えを消してしまわないか、worktree に分けると何が変わるかを確かめました。

環境

  • macOS 26.6.2、Node.js 24.19.0
  • Claude Code 2.1.309(モデルは初めの設定の Claude Opus 5.5)
  • Codex CLI 0.166.0(モデルは初めの設定の GPT-6.1-Sol)
  • 計算の小さなアプリ。src​/​calc.js に add と average があり、最後の行が module.exports = { add, average };

動き

2つの頼み方を、同時に動かしました。

頼んだこと
1つ目src​/​calc.js に中央値を返す median を足し、module.exports にも加える
2つ目src​/​calc.js に最頻値を返す mode を足し、module.exports にも加える

どちらも1回の指示で任せる使い方(claude -p、codex exec)で動かし、終わったあとの src​/​calc.js を見ました。

組み合わせ終わったあとの src​/​calc.js途中で起きたこと
同じフォルダーで Claude Code を2つmedian と mode の両方が残った。最後の行は module.exports = { add, average, mode, median };後から書こうとした方の書き換えが、エラーで止まった。読み直してから書き直した
同じフォルダーで Claude Code と Codex両方が残ったエラーはなかった。Codex はファイルを2回読んでから書き換えた
--worktree で分けた Claude Code と Codex元のフォルダーは変わらない。それぞれの worktree に1つずつ足された作業中のぶつかりはない。main にまとめるときに衝突した

読んだあとに変わったファイルは上書きしない

Claude Code 同士のとき、後から書き換えようとした方の記録には、次のエラーが出ていました。

terminalFile has been modified since read, either by the user or by a linter. Read it again before attempting to write it.

Claude Code は、ファイルを読んだあとに誰かが書き換えると、そのままでは上書きしません。エラーのあとにファイルを読み直し、もう一方が足した mode を残したまま median を足しました。

worktree で分けると、まとめるときにぶつかる

--worktree を付けると、それぞれ別のフォルダーで作業します。

worktree の場所ブランチ
Claude Code(claude -p ... --worktree median)リポジトリの中の .claude​/​worktrees​/​medianworktree-median を作った
Codex(codex exec --worktree ...)Codex の設定のフォルダー(初めは ~​/​.codex)の下の worktrees​/​作らない(detached HEAD)

どちらも、worktree の中の変更はコミットせずに終わりました。それぞれをコミットして main にまとめると、median は問題なくまとまり、続けて mode をまとめたところで src​/​calc.js が衝突しました。2つとも、同じファイルの最後の module.exports の行と、その上に関数を足していたためです。

terminal$ git merge codex-mode
CONFLICT (content): Merge conflict in src/calc.js
Automatic merge failed; fix conflicts and then commit the result.

公式との違い

違いは見つかりませんでした。Claude Code の --help には、-w, --worktree [name] が「このセッションのために新しい git worktree を作る」と書かれています。Codex の --help にも、--worktree は「新しく管理する Git worktree でセッションを動かす」とあります。

対処

同じ行を直す作業は、worktree に分けない

同じフォルダーなら、書き換えが消えることはなく、両方の変更が1つのファイルに残ります。worktree に分けたときは、最後にまとめる作業が残ります。同じファイルの同じあたりを両方が直す作業は、worktree に分けても衝突します。

worktree の変更は、自分でコミットしてからまとめる

Claude Code の worktree は worktree-{名前} のブランチになっているので、そのままコミットしてまとめられます。Codex の worktree はブランチがないので、git switch -c ブランチ名 でブランチを作ってからコミットします。

Claude Code の worktree は、リポジトリの中にできる

.claude​/​worktrees​/​ はリポジトリの中なので、git status に .claude​/​ が出ます。コミットしないように、.gitignore に入れておきます。

注意点

1回ずつの結果で、書き換えの順番は毎回変わる

どちらが先に書くかは、その時々で変わります。同じフォルダーで両方が同時に同じ行を書き換えようとしたときも、今回と同じ動きになるとは限りません。

worktree の場所は、まとめる前に確かめる

Claude Code と Codex でも、worktree を作る場所とブランチの扱いが違いました。worktree を作るほかのアプリを使うときも、まとめる前に git worktree list で場所を確かめます。

terminal$ git worktree list

参考文献

著書

とあるクリエイター

フロントエンドエンジニア Next.js / React / TypeScript / Node.js / Docker / AI Coding