104万行をAIと書いて分かった、並列開発で先に詰まるもの

株式会社ペンタコン研究所 PentaTrail開発チーム··6分で読める
目次

2025年7月27日に、いまのPentaTrailのリポジトリを作りました。最初のコミットはSupabaseとVercelを使ったマルチテナントSaaSの基盤で、その後はWebアプリ、ASM、データベース、Edge Function、課金、監査、ISMS対応まで同じmonorepoで開発しています。

2026年8月29日に全履歴を取り直して数えたところ、外部から取り込んだ検査テンプレートと機械が吐いた収集データを除く自作部分は、空行とコメントを除いて 1,040,063行 ありました。PRは1,646本、merge済みは1,451本です。

ここまで来ると、AIがコードを書けるかどうかは、開発上の大きな問いではなくなりました。いま困っているのは、「複数のAIに、同じリポジトリで安全に働き続けてもらうにはどうするか」です。

コードを書く速度は、まだ上がっている

PRを基本単位にして開発するようになったのは2026年3月頃からです。それ以前のPRは56本でしたが、3月以降だけで1,590本を作り、1,399本をmergeしました。

8月は29日までに410本をmergeしています。直近30日では433本、1日平均14.4本です。PR一本の追加行数は中央値342行、75パーセンタイルで1,649行でした。細かな修正だけを大量にPRへ分けた数字ではありません。

現在残っている104万行とは別に、全履歴では自作部分を約253万行追加し、約110万行削除しています。製品コードだけでも約83万行を書き、約51万行を消しました。AIが出したものを積み上げるだけではなく、かなりの量を作り直しながら進んでいます。

表1:2026年3月以降のPRの流れ

作成 merge merge/日
2026-03 45 10 0.3
2026-04 228 178 5.9
2026-05 307 274 8.8
2026-06 278 278 9.3
2026-07 278 249 8.0
2026-08(29日まで) 454 410 14.1

この半年で、コードを出す速度はかなり上がりました。ところが、Claude Codeを複数同時に動かすようになると、別の種類の待ちが増えてきます。

AIを二つ動かすと、所有者が必要になる

一つのAIに一つのIssueを渡している間は、従来の開発とそれほど違いません。Issueを読み、実装し、テストしてPRを出すだけです。

複数のClaude Codeを同時に動かすと、二つのセッションが同じIssueを取りに行くことがあります。別のIssueでも、同じ認証コードや同じテーブルを触れば変更がぶつかりますが、PRになる前の作業はGitHubのPR一覧に出てこないので、気づくのが遅れます。

途中でセッションが落ちれば、「作業中」という印だけが残ります。本当に死んだ作業なら別のAIへ渡せますが、元のセッションがまだ生きていれば二重実装になりかねません。

人が数人で開発していれば、「そこは作業中です」の一言で済む場面です。AIを並列化するなら、この会話を仕組みに置き換えるほかありません。

その仕組みをIssue Loopと呼んでいて、runの識別、Issueのclaim、作業中に押さえている資源、runが生きているかを明示的に持たせています。claimの所有者を自分、他の生きたrun、死んだrunに分け、死んだ作業だけを引き継げるようにしました。同じ場所を変更しそうなIssueも、PRができる前から同時に走らせない方向へ寄せています。

CISOの目線で見ると、AIの性能ではなく変更管理の問題でしょう。変更主体を増やすなら、誰が何を触っているか、誰の作業が有効なのかを追えることが先に要ります。

Claudeが実装し、Codexには別の目で見てもらう

実装はClaude Codeに任せ、変更はCodexにも読ませています。同じAIに自分の実装を見直させるだけでは、最初の前提ごと引き継いで同じ穴を見落とすことがあるためです。

実際、何巡かレビューした後で、それまで拾えていなかった重要な問題を別の独立レビューが見つけたことがあります。ただ、レビューを増やせば最後まで自動で進めてよいわけでもありません。

権限やデータ保持、migrationの変更では、CIが緑でも設計上の判断が残り、直した結果ほかの契約を壊せばもう一度見直しになります。機械の検査だけで先へ進めてよい変更と、人が決める変更を分けなければなりません。

この部分は、以前書いたClaude と Codex の二刀流レビューの延長です。並列数を増やして分かったのは、レビューの目を増やすだけでなく、変更をどの順番で共有branchへ取り込むかまで管理しないと流れないことでした。

6並列の次に欲しいのは、24並列ではなかった

現在は事務所のデスクトップで4セッション、自宅のラップトップで2セッション、合計6セッションまでClaude Codeを並列に動かせます。制約になっているのは主にメモリで、RAMを多く積んだサーバーを置けばセッション数そのものは増やせます。

ところが、6本の仕事を絶えず安全に供給できるかは別問題です。

あるIssueが共通の認証処理を変更し、別のIssueが同じテーブルを変更するなら、空いているセッションがあっても同時には進めにくくなります。6本のPRを並列に作れても、1本をdevへmergeした時点で残りは一つ古い状態を見ているので、取り込み直してテストし、変更によってはレビューもやり直しになります。

実装は並列化できますが、共有するコードベースへの統合は同じようには並列化できません。

そのため、次に測りたいのはCPU使用率より、セッションが仕事を待っている時間、claimや変更箇所の衝突、PRを作ってからmergeされるまでの時間、人の判断で止まった回数です。ここが詰まっている状態でセッションだけ12、24と増やしても、待つAIが増えるだけでしょう。

次は、Issueを作る側がボトルネックになる

Issue Loopが安定すると、もう一つ人の仕事が残ります。何を作るかを決め、実装できる大きさまで分け、依存関係を見てIssueを並べる仕事です。

いま考えている次の層をProject Loopと呼んでいます。人が製品上の目的や解くべき問題を置き、リポジトリと既存Issueを調べて実装単位へ分解し、同時に進められる仕事をIssue Loopへ渡したうえで、その下でClaude Codeが実装し、Codexなど別系統のAIとCIが検査します。

まだ完成していません。

24セッションを起動することより、6セッションが何週間も仕事を切らさず、互いの変更を壊さず、問題のある変更を止めながら製品へ反映し続けるほうが、はるかに難しいと感じています。104万行まで開発してきて、AIネイティブ開発の律速はコード生成から、その周りの制御へ移り始めました。

PentaTrail CTEM/ASMで攻撃面を可視化しませんか?

CTEMフレームワークに基づき、外部攻撃面の発見から脆弱性検証・対応推進までを一気通貫で実現します。

お申し込みはこちら

料金を見る/他サービスとの比較・選び方