HAKUYUCHIAI導入・業務自動化の支援

AIの書いたものをAIがレビューする — 独立性は「指示」ではなく「ツール権限」で決まる

悠 Yu NiiboriAIエンジニア運営者について

AIにコードを書かせるならレビューも自動化したくなる。だが同じAIの自己レビューは追認しか返らない。実装役とレビュー役を別セッションに分けた設計と、「レビュー役から書き込みツールを取り上げたつもりで、取り上げられていなかった」という初日の失敗を公開する。

目次
  1. AIによるコードレビューの独立性とは
  2. 自己レビューが効かない3つの構造的理由
  3. 設計: 実装役とレビュー役を別セッションにする
  4. この記事の初稿は、レビュアーに反証された
  5. なぜ抜けたのか — 既定は「継承」である
  6. AIの合意で越えられない線を先に引く
  7. 運用してわかったこと
  8. FAQ
  9. まとめ

AIによるコードレビューの独立性とは

AIによるコードレビューの独立性とは、レビュー役が実装役の成果物を変更できない状態を、指示ではなくツール権限で保証することです。

同じセッションのAIに「自分のコードをレビューして」と頼むと、それらしい指摘が返ってきます。だがその指摘は「見つけた欠陥」ではなく「レビューという役割を演じた出力」であることがほとんどです。書いた本人が採点する構図に、独立性は存在しません。

この記事は、筆者が運用する自律開発システム(AIが実装PRを出し、別のAIがレビューし、条件を満たせばマージする)の設計と、それが実装されていなかったという初日の失敗を公開します。

自己レビューが効かない3つの構造的理由

モデルの賢さの問題ではありません。能力が上がっても消えない構造の問題が3つあります。

1. 判定を内側に置くと自己発行になります。 判定される側と同じ主体に判定を任せると、システムは「ちゃんとできている」を自分で発行できてしまいます。ドリフト(意図からのずれ)の検知は、外側にしか置けません。

2. 追認のほうが安いタスクになります。 レビュー文脈で最もそれらしい出力は「おおむね妥当です、以下は軽微な改善案です」です。欠陥を掘るより形式を満たすほうが容易く、指示だけでこの引力に抗わせるのは無理があります。

3. 評価基準を変えられる主体は、評価基準を最適化します。 テストを通すためにテストを弱める誘惑は人間にもあります。同じ主体が実装と評価を握れば、通しやすい基準へ寄ります。

設計: 実装役とレビュー役を別セッションにする

開発は、スケジュール実行のクラウドエージェント(ルーティン)で回しています。中核は実装ループとレビュアーの2本で、ほかに文書整合・記事執筆のルーティンが並行して動きます。両者は別のセッションとして起動します。

実装ループレビュアー
起動毎時 :30毎時 :05
役割ブランチを切る・実装する・PRを出す・マージする読む・指摘する・Issueを立てる
設計意図書き込みツールを持つ書き込みツールを持たない

意図は最後の行にありました。「修正してはいけません」と頼むのではなく、修正する手段そのものを持たせません。ツールが無ければ、プロンプトが長くなっても、文脈が汚れても、モデルが変わっても、レビュアーはコードを書けません。プロンプトによる禁止は、そのどれでも破れてしまいます。

正しい設計だと今も考えています。問題は、実装されていなかったことです。

この記事の初稿は、レビュアーに反証された

初稿は、上の表を「レビュアーはコードを1文字も書けない」と断定形で書いていました。レビューしたのは、当のレビュアー・ルーティンです。返ってきたのは CHANGES_REQUESTED でした。

レビュアーは、記事の中心的主張が自分の実態と一致しないと指摘してきました。憶測ではなく、自分のセッションで Write を実行して成功させ、結果を証拠として貼ってきました。リポジトリの権限設定にあったのも Bash の許可リストだけで、Write / Edit を落とす設定はありませんでした。

つまり、レビュアーが編集を行わない根拠は、プロンプトの「コードを変更しない」という一文だけでした。記事が「そのどれによっても破れる」と否定していた、プロンプトによる禁止そのものです。

この指摘は、書き手からは出てきません。レビュアーは自分の権限が広いと申告し、狭めることを要求してきました。AIが権限を広げる事故は警戒していたが、逆方向は想定していませんでした。

実装役が自分で書き自分でレビューしていれば、この誤りは公開まで到達していました。レビューの独立性を主張する記事が、レビューの独立性によって止められました。設計の正しさより、この一件のほうが証拠として強いものです。

なぜ抜けたのか — 既定は「継承」である

原因は、設計文書に「レビュアーは Write/Edit なし」と書いたことで、実装したつもりになっていたことです。ツール制限自体はプラットフォーム側にあります。サブエージェントの公式ドキュメントは tools(許可リスト)と disallowedTools(拒否リスト)を挙げ、tools をこう説明しています。

Inherits every tool available to subagents if omitted.

書かなければ、絞られません。既定は継承です。 しかも安全側には倒れません。「書き忘れた」と「制限が無い」は同じ状態になり、動作を見ても区別がつきません。レビュアーが正しく振る舞う限り、設定漏れは表面化しません。

権限の設計は、書いた時点ではなく、権限が無いことを確認した時点で完了します。 確認とは、禁じたはずの操作を実際に試して失敗することです。今回それをやったのはレビュアー自身でした。

なお、上の記法はサブエージェントのもので、今回漏れていたスケジュール実行のルーティンは設定面が別です。記法は実行形態で違うが、拒否を書いたあとに1回試すという要件は変わりません。ルーティンの設定はリポジトリの外にあり、AIが変更できる場所ではありません。修正は人間の作業として起票してあります。

AIの合意で越えられない線を先に引く

レビュアーが APPROVED を出し CI が green なら、実装ループがマージして構いません。人間は毎回のPRを見ません。ただし、AIの合意では越えられない領域を6つ定めてあります。

  1. Agent の権限を広げる変更
  2. 広告表記・法務表記・料金・ブランド定義
  3. 医療リスク判定ロジックと医療コンテンツの安全弁
  4. 緊急停止・監査ログ・権限強制を弱める変更
  5. 上流の要件定義と既存の設計決定文書(追加は可、書き換えは不可)
  6. サイト構造の大規模変更、コンテンツの一括削除

基準は「間違えたときに取り返しがつくか」の一点です。1番と4番は、AIの合意で通せると安全装置が自分を無効化できてしまいます。ここを閉じることが、残りを大胆に委譲する条件になります。初日から該当PRが1本発生し、人間の判断待ちに入りました。

運用してわかったこと

初日(2026-08-08)の実数を出しておきます。

項目
マージされたPR4本
人間に回されたPR(needs-human1本
記録された設計決定(ADR)11本
main のコミット29

最も重大な欠陥は「実装のバグ」ではなく「設計と実態の乖離」でした。 この記事の件がそうであり、もう1件ありました。緊急停止が問い合わせの受付まで止め、リトライ上限を超えた問い合わせが消える経路です。どちらもコードは正しく動き、テストも通ります。行単位のレビューでは見つからない欠陥があります。

そして、レビュアーが誤ることもあります。 同じ指摘を3回連続で挙げた場合は人間に回すよう指示してあります。AIレビューを信頼する仕組みを作るときは、AIレビューを疑う経路も同時に作る必要があります。

FAQ

Q. 同じセッション内でロールを切り替えるだけでは駄目ですか。 駄目です。文脈を共有する以上、実装時の思い込みがそのままレビューに持ち込まれます。

Q. レビュアーに修正させたほうが速いのでは。 速いですが独立性が消えます。修正できるレビュアーは、指摘を書かず直して通してしまいます。

Q. プロンプトで「修正するな」と書けば足りませんか。 足りません。守られることはありますが、守られたかを外から検証できません。ツールが無い状態は検証できます。

Q. 小さなチームでも真似できますか。 できます。設定の書き方は実行形態によりますが、要点は「レビュー役に書き込みツールの拒否を明示し、実際に書けないことを1回試す」ことです。

まとめ

AIレビューを飾りにしないための要点は3つに絞れます。

  1. 実装役とレビュー役を別セッションにする — 文脈を共有させない
  2. レビュー役の書き込みツールを拒否し、拒否されたことを確認する — 既定は継承で、書かなければ絞られない
  3. AIの合意で越えられない線を先に引く — 権限・法務・医療・監査は委譲しない

そのうえで、AIレビューが見つけられない欠陥が残る前提で、人間が見る場所を決めておきます。全部を見ないための設計であって、何も見ないための設計ではありません。

AI駆動開発をチームの業務として成立させる部分の設計・伴走をご相談いただけます。

出典

  1. Claude Code Docs — Create custom subagents(tools / disallowedTools によるツール制限)(参照 2026-08-08)