筆者は ShipPress という Mac アプリの開発者です。記事の後半で自作ツールの紹介を含みますが、前半の分け方と確認の手順は Claude Code、Codex、Cursor CLI などをターミナルで複数立ち上げる場合でもそのまま使えます。
ターミナルを 2 つ開いて、片方の Claude Code に「メニューページに新しい料理を追加して」、もう片方に「メインカラーを紺にして」と頼む。どちらもすぐ終わって、どちらも「完了しました」と言う。ところがプレビューを開くと、片方の変更が消えている。
AI エージェントを並列に動かすと、待ち時間はたしかに減ります。ただ WordPress は、ファイルと DB の両方に「サイト全体で 1 つしかないもの」が多く、何も考えずに並べると後から書いた方が勝ちます。この記事では、1 つのサイトに複数のエージェントを同時に走らせるときに、どう分ければぶつからないか、ぶつかったらどうするかをまとめます。
1. 並列にしてよい作業、してはいけない作業
先に結論を表にしておきます。
| 並列にしやすい | 同時に触らせない |
|---|---|
| 別々の固定ページの本文(メニューページとお問い合わせページ) | メインカラーやフォントなどのグローバルスタイル |
| 別々の投稿の下書き | ヘッダー・フッターなど全ページ共通のテンプレートパーツ |
| 特定のページだけで使うブロックの追加 |
theme.json、style.css、functions.php
|
| 「全ページを確認して整えて」のようなサイト全体の指示 |
固定ページの本文は、DB の中で 1 ページ 1 レコードです。別々のページを頼んでいる限り、同じ行を同時に書き換えることはまずありません。
一方、右の列はどれもサイト全体で 1 つしかありません。ブロックテーマの配色は theme.json のパレットか、サイトエディターで保存された wp_global_styles に入っています。2 つのエージェントが同時に「メインカラーを変える」作業をすると、両方が同じ設定を読んで、別々の値を書き込みます。最後に書いた方だけが残り、先に終わった方は自分の変更が残っていると思ったまま報告します。
2. 分け方は「ページ単位」が基本
迷ったらページで分けます。頼み方の例です。
# エージェント A
Menu ページの「Cold udon」の中に、新しい品目を追加してください。
「Yuzu cold udon 900円」。Menu ページ以外は変更しないでください。
# エージェント B
Contact ページに、無料駐車場がある旨の一文を追加してください。
Contact ページ以外は変更しないでください。
ポイントは、それぞれの指示に「このページ以外は変更しない」と書くことです。エージェントは気を利かせて「ついでにフッターの連絡先もそろえておきました」をやりがちで、それが並列だと衝突の原因になります。
サイト全体の指示(配色、フォント、共通ヘッダー、「全ページを見直して」)は、並列の枠から外して 1 つずつ順番に流します。急いでいるときほど、ここを並列にしたくなりますが、やり直しの手間を考えると順番に流した方が早く終わります。
3. ターミナルで並列にするなら:ファイルは worktree、DB は共有だと意識する
ShipPress を使わずに、素の CLI でやる場合の構成です。
テーマのファイルを並列で触らせるなら、エージェントごとに git worktree を切っておくと、同じファイルを同時に書き換える事故は防げます。
# テーマのリポジトリで
git worktree add ../my-theme-menu -b agent/menu
git worktree add ../my-theme-contact -b agent/contact
# それぞれのディレクトリでエージェントを起動
cd ../my-theme-menu && claude
ただし、WordPress ではここに落とし穴があります。worktree で分かれるのはファイルだけで、同じローカル WordPress に向いている限り DB は 1 つです。固定ページの本文やグローバルスタイル、サイトエディターで保存したテンプレートは DB に入るので、worktree を切っても共有されたままです。
なので、ファイルの分離とは別に「DB 上のどこを触るか」もエージェントごとに決めておきます。プロジェクトの CLAUDE.md(Codex なら AGENTS.md)に担当を書いておくと、指示のたびに書かずに済みます。
## 並列作業のルール
- 自分の担当ページ以外の固定ページは変更しない
- theme.json、グローバルスタイル、header / footer のテンプレートパーツは変更しない
(必要だと思ったら、変更せずに提案だけする)
- 作業の最後に、変更したページ・ファイル・設定を一覧で報告する
4. 終わったら、両方の変更が残っているか確認する
並列作業でいちばん怖いのは、エラーが出ないことです。両方とも「完了」と言うので、上書きされていても気づきません。確認は 2 つの報告を見比べるのではなく、実際のサイトで行います。
- それぞれのエージェントが変更したページを、プレビューで両方開く
- 共通部分(色、ヘッダー)が絡んだ場合は、関係なさそうなページも 1 つ開く
- DB の変更日時を見て、想定外のものが更新されていないか確かめる
wp post list --post_type=page,wp_template,wp_template_part,wp_global_styles \
--orderby=modified --order=DESC --fields=ID,post_type,post_name,post_modified | head
担当外の wp_global_styles やテンプレートパーツが上に来ていたら、どちらかのエージェントが範囲を越えています。
5. ぶつかったときは、片方を止めて、結果を見てから頼み直す
それでも 2 つが同じものを触ってしまったら、両方を走らせ続けないことです。片方を止め、もう片方を最後まで終わらせて、プレビューで今どうなっているかを見ます。そのうえで、欲しい状態をもう一度 1 つのエージェントに頼みます。
メインカラーを、もう一度 深いフォレストグリーンにしてください。
どちらが勝ったかを推理するより、現状を見てから 1 回頼み直す方が確実です。
6. 利用枠の減り方は、並列の数だけ早くなる
当たり前ですが、エージェントを 2 つ動かせば、AI の利用枠も 2 つ分のペースで減ります。Claude Code などのサブスクリプションで制限に当たりやすい人は、並列の数を増やす前に残りを確認しておくと、作業の途中で止まらずに済みます。
おまけ:ShipPress の Multiple Workers の場合
ここまでを毎回手で管理するのが大変だったので、ShipPress(Mac 用の無料アプリ)には、1 つのサイトで複数の AI Worker を同時に動かす機能を入れています。中で動く AI は、自分で使っている Claude Code や Codex、Cursor CLI などです。
- 初期設定ではオフです。Settings › Interface mode › For developers › Multiple Workers でオンにします
- 同時に動く Worker の上限(Max Workers running at once)は初期値 4。それ以上送ったリクエストは順番待ちになります
- チャットの上に Worker ごとのタブが並び、New Worker で増やせます。タブを閉じても Worker は消えず、チャットはサイドバーに残ります
- 同じサイトなので、どのタブからでもプレビューは 1 つを共有します
- 別の Worker がサイトを変更中のときは、入力欄の上に注意書きが出ます。送信はできますが、別の場所にするか、終わるまで待つよう促されます
- 2 つの Worker が同じものを変更し始めると、チャットに Possible conflict のカードが出ます。Stop & wait でその Worker を止めるか、Continue で両方続けるかを選べます
動画では、Menu ページへの品目追加と Contact ページへの駐車場の案内を同時に進めたあと、2 つの Worker にメインカラーを緑と紺で取り合わせて、Possible conflict が出るところまでやっています。結果は紺になったので、上の 5 と同じように「もう一度グリーンに」と頼み直しています(AI の待ち時間は早送りしています)。
- ShipPress(無料・Mac): https://shippress.codotx.com/?ref=qiita
- 前回の記事(AI にサイトを直してもらうときの頼み方と戻し方): https://qiita.com/shippress/items/3a6da0eace223c3a1c5a
複数のエージェントを並列で動かしている方は、作業をどの単位で分けていますか。ページ単位、ファイル単位、それとも機能単位か。うまくいっている分け方があれば、コメントで教えてください。