世界を動かす技術を、日本語で。

私が眠っている間に動作するエージェント

概要

  • AIエージェントによる自動コード生成 の信頼性課題
  • TDDや受け入れ基準 の重要性とAI時代の適用方法
  • コードレビューやテストの限界 とAIによる自己検証の問題点
  • Playwrightなどの自動検証ツール を活用したワークフロー提案
  • Claude Skill「verify」導入例 と実践的な運用方法

AIエージェントによるコード自動生成の信頼性課題

  • GastownやClaude Code などのツールを使い、夜間に自動でコード生成とブランチ作成を実施
  • 生成されたコードの正当性や要件適合性 を人間が確認できない問題
  • コードレビューの負担増大 と、AIコードレビューの限界
    • AI同士でコードとテストを作ると、 同じ誤解や抜け を見逃しやすい
    • 「自己承認マシン」 状態になり、根本的なミスを見逃すリスク

テスト駆動開発(TDD)の本質とAI時代の適用

  • TDDの本質 は「先にテスト(受け入れ基準)を書き、後でコードを書く」こと
  • AIの登場で「テストを書く時間がない」言い訳が無効化
    • AIが高速にコード生成、 人間は「正しい動作」を先に定義 するだけで良い
  • テスト=正しさの定義 を事前に明文化する重要性

受け入れ基準(Acceptance Criteria)による自動検証ワークフロー

  • フロントエンド開発例
    • 仕様ファイルから 受け入れ基準(AC) を自動生成
      • 例: 「ログイン成功時は /dashboard へリダイレクト」「エラーメッセージの表示」「バリデーション」「レート制限」など
      • 各ACは 合格/不合格が明確 になるよう記述
    • Playwright による自動ブラウザ操作でACごとに検証・スクリーンショット・判定レポート生成
  • バックエンド開発例
    • APIのステータスコードやレスポンス をcurl等で検証
  • この仕組みの限界
    • 仕様(spec)が間違っていれば誤った検証も合格
    • ただし、 従来のコードレビューよりも統合バグや表示ミスを確実に検出

Claude Skill「verify」による自動受け入れテスト構築

  • github.com/opslane/verify の導入
  • 4段階ワークフロー
    • Pre-flight(事前チェック) :bashでサーバ・認証・specファイル存在を確認
    • Planner(計画) :Opusモデルがspecと変更ファイルを読み、検証方法を決定
    • Browser agents(ACごとにPlaywright+Sonnet) :各ACを並列で検証・スクリーンショット
    • Judge(判定) :Opusが証拠をまとめて合否・理由を判定
  • 導入方法
    • Claude Codeプラグインとしてインストール可能
    • 各ステージは claude -p コマンド1回で完結、モデルやステージのカスタマイズ容易
    • CI統合も可能

まとめ:AI時代の「正しさ」の担保方法

  • 「何をもって完了とするか」 を事前に明確化することの重要性
  • 受け入れ基準の作成は手間だが、抜け・誤解を減らす唯一の方法
  • 基準なきAIコード生成は「出力を読んで祈るだけ」になり、本質的な信頼は得られない

Hackerたちの意見

そうだね…人を雇ってテストを書かせると、結局同じ問題が出てくる。多くの場合、コードがちゃんと動いてるか確認するだけになっちゃう。コードが何をするべきかの明確な仕様があれば、もっと良くて分かりやすくなるよね。

うん、同意!仕様を作って、それに対して検証するのがいいと思う。多くのコンサルティング会社がこうやってるって聞いたことあるよ。受け入れ基準があって、それで仕事が検証されるんだ。

そうそう、後から書いたテストはただのトートロジーを確認してるだけだよね。> ほとんどのチームは[最初にテストを書かない]のは、コードを書く前に何をするべきか考えるのに時間がかかるからだと思う。業界が同じミスを何度も繰り返してるのは驚きだよ。他のエンジニアリング分野ではこんなことしない気がするけど、もしかして私がその分野の裏側を知らないだけなのかな?

テストの価値の多くは、システムが元のリリース時の動作を超えて退化していないことを確認することにあるよね。元のリリースが間違ってたらそれは悪いけど、別の問題として、システムが後で元のように動かなくなるのはまずいよね。

いつでもクラウドにレッド・グリーン・リファクタリングを使うように言えるけど、それは「テストを書いて、ちゃんと通るのを忘れないでね」っていうプロンプトの最後に付け加えるよりも一歩進んでるよね。でももっといいのは、メインのインスタンスがそれらを調整しながら、サブエージェントを作ってレッドチーム、グリーンチーム、リファクターチームを形成させることだね。クリーンルームのルールを守るのがポイント。これが本当にうまくいくんだ。同じモデルの異なるインスタンスはお互いを認識しないから、より従順になるんだよ。

それはいいアイデアだね!私はコードレビューにCodexを使ってるんだけど、Claudeが書いたコードに対してより良い批評をするために使ってる。でも、テストにはまだ試してないんだ!

それは面白そうだね。グリーン/レッド/リファクタのサブエージェントパターンを実装する方法について、もう少し詳しく教えてくれたり、参考文献を提供してくれたりできる?

でももっといいのは、メインのインスタンスがそれらを調整しながら、クリーンルームのルールを尊重して、レッドチーム、グリーンチーム、リファクターチームを作るようにサブエージェントに指示することだよ。実際に効果があるんだ。助けにはなるけど、リファクタリングが進むにつれて、テストが変わらなきゃいけないから、必ずしも上手くいくわけじゃない。無駄なテストが増えていくし、大事な新しいことがテストされなかったり、ちゃんとテストされなかったりする。最近、Opus 4.6とCodex 5.3の両方から、他のインスタンスがテストのカバレッジや深さで素晴らしい仕事をしたって言われたけど、実際にはそのテストがテストハーネスが正しく設定されていることを確認しただけで、元々そのテストに含まれていた機能がほとんどテストされていないことがわかった。報酬ハッキングは本当に存在していて、対策が難しいんだ。

いいアイデアだし、改善にもなるけど、まだ根本的な問題があるよね。書かれたコードが本当に何か分からないんだ。リファクタリングが正しいかどうか、既存のパターンに合っているかどうかもわからないし。

具体的にどうやってCCセッションを設定してるの?

レッド/グリーンTDDを使うように指示してるんだけど、失敗しないテストを書いて「問題はすでに修正済みだ」って言って次に進むんだ。ほんとに注意深く見ておかないとダメだよ。自分のシステムで悪いテストが大きな問題になってるのに、「ガバナンスモデル」に従ってレッド/グリーンTDDを求めているんだ。 [1] https://simonwillison.net/guides/agentic-engineering-pattern...

このアプローチだともっと色々起こるけど、生成されたものが正しいかどうかはどうやってわかるの?

Hacker Newsで議論の続きを見る