AI Navigate

AIエージェントは人間がレビューするよりも速くコードを出荷できる。阻むものは何か。

Dev.to / 2026/3/18

💬 オピニオンDeveloper Stack & InfrastructureIdeas & Deep AnalysisTools & Practical Usage

要点

  • AIエージェントは人間がレビューするよりはるかに速くコードを書き込み、コミットできるため、gitレイヤーの保護がないまま迅速で検証されていない変更が生じる。
  • gitレイヤーで強制可能な標準がなければ、不整合なコードの大規模な塊がリポジトリのベースラインとなってしまう。
  • Vue 2 から Vue 3 への移行の例は、ガードレールが欠如すると巨大な最終段階の問題が一気に現れることを示している。
  • この記事は、2行の防御策を提案している。gitレイヤーでスタイルとプロジェクト規約を強制することで、レビュー自体がエージェントのプッシュのゲートになる、というものだ。

AIエージェントを運用しているほとんどのチームには、gitレイヤーでの強制がありません。リポジトリ内で静かに進行しているものと、それを止める2行の防御策を紹介します。

AIエージェントがちょうど47ファイルを書き込み、コミットしました。すべてをレビューしましたか?

おそらくそうではない。

誰もやっていません。それが要点です — エージェントはレビューより速く動きます。 そして git レイヤーで標準を強制する仕組みが何もなければ、悪いコードはエージェントが書くのと同じ速さでリポジトリに到達します。

これが品質ゲートが作られた問題です。以前は遅い、人間の速度の問題でした。今は緊急です。

すべてを壊した移行(そして実際にそれを救ったもの)

3年前、私はホワイトレーベルのレジストリ・プラットフォームを維持していました — 複数のクライアントを動かす政府系ウェブアプリです。私たちは Vue 2 から Vue 3 へ移行する必要がありました。 Vue 3 はほぼすべてを変えました: リアクティビティ・システム、コンポーネントモデル、そしてエコシステム全体。その痛みの一部は不可避でした。しかし、最初の1時間で直面した壁は?それは私たちのものだったのです。

端末には数千のエラーがありました。いくつかのコンポーネントは TypeScript で書かれていました。いくつかはそうではありませんでした。適切な props がデフォルト値とともに定義されているものもありました。ほかのものは何年も前にコピー&ペーストされ、二度と見直されていませんでした。 Vue 2 と Vue 3 でスロットの扱いが変わりました — コンポーネントは孤立してレンダリングし、ユニットテストに合格しても、親レイアウトで黙って壊れることがありました。壊れたスロットはすべて手作業で見つける必要があり、アプリをフルロードして、正しい画面へ移動して検出する必要がありました。

フレームワークは変わりました。しかし、真の被害はガードレールの欠如でした — 強制されたパターンも、一貫した構造もなく、それが壁になるまで、コミットごとに流れを捉えるものが何もありませんでした。

それは人間のスピード版でした。長年にわたる検証されていない不整合が、強制移行によって一度に露わになりました。

今、5分ごとにそれを行うエージェントを想像してみてください

同じことを想像してみてください — ただしエージェントが5分ごとにコードをコミットします。

ガードレールがないと、エージェントは文脈から推測した任意のパターンでコードを生成します。いくつかのファイルは TypeScript を厳密に使用します。その他はそうではありません。いくつかはあなたのコンポーネント規約に従います。他は基本的な検査を通過するが、6カ月前にスタイルガイドで定義した3つのルールに違反するもっともらしいコードです。エージェントは知りません。指示されていません。そしてそれを止めるものは何もありません。

人間がレビューする頃には、不整合はすでにリポジトリに存在しています。47ファイルにもわたり、それが拡大します。そして今、それはあなたのベースラインの一部となっています。

これは仮想的なリスクではありません — 強制なしのエージェント主導のワークフローがすでにデフォルトです。エージェントは速く、有能です。そして、プロジェクトの規約には完全に無頓着です。ただし、それらの規約が定義され、エージェントに渡され、gitレイヤーで強制されない限りです。

品質ゲートこそがその強制力です。人がプッシュする場合は少なくともコードを読んでいます。エージェントがプッシュする場合、ゲート レビューの役割を果たします。

一部のチームは、エージェントはまだ「ジュニアデベロッパー」で、人間がまだ統制していると主張します。私はそれはすでに時代遅れだと思います。

二つの防御ライン

コードが人間由来であろうとエージェント由来であろうと、同じ2層が必要です:

Developer or Agent
        ↓
Line 1: Quality Gates  (pre-push, before code hits the repo)
  → linter (ESLint, ruff, clippy...)
  → formatter (Prettier, black...)
  → type checker (tsc, mypy...)
  → unit tests (jest, pytest, cargo test...)
        ↓
Repository → CI Pipeline
        ↓
Line 2: Integration / UI Tests  (before code hits production)
        ↓
Production

Line 1 は、プッシュ前の git フックで、スタックを自動検出し、4つのチェックを順に実行します — リンター、フォーマット、型チェッカー、ユニットテスト — ただしプロジェクトに実際にインストールされているツールのみ。何かが失敗すれば、プッシュはブロックされます:

❌ Quality Gates FAILED — push blocked.

Huskyなし、パッケージマネージャーなし、Node.jsの依存関係なし。言語に関係なく、どのgitリポジトリでも機能します。チーム全体のセットアップは1行で済みます: git config core.hooksPath .contextkit/hooks。ドキュメントの全スタックサポートは以下を参照してください: docsの全スタックサポート.

Line 2 は、Line 1 では構造的に捕捉できないもの — 実行時にのみ現れるもの:壊れたユーザーフロー、視覚的な回帰、分離したユニットテストは通過するが実際のブラウザ環境では失敗するコンポーネント。Cypress や Playwright のようなツールがこれを処理します。

重要な洞察: Line 1 でユニットテストがすでに実行されているため、統合テストはすべてを網羅しようとするのではなく、重要なユーザーパスのみに集中できます。1時間のテストスイートは高価です。Line 1 でのユニットカバレッジに投資すればするほど — 迅速で安価、ビルド時のフィードバック — Line 2 はよりスリムで焦点の定まったものになります。

Line 1 はゲートで悪いコードを止めます。Line 2 は壊れた挙動がユーザーに届くのを止めます。

ゲートが機能する前に必要なもの

ほとんどのチームにはすでに標準があります。それらはConfluence、Notionのドキュメント、どこかのWikiにあります。誰かがそれらを書き、誰かが承認しました。そして締め切りが来て、プッシュは実際に出てしまいました — なぜなら機械的に止めるものがなかったからです。

それが本当の問題です。標準が存在しないことではなく、守るべきドキュメントを覚える必要があることが、ガードレールではありません。これは提案です。提案はエージェントと共にスケールしません。

ゲートが実際に強制するのは、コードに近い場所に存在し、バージョン管理され、AIツールで読め、毎回のプッシュでチェックされる標準です:

.contextkit/standards/
├── glossary.md        ← project terminology
├── code-style.md      ← coding conventions
├── testing.md         ← test patterns
├── architecture.md    ← decisions and constraints
└── ai-guidelines.md   ← rules for AI-generated code

これはループです: 標準が正しさの姿を定義します。ゲートがそれを強制します。エージェントは標準を読み、それに従って書き込みます。 標準がなければ、エージェントは推測します。ゲートがなければ、推測は検査なしにリポジトリへ届きます。さらに、プッシュ前に誰も確認していなかった Confluence のドキュメントも? それは役に立ちません。

これはちょうど3年前には私が持っていなかったものです。標準は存在していました — 緩く、非公式に、人々の頭の中や、プレッシャーの下で誰も開かなかったドキュメントの中に。もし code-style.md が最初の日から強制されていれば、移行中に見つかった不整合は、年を追って、プッシュごとに捕捉され、一度にすべて検出されることはなかったはずです。

私はこれを処理するために ContextKit を作りました — 標準フォルダ、gitフック、そしてチームが使用するあらゆるAIツール向けのブリッジファイル。1回のインストールで完了します。

要約

エージェントが大規模にコードを書いている現在、品質ゲートはもはや任意ではありません — それらと共にスケールする唯一の自動レビューです。ゲートを強制せずにエージェントにプッシュさせることは、コードベースを最も早く劣化させる方法です。

Line 1 — 品質ゲート(プッシュ前)
コードがリポジトリに到達する前に、リンター、フォーマッター、型チェッカー、ユニットテストを実行します。

Line 2 — 統合/UIテスト(CI)
コードが本番環境に到達する前に、壊れたフロー、実行時の回帰、視覚的なバグを検出します。

Line 1の強力なユニットカバレッジは、Line 2のコストと表面積を削減します。

本当に問われているのは、あなたがエージェントを信頼しているかどうかではなく、リポジトリ自体が信頼できるかどうかです。

今、チームが実際にこの問題をどう扱っているのか、興味があります:

  • エージェントを直接あなたのリポジトリにコミットさせていますか?
  • それともすべての変更がまだ人間のレビューでゲートされていますか?
  • ゲートがある場合、実際に何を強制していますか?

私は確固たる意見がありますが、現状チームが実際に何をしているのか、私は素直に知りたいです。

npm i -g @nolrm/contextkit && cd your-project && ck install

Written by Marlon Maniti. I build tools for AI-native development workflows. Follow for more on context engineering, squad pipelines, and shipping with AI at speed.