AppleがXcodeにMCP連携を導入した。
AIエージェントが直接シミュレータを起動し、テストを回す。
多くの開発者がこの機能を活用する。
しかし、AIにテストを全自動で書かせることには罠がある。
AIの確証バイアスによるバグの隠蔽だ。
解決策は「生成」と「評価」の分離、そしてツールに依存しない自律的ハーネスの構築にある。
SNS運用を自動化しませんか?
ThreadPostなら、投稿作成・画像生成・スケジュール管理まで全てAIにお任せ。
ツールが進化するほどテストは危険になる
Xcodeの最新アップデートで、MCPブリッジ機能が実装された。
AIエージェントがIDEの内部操作に直接介入する仕組みだ。
これまでは人間が手動でシミュレータを立ち上げ、ビルドボタンを押していた。
これからはAIが自律的にテストコードを書き、その場で実行結果を確認する。
エラーが出れば、AIがログを読み、コードを修正して再実行する。
ローカル環境での自己修復ループが自動化される。
開発者のコンテキストスイッチは減少する。
しかし、別の開発現場からは報告が上がっている。
AIにテストの自動生成を任せると、同じ見落としを繰り返す。
AIは自分が書いたバグを「正解」だと思い込み、そのままテストを書く。
結果として、バグがあるのにテストはすべてグリーンになる。
何も気づかないまま、壊れたコードがデプロイされる。
実際にフロントエンドの統合テストをAIに任せた事例がある。
コンポーネントのカタログツールとテストライブラリを組み合わせた環境だ。
自然言語でブラウザを操作させるツールや、E2Eテストの自動生成も試された。
技術的には動いたが、最終的には不採用になった。
理由は、AI単体に「生成から確認、修正まで」を連続でやらせたからだ。
AI自身が埋め込んだバグを、AI自身が書いたテストで検証しても意味がない。
さらに、AIを操作するための基盤、いわゆる「ハーネス」の構造も変化している。
ベンダーが提供するインフラ機能が進化している。
これまで開発者が自前で組んでいたエージェントの記憶管理やツール連携が、公式機能に吸収されている。
便利になる一方で、特定のツールへの依存度が高まっている。
ツールが便利になるほど、僕らは「ツールに依存しない評価基準」を持つ必要がある。
生成と評価を分離し、ベンダーロックインを防ぐ設計思想が求められる。
※この記事は、Claude Codeで1人SaaS開発しているしんたろーが、海外AI最新情報を開発者目線で解説する「AI活用Tips」です。
<!-- IMAGE_1 -->
確証バイアスを破壊するサブエージェント設計
AIの確証バイアスは、人間の思い込みよりも厄介だ。
自分が生成したコードの文脈を引きずったままテストを書くと、見落としが発生する。
大規模言語モデルの仕組み上、直前の文脈に強く引っ張られる。
バグを生成したAIが、そのバグの挙動を仕様だと勘違いする。
そして、その間違った仕様を満たすテストコードを書き上げる。
これを防ぐには「生成するAI」と「評価するAI」を分離する。
責任を分割したマルチエージェントのワークフローだ。
生成担当のエージェントには、コンポーネントの分析とテストコードの作成だけをやらせる。
この段階では、品質の評価は行わない。
そして、評価担当のエージェントを新たに立ち上げる。
ここが核心だ。
評価用AIには、生成時のプロンプトや文脈を一切渡さない。
ファイルパスだけを渡し、独立した状態でコンポーネントの仕様を読み直させる。
生成AIが何を考えてコードを書いたのか、評価AIは知らない状態を作る。
この「文脈の遮断」によって、AIは客観的なレビューアになる。
生成AIが見落としたエッジケースや、間違った解釈を独立して発見する。
評価AIはコードの変更を行わず、評価レポートの出力のみに専念する。
既存のコードとテストの品質を、独自の照合表で診断する。
しんたろー:
Claude Codeでコードを書いていると、この確証バイアスは痛いほどわかる。
自分で書いたコードをAIに聞くと「完璧です!」と返ってくる。
だから最近は、別のチャットを立ち上げてゼロからレビューさせるようにしている。
XcodeのMCP連携は、強力なインフラだ。
AIがビルドを回し、テストを実行する手間をゼロにする。
しかし、それはあくまで「実行の自動化」に過ぎない。
その上で動かす「テストの妥当性を測るロジック」は、僕らが設計する。
インフラが強力になるほど、その上に乗る思想の重要性が増す。
高速にテストを回せても、評価基準が間違っていれば意味がない。
テストの目的は、コードが動くことを証明することではない。
仕様通りに動かない場合に、確実に失敗させることだ。
AIが書いたテストは、往々にして「実装された通りに動くこと」を検証する。
だからこそ、実装から切り離された独立した評価プロセスが必要だ。
<!-- IMAGE_2 -->
融解するハーネスとベンダー非依存の戦い
AI開発におけるハーネスは、多層構造になっている。
最下層には、各社が提供する強力なインフラがある。
その上に、僕ら開発者が組む自動化のスクリプトやツール群のハーネスが乗る。
そして最上層に、プロダクト固有のドメイン知識や評価基準という「思想」が存在する。
海外のAI実践者たちの報告を見ると、この階層の境界が融解している。
昨日まで自分で作っていたハーネスが、今日にはベンダーの公式インフラに吸収される。
例えば、エージェントのセッション永続化や記憶の管理機能だ。
これらは以前まで、開発者がデータベースを組んで自作する必要があった。
今ではベンダー側がマネージドな機能として提供し始めている。
これは歓迎すべき進化だ。
下のレイヤーがインフラ化することで、僕らは上のレイヤーである「思想」に集中できる。
インフラのメンテナンスから解放され、ドメイン知識の構築に時間を割ける。
問題は、その思想をどうやって管理するかだ。
特定のツールの独自フォーマットで評価基準を書くと、ロックインされる。
だからこそ、ドメイン知識やテストの評価ルールは、移植可能な形式で持つ。
マークダウン形式の手順書や、汎用的なデータベースファイルとしてGitで管理する。
実際に、数万件のエージェントメモリと数百のスキルファイルを蓄積した実践者がいる。
彼らの実装の大部分は、シンプルなテキストファイルと汎用的なデータベースで構成されている。
しんたろー:
うちの構成だと、Claude Codeのプロンプトや設定ファイルは全部リポジトリに入れている。
APIの仕様が変わっても、他のLLMにそのまま食わせれば動く状態にしておくのが精神衛生上いい。
ツールは裏切るかもしれないが、自分のGit履歴は裏切らない。
ベンダーロックインが怖くなるのは、思想を奪われた時だ。
自分のデータとフローを握られた時だ。
特定のツールの隠蔽された内部機能に依存しすぎると、移行コストが跳ね上がる。
だから、インフラは借りても、データとフローは自分で所有する。
明日、新しいAIツールが登場しても構わない。
インフラが変わっても、蓄積した「評価の思想」はそのまま移植できる。
公式の便利なインフラは使い倒す。
しかし、コアとなるドメイン知識はベンダーに渡さない。
これが、これからのAI開発における防御策になる。
テスト自動化の罠を抜け出し、自律型ハーネスを手に入れる方法だ。
<!-- IMAGE_3 -->
ここまで読んだあなたに
今なら無料で全機能をお試しいただけます。設定後は完全放置でプロ品質の投稿を毎日生成。
実務で自律的ハーネスをどう組むか
明日から開発現場でどう実装するか。
まず、AIエージェントを単なるコードジェネレータとして使うのをやめる。
ワークフローを意図的に多層化する。
テスト生成エージェントと、テスト評価エージェントの定義ファイルを分ける。
生成用プロンプトには、対象ファイルへの書き込み権限を与える。
必要なツールをすべて渡し、自由にコードを生成させる。
一方で、評価用プロンプトからは書き込み権限を剥奪する。
読み取り専用の権限だけを与え、コードの変更を物理的に不可能にする。
評価エージェントには、生成プロセスの履歴を見せない。
コンポーネントのソースコードと、テストファイルのパスだけを渡す。
そして、事前に用意した「評価チェックリスト」と照らし合わせるよう指示する。
このチェックリストこそが、プロダクトの「思想」だ。
ユーザー操作の手順が正しく網羅されているか。
エッジケースでのエラーハンドリングが適切にテストされているか。
これらを検証し、レポートとして出力させる。
もし評価エージェントが問題を指摘したら、そのレポートを修正用エージェントに渡す。
修正用エージェントは、レポートをもとにコードを直し、再び評価に回す。
この非同期のループを回すことで、確証バイアスを物理的に排除できる。
しんたろー:
AI同士でレビューさせる仕組み、最初は面倒だと思っていたが効果は大きい。
人間がレビューするより厳しいツッコミが入ることもある。
ただ、評価基準のマークダウンを書くのは人間の仕事だから、そこはサボれない。
これらのプロンプトやチェックリストは、すべて汎用的な形式で保存する。
特定のIDEのプラグイン設定ではなく、リポジトリ内の独立したディレクトリに置く。
プロジェクトのルートに専用のフォルダを作り、そこにマークダウンで書き溜める。
どのAIエージェントを起動しても、そのフォルダを読み込ませれば同じ動きをするように設計する。
これが、ベンダーに依存しない「自律的なハーネス」の正体だ。
ツールが進化して新しい機能が追加されても、蓄積したルールは色褪せない。
XcodeのMCP連携のような強力な機能が登場したら、実行部分だけをそちらに委譲する。
評価のロジックは自分の手元に残したまま、インフラの恩恵だけを享受する。
混乱の時期こそ、実装の自由度が最大になる。
業界の標準化を待つ必要はない。
痛みに駆動されて作ったスクリプトが、やがて強固なハーネスに育つ。
自分の実装物を信じ、積み上げることが正解だ。
よくある質問
Q1: AIにテストを書かせると同じバグを見逃すのですが、どうすればいいですか?
AIの確証バイアスが原因だ。生成担当と評価担当のエージェントを完全に分離する。
評価用エージェントには「生成時のプロンプトや文脈」を一切渡さない。
評価用エージェントには、コンポーネントの仕様書や定義ファイルのみを与える。
生成されたテストコードが仕様を満たしているかを、別の視点から独立して検証させる。
この文脈の遮断によって、見落としを減らすことができる。
Q2: ベンダーロックインを避けるために、ハーネスをどう設計すべきですか?
ツール固有の機能を使いつつも、中身は移植可能な形式で管理する。
特に「テストの評価基準」や「ドメイン知識」は、特定のAIモデルに依存しない形式にする。
マークダウンの手順書や、汎用的なスクリプトとしてGitリポジトリに蓄積する。
ベンダーのインフラが進化して機能が吸収された際、その上に乗る「君の思想」が残るように設計する。
データとフローさえ握っていれば、ロックインは防げる。
Q3: XcodeのMCPブリッジを使うメリットは具体的に何ですか?
これまで手動で行っていたシミュレータの操作を、AIエージェントが直接API経由で完結できる点だ。
ビルドやテスト実行をAIが自律的に行える。
AIがテストコードを生成した直後に、即座に実行結果を確認できる。
失敗した場合はログを読み、その場で修正を繰り返す「自己修復ループ」をローカル環境で構築可能だ。
開発者のコンテキストスイッチを減らし、テスト駆動開発のサイクルを高速化する。
まとめ
しんたろー:
AIにテスト書かせて「全部パスしました!」と言われて喜んでいた過去の自分を殴りたい。
評価を分離するのは、人間組織の監査と同じだ。AIにも第三者機関が必要な時代になった。
AIは単なるコード生成機から、自律的な評価基盤へと進化している。
ツールに依存せず、自分だけの評価基準を育てていく。

この記事が参考になったら、ThreadPostを試してみませんか?
投稿作成・画像生成・スケジュール管理まで、全てAIにお任せできます。
ThreadPostをもっと知る