メインコンテンツへスキップ
日常・雑記

並列で動かしたAI同士、共有メモで衝突しかけた話

複数のAIを同時に走らせて案件を進めていたら、共有していた引き継ぎメモへの書き込みがぶつかりかけた。実はAIが使っている書き込みツールの「失敗する仕組み」が救ってくれた、という話。

Claude Codeを並列で走らせる、というスタイル

普段、案件を進めるときに Claude Code というAIを使っている。ターミナルからやり取りできるタイプのAIで、コードを書いたり、調べ物をしたり、書類を作ったりを一緒にやってくれる相棒みたいな存在。

1つの案件に集中したいときは、対話タブを1つだけ開いて向き合うのが基本のスタイル。でも別の案件が同時に動いているときは、もうひとつタブを開いたり新規ウィンドウを開いて、そちらでも別のClaudeに動いてもらうことがある。同じPCの中に2人分の秘書がいる感覚。

AI同士は「案件メモ」を介して会話する

並列で動かしているAI同士は、直接会話ができない。だから案件ごとに用意した「引き継ぎメモ」というテキストファイルに、それぞれが「今こんなことをしてるよ」「ここまで終わったよ」を書き残しておく。

※「引き継ぎメモ」はプロジェクトフォルダの中にあるテキストファイルのこと(うちでは handoff.md と呼んでいる)。朝一番に人間の私が見るファイルでもあるし、別のAIが同じ案件を引き継ぐときにも読むファイル。要するに「今、この案件で何が起きているか」を一元管理する場所。

1人のAIしか動いていないときは、この仕組みで問題ない。書いた本人しかいないのだから、上書きも重複もない。ところが並列で動かしはじめると、この「共有のメモ」がちょっと厄介なモノになってくる。

つまずき①:メモの上書き事故が起きかけた

ある日、案件Aの調査をClaudeに頼んだ。同じころ、別のタブで動いていたもう一人のClaudeが、同じ案件Aの引き継ぎメモに書き込みを始めていた。

後から書きに来た別のClaudeは、まずメモの中身を読み込んで、それをベースに書き足そうとした。ところが読んだ瞬間と、実際に書き込む瞬間の間に、もう一人のClaudeが先にメモを書き換えてしまっていた。

普通に上書きしていたら、先に書かれた新しい内容が消えていた。ところが、Claudeが使っているファイル書き換えツールには「書き換える前の文字列」と「実際に今ファイルにある文字列」がぴったり一致していないと動かない、という決まりがある。ぴったり一致しない=誰かが書き換えた後だ、と判断してツールが失敗する仕組み。

結果、上書きは失敗した。この「失敗」が、衝突を教えてくれる合図として働いた。転ばぬ先の杖どころか、転んだおかげで気づけた、という感じ。

つまずき②:調査メモの見出し番号がぶつかった

もうひとつ、地味に困ったのが「見出しの番号がかぶる」問題。

並列で動いている調査系のセッションは、それぞれが「調査1」「調査2」のような連番の見出しをつけたがる。1人しかいないなら順番に増えていくだけだけれど、2人が同時に「次は調査3を書こう」と考えたら、同じ番号が2つできてしまう。

これは書き込みツールの失敗検知には引っかからないことがある。片方は既存の「調査3」に追記し、片方は新しく「調査3」を作る、みたいな入れ違いが起きるからだ。結果、メモの中に同じ番号の見出しが2つ並ぶ、という奇妙な状態になる。

対策として決めた2つのルール

書く直前にメモを読み直す:さっき読んだ内容がまだ最新かどうか、書き込む直前にもう一度確認する。この一手間で上書き事故はほぼ防げる。
調査セッションは連番の見出しを使わない:「調査1」ではなく「サーバー構成の調査結果」のように、内容そのものを見出しにする。番号で予約しなければ、他のセッションと衝突しない。

1つ目は、要するに人間の会議と同じ。「さっきまでこう決まってましたよね」と言いかけて、実は別の場所で決定が更新されていた、というのは会議あるある。書き込む直前にもう一度読む、というちいさな癖で、そのすれ違いを避けられる。

2つ目は、そもそもぶつかる余地を消す、という発想。連番はもともと「順番の予約」でしかないから、内容そのもので見出しをつけてしまえば予約は要らない。この考え方は、他の共同作業にもそのまま応用できる気がする。

失敗する仕組みは、ありがたい仕組みだった

今回の一件で一番ありがたかったのは、書き込みツールが「怪しかったら止まる」設計になっていたこと。上書きが黙って通ってしまう仕組みだったら、たぶんメモの内容が知らない間に消えていて、後から気づいて困っていたと思う。

エラーが出て止まってくれる仕組みは、その場では面倒でも、あとから振り返ると命綱になっている。「エラーを出さずに壊れる」より「エラーが出て止まる」方が、はるかに助かる。当たり前のようで、忘れがちなことを、Claudeを並列で動かしてみて改めて実感した出来事だった。

同じように複数のAIを並列で走らせている人がもしいたら、この「書く直前に読み直す」「連番で見出しを予約しない」の2つは、ちいさなお守りとして持っておくと安心かもしれない。

現在僕は、案件フォルダごとにclaudeを立ち上げて、AI同士がバッティングしないようにしている。同じフォルダで二つのclaudeは立ち上げない。案件フォルダに関与できる司令塔はなるべく案件の仕事をふらないことに気を付ける。そんなこんなで今日もギルドは動いてます! https://n-pc.jp/guild/