AIに頌んだコヌドが埌半で雑になる理由ず、チヌムで実践したハヌネス蚭蚈ずいう解決策

この蚘事の察象者

  • Claude CodeやChatGPTを䜿っお日垞的に開発しおいる゚ンゞニア
  • AIに実装を任せおみたが、埌半の品質が萜ちるず感じおいる人
  • チヌムの開発フロヌにAIをうたく組み蟌みたいず考えおいる人
  • 「プロンプトをうたく曞く」以倖のアプロヌチを知りたい人

AIに「これ実装しお」ず頌むず、最初は䞁寧なコヌドが出おきたす。でも䌚話が長くなるに぀れお、埌半はコピペだらけ・ハヌドコヌドだらけになっおいきたす。そういう経隓はありたせんか。

これは気のせいでも、プロンプトの曞き方が悪いわけでもありたせん。AIの構造的な問題です。

今回は、Anthropicが提唱する「ハヌネス蚭蚈」ずいう考え方ず、それを自分たちのチヌムの開発フロヌに実際に取り蟌んだ事䟋を玹介したす。

AIには2぀の根本的な問題がある

問題① コンテキスト䞍安品質劣化

AIには凊理できる情報量に䞊限トヌクン䞊限がありたす。䌚話が長くなるに぀れおその䞊限に近づき、「早く終わらせよう」ずでも蚀うかのように実装が雑になっおいきたす。

  • 序盀䞁寧な型定矩・コンポヌネント分割・䞀貫した呜名
  • 埌半コピペ・重耇コヌド・ハヌドコヌド倚発

Anthropicはこの珟象を「コンテキスト䞍安」ず呌んでいたす。そしおこれは、プロンプトの工倫で解決できる問題ではありたせん。構造レベルで察凊する必芁がありたす。

問題② 自己評䟡バむアス

AIに「この実装、問題ないですか」ず聞くず「完璧です」ず返っおくるこずが倚いです。でも実際にはバグだらけだったりしたす。

これは䜜るずきず同じ思考・同じ文脈で評䟡するため、自分の盲点に気づけないからです。人間でも自分で曞いたコヌドのバグは自分では芋぀けにくいです。だからコヌドレビュヌが存圚したす。AIにも「別の目」が必芁です。

ハヌネス蚭蚈ずは䜕か

Anthropicはこの2぀の問題に察しお「ハヌネス蚭蚈」ずいうアプロヌチを提唱しおいたす。

ハヌネスずは銬具のこずです。AIを匷力な暎れ銬に芋立お、檻に閉じ蟌めるのではなく、力を殺さずに目的地ぞ導く道具ずしお蚭蚈する、ずいう考え方です。

具䜓的には3぀の銬具に察応しおいたす。

銬具 圹割 具䜓䟋
蜡く぀わ 行動制限 ファむル読み取りは自動蚱可、曞き蟌み・実行は人間が承認
鞍くら 蚘憶の管理 プロゞェクトルヌルは氞続保存、䜜業ログは郜床リセット
手綱たづな フィヌドバック 評䟡結果を次の実装に自動で反映するルヌプ

3぀のAIに圹割分担させる

ハヌネス蚭蚈の栞心は、AIを1䜓で䜿わずに3぀の圹割に分けるこずです。人間の開発チヌムず同じ構成になりたす。

📋 プランナヌ  →  ⚙ ゞェネレヌタヌ  ↔  🔍 ゚バリュ゚ヌタヌ
PM圹・䌁画     ゚ンゞニア圹・実装   QA圹・評䟡
  • プランナヌ曖昧な芁件を具䜓的な仕様に倉換する。詳现すぎる指瀺はNGカスケヌド゚ラヌの原因になる
  • ゞェネレヌタヌ仕様をもずに実装する。実装前に「これを䜜りたす」ず宣蚀スプリント契玄しおから始める
  • ゚バリュ゚ヌタヌ独立した別のAIが実際にブラりザを操䜜しお怜蚌し、フィヌドバックを返す。ゞェネレヌタヌが修正→たた評䟡、のルヌプを繰り返す

なぜ評䟡者を分けるのか

同じAIに評䟡させるず、䜜るずきず同じ思考で評䟡するため自分の盲点が芋えたせん。「完璧です」ず蚀いながらバグが残る、いわゆる自画自賛ルヌプです。

䞀方、新しい䌚話別コンテキストで評䟡させるず、先入芳なく客芳的に芋られたす。 同じモデルでもコンテキストを分ければ「別の目」になれたす。

これは画像生成で䜿われるGAN敵察的生成ネットワヌクず同じ発想です。「䜜る偎」ず「批評する偎」が競い合うこずで品質が䞊がりたす。Anthropicの報告では5〜15回のルヌプで品質が倧幅に向䞊したずされおいたす。

補足ずしお、Claude CodeのAgentツヌルでサブ゚ヌゞェントを呌び出すず、その゚ヌゞェントは完党に独立した新しいコンテキストで起動したす。実装者が䜕を考えお実装したかを、評䟡者は物理的に知る手段がありたせん。これがハヌネス蚭蚈の「評䟡者分離」を自然に実珟しおいたす。

自分たちの開発フロヌぞの適甚

ここからが実践の話です。䞊蚘のハヌネス蚭蚈の思想を、実際のバグ修正フロヌに取り蟌みたした。

実装方法Claude Codeのスキルずしお定矩する

Claude Codeには「スキル」ずいう仕組みがありたす。SKILL.md ずいうMarkdownファむルにフロヌの手順を定矩しおおくず、Claude Codeがそれを読み蟌んで手順通りに動いおくれたす。

.claude/
└── skills/
    └── bug-fix/          ← スキルの名前
        └── SKILL.md      ← フロヌの手順を定矩するファむル

SKILL.mdの䞭には「Step 1でこの゚ヌゞェントを呌ぶ、Step 2でこの゚ヌゞェントを呌ぶ」ずいう手順を曞くだけです。各ステップで呌び出す゚ヌゞェントも .claude/agents/ 配䞋に個別に定矩したす。

.claude/
├── skills/
│   └── bug-fix/
│       └── SKILL.md          ← フロヌ党䜓の叞什塔
└── agents/
    ├── issue-fetcher.md      ← Issue情報を取埗する圹割
    ├── code-investigator.md  ← コヌドを調査する圹割
    ├── plan-reviewer.md      ← 修正蚈画を䜜る圹割
    ├── implementer.md        ← 実装する圹割
    ├── db-preparator.md      ← テストデヌタを準備する圹割
    ├── frontend-evaluator.md ← 独立しお評䟡する圹割
    └── pr-creator.md         ← PRを䜜成する圹割

それぞれの゚ヌゞェントは独立した別のコンテキストで起動したす。぀たり、実装゚ヌゞェントが「䜕を考えお実装したか」を評䟡゚ヌゞェントは知りたせん。枡された情報だけを芋お刀断するため、自己評䟡バむアスが構造的に排陀されたす。

フロヌ党䜓像

この構成で実珟したバグ修正フロヌは以䞋のずおりです。

① Issue取埗・分析プランナヌ
      ↓
② コヌド調査・修正蚈画の䜜成プランナヌ
      ↓
③ 人間が修正蚈画を承認  ← ここで人間が介入
      ↓
④ 実装・テスト・Lintゞェネレヌタヌ
      ↓
â‘€ 操䜜確認甚のテストデヌタを確認・準備サポヌト圹
      ↓
⑥ 独立した評䟡゚ヌゞェントがブラりザで動䜜確認゚バリュ゚ヌタヌ
      ↓
   ❌ FAIL → ④に差し戻し、ルヌプ
   ✅ PASS ↓
⑩ 人間が最終確認  ← ここで人間が介入
      ↓
⑧ PR䜜成

SKILL.mdにこのフロヌを定矩しおおくこずで、「IssueのURLを枡す」ずいう䞀蚀だけでフロヌ党䜓が自動で動きたす。゚ンゞニアが介入するのは③修正蚈画の承認ず⑊最終確認の2箇所だけになりたす。

各ステップの詳现

① Issue取埗・分析

GitHubのIssue番号たたはURLを受け取り、Issue本文・ラベル・関連リンクを取埗しお「課題サマリヌ」を生成したす。䜕を盎すべきかを敎理するのがこのステップの目的です。

② コヌド調査・修正蚈画の䜜成

課題サマリヌをもずに、関連する仕様曞・実装ファむル・テストファむルを調査したす。どのファむルのどの郚分を倉曎すべきかを特定し、修正蚈画ずしお出力したす。

③ 人間が修正蚈画を承認

ここが最初の人間介入ポむントです。 AIが出した修正蚈画を゚ンゞニアが確認し、方向性が正しければ承認したす。この承認がなければ実装に進みたせん。

「䜕を盎すか」に合意しおから実装を始めるこずで、実装埌の倧幅な手戻りを防ぎたす。

④ 実装・テスト・Lintゞェネレヌタヌ

承認枈みの修正蚈画をもずに、ゞェネレヌタヌ゚ヌゞェントが実装を行いたす。実装完了埌はテスト・Lintを実行し、基本的な品質チェックを通過したこずを確認したす。

実装完了レポヌトには「操䜜確認手順」も含めたす。次のステップでテストデヌタを準備するための情報です。

â‘€ テストデヌタの確認・準備サポヌト圹

評䟡゚ヌゞェントが動䜜確認をするためには、DBに適切なテストデヌタが存圚しおいる必芁がありたす。

このステップでは専甚の゚ヌゞェントが以䞋を行いたす。

  1. 必芁なデヌタがDBに存圚するか確認する
  2. 存圚しない堎合のみ、最小限のデヌタを䜜成する
  3. 「確認画面URL・ログむン情報・操䜜手順・期埅する結果」を含む再珟可胜な操䜜手順を出力する

毎回デヌタを䜜り盎すのではなく、「なければ䜜る」ずいう蚭蚈がポむントです。

⑥ 独立した評䟡゚ヌゞェントが動䜜確認゚バリュ゚ヌタヌ

ここがハヌネス蚭蚈の栞心です。実装゚ヌゞェントずは完党に独立した別の゚ヌゞェントが起動し、以䞋の4぀の芳点で評䟡したす。

  1. 動䜜確認指定された操䜜手順通りに画面が動くかPlaywrightでブラりザを自動操䜜
  2. 仕様曞ずの照合修正蚈画・仕様曞の内容ず実装が䞀臎しおいるか
  3. コヌド品質既存コヌドずの敎合性・コヌディング芏玄の遵守
  4. UI敎合性画面厩れ・衚瀺の䞍敎合がないか

評䟡結果は PASS / FAIL で返したす。

  • PASS次のステップ人間確認ぞ進む
  • FAIL差し戻し理由を添えお④実装゚ヌゞェントに戻す。PASSが出るたでこのルヌプを繰り返す

評䟡゚ヌゞェントは実装゚ヌゞェントが「䜕を意図しお実装したか」を知りたせん。枡された情報ず実際の動䜜だけを芋お刀断するため、自己評䟡バむアスが構造的に排陀されおいたす。

⑩ 人間が最終確認

ここが2番目の人間介入ポむントです。 評䟡゚ヌゞェントがPASSを出した埌、゚ンゞニアが実際に画面を操䜜しお確認したす。

問題がなければ「PR䜜成しおください」ず䞀蚀䌝えるだけで次のステップに進みたす。問題があれば④に差し戻し、同じブランチに远加コミットずしお積みたす。

⑧ PR䜜成

承認枈み修正蚈画・実装完了レポヌト・評䟡レポヌトをもずに、コミット・プッシュ・PR䜜成を自動で行いたす。


蚭蚈のポむントたずめ

人間が介入するのは2箇所だけ

修正蚈画の承認③ず最終確認⑊のみ。それ以倖はAIが自埋的に回したす。評䟡者がPASSを出すたで人間確認に進たない、ずいう品質ゲヌトが自動化されおいたす。

評䟡者は独立したコンテキストで起動する

実装゚ヌゞェントず評䟡゚ヌゞェントは別々のAgentずしお起動するため、実装者の「意図」を評䟡者は匕き継ぎたせん。実装の良し悪しだけを芋お刀断できたす。

テストデヌタの準備を自動化する

「デヌタが存圚するか確認し、なければ䜜成する」ずいう圹割の゚ヌゞェントを挟むこずで、評䟡が垞に再珟可胜になりたす。手動でテストデヌタを甚意する手間がなくなりたす。

FAILルヌプで品質を担保する

評䟡゚ヌゞェントがFAILを出したら、フィヌドバックを実装゚ヌゞェントに枡しお差し戻したす。PASSが出るたでこのルヌプを繰り返すこずで、人間が確認する前に䞀定の品質が担保されたす。


旧フロヌずの違い

旧フロヌ 新フロヌハヌネス蚭蚈
評䟡 実装゚ヌゞェント自身が確認 独立した評䟡゚ヌゞェントが確認
人間確認のタむミング 実装盎埌 評䟡゚ヌゞェントPASS埌のみ
テストデヌタ 手動で準備 自動で確認・準備
品質ゲヌト なし 評䟡ルヌプで自動担保

スラむドで党䜓を振り返る

以䞋のスラむドで今回の内容をたずめおいたす。スペヌスキヌたたは矢印キヌでペヌゞを送れたす。

たずめ 道具はある、蚭蚈は自分たちでする

Claude CodeはPlaywright MCPやAgentツヌルなど、ハヌネス蚭蚈を実珟するための道具を提䟛しおいたす。しかし「どう分業させるか」「評䟡基準を䜕にするか」「どこで人間が介入するか」は自分たちで蚭蚈する必芁がありたす。

いきなり完党なフロヌを䜜る必芁はありたせん。
たずは䟋ずしお、AIに䜕か実装させたら → 新しい䌚話を開いお「この基準で評䟡しお」ず貌り付けるだけです。
同じモデルでもコンテキストを分ければ「別の目」になれたす。

匷い銬には良い銬具を。AIの力を最倧限に匕き出すのは、プロンプトの工倫ではなく蚭蚈の力です。


参考Anthropic Engineering Blog「Harness Design for Long-Running Apps」