1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Claude Code をサブエージェントで分業させ、仕組みは台帳で育てる ― 架空サカスタのチケットサイトで学ぶ(番外 1)

1
Last updated at Posted at 2026-10-28

Claude Code をサブエージェントで分業させ、仕組みは台帳で育てる ― 架空サカスタのチケットサイトで学ぶ(番外 1)

はじめに

架空のサッカースタジアム「ペヌソニックスタジアム(通称ペヌスタ)」のチケット販売サイトを、遊び場として作っています。
紹介回の最後に「どう分担させ、どこで人が判断しているかは、番外編で書く予定です」と書きました。この記事がその番外編です。

ゴール裏年パス勢が、架空スタジアムのチケットサイトを作る理由 ― 架空サカスタのチケットサイトで学ぶ(0)
https://qiita.com/macchi23/items/5b9f5670c841f5c41be8

このリポジトリのコミットは 106 件あり、すべてに Claude の Co-Authored-By が付いています。
仕組みを入れた 10/3 から 10/27 までの 25 日間で 104 件です(どちらも 2026-10-27 時点)。

Claude Code で何か作るときは、いつもハーネス(役割ごとのサブエージェント、検証のスクリプト、運用のルール)を組んで、分業させる前提で始めます。
ただ、どんな役を置き、どのモデルを当てるかは、プロジェクトごとに考えています。
この記事では、ペヌスタ用に組んだ形を書きます。

この記事で書くこと:

  • 誰に何を任せているか(委譲表とモデルの配分)
  • 人が判断しているのはどこか
  • 運用しながら仕組みを育てる「台帳」
  • うまくいっていないこと

設定ファイルはリポジトリで公開しているので、そのまま読めます。

全体像: メインは分けて渡すだけ

Claude Code のメインのセッションは、作業を分解してサブエージェントに渡し、結果をまとめてユーザー(自分)と話す役に徹します。
メインが自分で手を動かしてよいのは、数行の自明な修正、ドキュメントの修正、git の操作だけです。

作業 サブエージェント モデル 持たせている道具
どこに何があるか探す Explore haiku Read / Grep / Glob / Bash。リポジトリは変えない
設計の比較、原因の究明、外部仕様の確認 researcher opus Explore と同じ + Web(サブエージェントで Web を持つのはこの役だけ)
実装とテスト implementer sonnet 読み書き
scripts/check.sh を回して結果を要約 verifier haiku Bash と Read だけ。直さない
正しさのレビュー code-reviewer opus Read / Grep / Glob / Bash。リポジトリは変えない
セキュリティのレビュー security-reviewer opus Read / Grep / Glob / Bash。リポジトリは変えない

1 つのステップは、だいたいこの順に流れます。

サブエージェントの定義は、Markdown 1 枚です。たとえば verifier はこれだけです。

.claude/agents/verifier.md
---
name: verifier
description: scripts/check.sh を実行し、成否と失敗箇所の要約だけを返す。実装の後、レビューの前に使う。修正はしない。
tools: Bash, Read
model: haiku
effort: low
---

検証を担当する。`scripts/check.sh` を実行し、結果を要約して返す。ファイルは一切変更しない。失敗の修正もしない。
(以下、進め方と返す形式)

モデルは「下げる条件」と「上げる条件」で決める

既定は上の表のとおりで、呼び出すときに条件で変えます。

  • implementer を haiku に下げる: 既存のパターンの踏襲 / 1〜2 ファイル / 設計判断なし / backend か文言・スタイルの修正、を全部満たすとき。Next.js の規約、トランザクション・同時実行、スキーマ変更、複数ファイルにまたがる変更は sonnet のまま
  • implementer を opus に上げる: sonnet の実装が、同じ指摘でレビューから 2 回差し戻されたとき
  • レビューを fable に上げる: 販売の整合性に関わる変更(二重販売の防止、仮押さえの期限、自由席の定員の同時実行制御、抽選、waiting room、決済の状態遷移)か、自分が明示したとき。今は fable がしばらく使えないので、opus の code-reviewer と security-reviewer を並列で走らせて代えている

全部をいちばん良いモデルにすると、使用量の上限にすぐ当たります。
なので、下げても結果が変わらないところ(探索、check、既存の形をなぞるだけの実装)を条件で下げて、浮いた分を外せないところ(設計とレビュー)に回しています。

ブリーフに書くことと、レビューに渡さないもの

サブエージェントは会話の文脈を持たないので、渡す依頼文(ブリーフ)にすべてを書きます。

  • 目的 / 完了条件 / 対象ファイル / 既知の制約と除外済みの仮説 / 返してほしい形式

レビューには、仕様と diff の範囲だけを渡し、実装者の説明は渡しません。

実装者の「こう考えて作った」「確かめた」を先に読むと、レビューもその筋書きに乗ってしまいます。
実装者が前提にしたことは疑わなくなり、「確かめた」と書かれたことは自分で確かめなくなります。
仕様と diff だけを渡して、一から読ませています。

人が判断しているところ

任せているのは「手を動かすこと」で、次の 5 つは自分が決めています。

  1. 方針: 作業が 5 ステップ以上になるときは Plan Mode で始め、選択肢とトレードオフを出させてから選ぶ。
    たとえば連載(2)の記事を書くとき、使われていない設定が見つかった。「経緯として書く」「一般論として書く」「先にコードを整理する」の 3 つから 1 つ選ぶ形で出てきたが、経緯として書くのとコードの整理を両方やると決めた
  2. 外に出る操作と、壊れる操作: 実 AWS への書き込み(deploy・destroy、S3 への同期、Athena の DDL)と開発 DB の作り直しは、メインが確認を取ってから実行する。サブエージェントは実 AWS には synth と読み取りまで。コミットは自分が指示したときだけ
  3. 画面の確認とマージ: 大きめの作業はブランチで進め、自分がブラウザで確かめてから main にマージする
  4. 仕組みに足すもの: 後で書く台帳で「2 回起きたら提案」まで来たものを、足すかどうか決める
  5. 記事: 骨格は作らせるが、自分の言葉に書き直してから出す

いちばん人がやらないとまずいと思うのは、画面の確認です。
テストもレビューも通っているのに、実際に触ると「これは迷う」というところが出てきます。
使う人の目で見るのは、今のところ自分にしかできません。

最初から作り込まない: ハーネスの台帳

hooks(決まった操作で自動で走る処理)や skills(手順のまとまり)は、最初から作りません。
運用で困ったことを docs/harness-backlog.md という台帳に 1 行ずつ書き、同じことが 2 回起きたら仕組みに足すことを提案させます。足すかどうかは自分が決めます。

台帳には今 88 行あります(2026-10-27 時点)。

状態 件数
候補 67
採用 18
解消(仕組みではなくコードで直した) 3

7 割強(65 行)が種別「定義修正」(エージェントの定義やブリーフの書き方の直し)です。

台帳から仕組みに戻った例

  • 同じ依頼を 10 回書いたので、スキルにした: 「implementer → verifier → レビュー → 差し戻し → verifier → コミット」を、購入フローで 7 回、イベントログの出力で 3 回、毎回ブリーフに書いていた。これを /step というスキルにまとめた
  • 記事の手順も、2 回目でスキルにした: 記事の素材にする開発メモは、後の機能追加で直った話や古い件数が残っていることが多い。連載(2)と(3)で 2 回続けて「researcher にコードと照合させる」とブリーフに書いたので、素材集めから公開後の後片付けまでを /article というスキルにした。この記事も /article X-1 で進めている
  • implementer の返却から、implementer の定義へ: 同時実行のテストを書くステップが 3 回続き、implementer が 3 回とも返却の「気づき」欄に「ブリーフにテストの書き方があれば探索が減る」と書いてきた。別の接続で行を握って待たされたかを測る、といった定石を implementer の定義に書いた
  • レビューの指摘から、check へ: macOS の bash 3.2 でしか起きない落とし穴($VAR の直後に日本語を置くと変数名に取り込まれる、など)を、レビューが 2 ステップ続けて見つけた。定義に注意書きを足すのではなく、scripts/check.sh に検査を足した

例外: 起きる前に入れたもの

リポジトリを public にしたあと、秘密情報の検査(gitleaks)を入れました。台帳のルールでは「起きてから」ですが、秘密情報は一度 push したら取り消せません。
これは自分の判断で、発生 0 回のまま採用しています。

Next.js 16: 学習済みの知識と違うものを書かせる

Next.js 16 は、モデルが学習した Next.js と規約が違います。
Next.js 自身がプロジェクトに AGENTS.md を書き出していて、「これはあなたの知っている Next.js ではない。書く前に node_modules/next/dist/docs/ の該当ガイドを読め」と書いてあります。

このルールを CLAUDE.md の必須ルールと implementer の定義に写しました。ほかにも次のような違いを、気づくたびに開発メモへ足しています。

  • middleware は proxy.ts に名前が変わった
  • キャッシュのガイドが 2 系統あり、このリポジトリの設定(Cache Components が無効)で読むべきなのは片方だけ

それでも、必読と書いたガイドを implementer が読まずに実装し、差し戻しで再指示しても読まなかったことがあります(台帳では候補のまま)。
新しいページを足すと型の生成(next typegen)を流すまで型検査が落ちる件は 2 回起きたので、check に組み込みました。

分けておいてよかった 2 つの例

最近の作業で、役を分けていたから見つかったものが 2 つあります。

記事の事実確認で、向きの逆転が見つかった

連載(2)の下書きで、「app と scheduler で PHP のパッチ版がずれた」話を、メインが逆向き(app が新しい方)に書いていました。
開発メモには 8.4.24 と 8.4.26 で起きたとだけあり、どちらがどちらか書いていなかったためです。
下書きを researcher に渡してリポジトリと突き合わせさせたら、当時のセッションログに残っていたレビューの結果から正しい向き(scheduler が新しい方)を見つけてきました。

check を通った検査が、すり抜けていた

gitleaks の最初の版は、Docker の中で動かす作りでした。implementer は自分で試して「止まる」ことを確かめ、check も通っていました。
ところが code-reviewer が実際に試すと、git commit -a と、git の worktree からのコミットで、秘密情報がそのまま通りました。
git がフックに渡す環境変数(一時インデックスを指す GIT_INDEX_FILE)がコンテナに届かず、worktree の本体もマウントの外で見えていなかったのが原因です。worktree ではコンテナ内の git が失敗しても、gitleaks は「漏れなし」で終わっていました。ホストで動かす作りに変えました。

check も、実装者の「確かめた」も嘘ではありませんでした。試した範囲では正しかっただけです。
「通った」は「正しい」ではなく、「試した範囲では大丈夫」という意味だと割り切って、範囲の外を試す役を別に置いておくのが大事だと思いました。

うまくいっていないこと

  • 候補がたまる: 88 行のうち 67 行が候補のまま。却下は 0 件で、整理できていない
  • 事故は起きた: implementer がテスト用の DB を指定し忘れて、開発 DB を作り直したことがある(合成データの生成器で作り直せたので実害は小さかった)。止める仕組みは、発生 1 回なのでまだ候補
  • 報告せずに終わる: 長いコマンドをバックグラウンドに回した implementer が、結果を返さずに終わったことがある。定義には check をフォアグラウンドで回すよう書いてあったが、テストや生成のコマンドは対象外で、防げなかった。その場はブリーフに「すべてフォアグラウンド」と書いて通し、定義をどう直すかは候補のまま。同じ implementer は、結果を待つための監視ループもバックグラウンドで回していて、待ち先のファイルが消えたあとも 13 日間 3 秒おきに回り続けていた(セッションを閉じるときに気づいて止めた)
  • 規則の理由が残っていない: 「レビューに実装者の説明を渡さない」のように、なぜそうするかが文書に書かれていない規則がある。この記事を書くために見直して気づいた

台帳と規則を、一度まとめて見直したいです。
似た候補はまとめ、もう起きないものは却下し、残す規則には理由を 1 行ずつ足す。
理由を書けないものは、外しても困らないものだと思っています。

まとめ

  • メインは分解と統合だけ。作業は、道具とモデルを絞ったサブエージェントに渡す
  • 人が決めるのは、方針、外に出る操作と壊れる操作、画面の確認とマージ、仕組みに足すもの、記事の言葉
  • 仕組みは最初から作り込まず、台帳に書いて 2 回起きたら足す。ただし起きてからでは遅いものは先に入れる

設定はリポジトリの .claude/ と CLAUDE.md にあります。

シリーズの他の回:

番外編:

この記事の骨格は Claude Code に作らせ、自分の言葉で書き直しています。記事中の数字(コミット数、台帳の件数など)は、手元のリポジトリで数えています。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?