0
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?

なぜAIエージェントの夜間コード巡回スキルを『オーケストレーター』として設計したのか

0
Last updated at Posted at 2026-04-22

この記事は playpark Blog からの転載です。


この記事で分かること

  • AIエージェントに夜間コード巡回を任せるときの設計アプローチ比較
  • 「修正ロジックを自前で持つ」vs「既存スキルへ委譲する」の判断基準
  • 自律スキルで安全策(ガード)をどう積むかの考え方

背景: こういう課題があった

コードベースを抱えた開発チームなら、おそらくどこも同じ問題に直面しています。

  • PRのレビュー待ちが何日も放置される
  • // TODO: あとで直す が何ヶ月も残り続ける
  • lint警告が数百件積み上がり、もはや誰も見ていない
  • スキップされたテストの理由を誰も覚えていない

どれも「誰かがやれば片付く」けれど、「誰もやりたくない」系の仕事です。こういう劣化は人間が寝ている間にも進みます。そこで、AIエージェントに夜間巡回 → 検出 → 修正 → PRを自動化させる night-patrol というClaude Codeスキルを作りました。

ここで設計上の大きな分かれ道が一つあります。「修正ロジック」をこのスキル内に自前実装するか、既存のスキルに委譲してオーケストレーターに徹するかです。

選択肢の検討

3つの設計案を比較しました。

アプローチ メリット デメリット
A. 修正ロジックを night-patrol 内に全部書く 夜間用に最適化しやすい / 依存が少なくシンプル 昼のワークフローと品質基準が分岐する / 既存の実装スキルと重複
B. CI/cron から既存の汎用スクリプトを呼ぶだけ 運用が単純 Triage や依存解析などの判断をスクリプトで書くのは辛い
C. 既存スキル(dev-flow)に委譲するオーケストレーター 昼夜で品質ゲートが完全に同一 / 責務分離がきれい dev-flow 側の変更に引きずられる

採用したのはCです。

なぜこのアプローチを選んだか

決め手は、「夜間用」という理由で品質基準を下げたくなかった ことです。

もしnight-patrol内に修正ロジックを自前実装すると、夜用に「少し甘い基準」を作りたくなります。でもそうすると、夜通ったPRが昼のレビュー基準で落ちる事態が必ず起きます。結果、朝レポートを見た人間が毎回「このPRは本当にdevにマージしていいのか」で迷うことになる。これでは自動化のメリットが消えます。

そこで「何を直すか」と「どう直すか」を明確に分離しました。

night-patrol (何を直すか / ブレーキ設計)
├── Phase 1: Scan   - lint / test / issue をスキャン
├── Phase 2: Triage - 重複排除・グルーピング・優先度・依存解析・ガード適用
├── Phase 3: Execute → dev-flow に委譲 (どう直すか)
└── Phase 4: Report - Markdownレポートと通知

dev-flow (どう直すか / 昼と同じ実装ワークフロー)
├── dev-issue-analyze
├── dev-kickoff → plan → implement → validate → evaluate
├── git-pr
└── pr-iterate → pr-review → pr-fix

night-patrol が決めるのはあくまで「対象と優先度と実行順」まで。コードを実際に書いて検証するのは昼も夜も同じ dev-flow。こうすると、夜間の修正PRも昼のコードレビュー基準・テスト基準・validateを同じ経路で通ることが自動で保証されます。

実装例: バッチプラン生成

Triageが出力する実行プランはこんなJSONです。

{
  "batches": [
    {
      "batch": 1,
      "issues": [456, 789],
      "mode": "parallel",
      "reason": "独立、ファイル重複なし"
    },
    {
      "batch": 2,
      "issues": [123],
      "mode": "serial",
      "depends_on_batch": 1,
      "reason": "#123 は #456 が修正した auth.ts に依存"
    }
  ]
}

ファイル重複をスクリプト側で機械的に検出し、論理依存だけLLMに判定させる、というハイブリッドにしています。「全部LLMに任せる」でも「全部スクリプト」でもなく、得意な方に寄せる。このバッチを受け取ったPhase 3は、mode に従って並列バッチは Task subagent で同時起動、直列バッチは順に dev-flow を呼ぶだけです。

安全ガードは単独ではなく重ねる

オーケストレーターとして責務を絞ったぶん、ブレーキ設計は自分で持ちます。単独では必ずすり抜けるので、6つを重ねています。

ガード 何を防ぐか デフォルト
破壊的変更検出 public API変更、DBマイグレーション issueスキップ
1 issue変更行数上限 巨大修正の混入 500行超過でスキップ
denylistパス .envmigrations/ 等の保護 glob指定
denylistラベル do-not-autofix ラベル指定
denylist issue番号 人間が手動対応したいもの 番号指定
累積変更量上限 ブランチ全体の差分爆発 2000行で残り全スキップ

500行 × 10 issue = 5000行 の巨大差分を防ぐため、1 issue 単位の上限とは別に累積上限を置いているのがポイントです。

まとめ: どういう場面で使うべきか

「AIエージェントに何かを継続運用させるスキル」を設計するときは、次の3つを判断軸にするのがおすすめです。

  1. 昼のワークフローと品質基準を揃えられるか — 揃えられないなら、その設計は運用で剥がれます
  2. 「何をやるか」と「どうやるか」を分離できるか — できるならオーケストレーター型が素直
  3. ガードを1つではなく重ねられるか — 自律で動かすなら単独ガードはすり抜け前提

night-patrol の場合は、Execute を既存の dev-flow に委譲したことで、スキル自体は Triage と 6 ガードに集中でき、結果として朝レポートの信頼性が安定しました。自前ですべてを抱え込まない設計判断が、運用の信頼性に直結する好例だったと思います。


さらに深掘りしたい方へ

この記事では night-patrol の設計判断(オーケストレーター型に振った理由)を中心に書きました。

:page_facing_up: AIエージェントが夜中にコードを巡回・修正する「night-patrol」の設計と実践【Claude Code Skills】 ではさらに:

  • --deep モードでの code-audit-team(security / performance / architecture)との連携と、コスト感
  • dry-run → --max-issues 縛り → フル運用、への段階的導入ステップと実際に調整した設定値
  • Phase 4 の朝レポートのフォーマット例と Telegram 通知連携
  • skill-retrospective との連携で、スキル自身の実行結果からスキルを改善するループ

を扱っています。


playpark について

playpark LLC - 業務自動化・AI活用・Web開発

:link: お問い合わせ | ブログ

0
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
0
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?