ハーネスとは何か
ハーネスとは「手綱(たづな)」のことです。馬に乗るときに手綱を引いてコントロールして進行方向を決めるように、Claude Codeにも手綱を引いてあげないとどこに向かって進めばいいのかわからないわけです。
今回紹介するハーネスとは、Claude Codeが自律的に、人間が介入せずにアプリ開発というゴールまでどうやってたどり着けるのかという仕組みづくりです。ガードレールのようなもので、その仕組み作りを自分たちで設計していきましょうというのが「Claude Codeハーネス設計」という意味になります。
ソフトウェアエンジニアに求められるスキルの変化
最近はソフトウェアエンジニアは自分でコーディングをせずに、いかにAIに自分が今までやってきたコーディングスタイルを委託できるのかという技術力、AIのプロダクトマネジメントが必須のスキルになってきています。これがハーネス設計というものになります。
ソフトウェアエンジニアではなくて、いかにうまいハーネスを作れるのかというのが今求められるスキルになるわけです。
3つのサブエージェント
今回は一番ベーシックなハーネスの作り方を紹介します。これはAnthropic公式のブログでも言及されているPlanner、Generator、Evaluatorの3つのサブエージェントを組み合わせて、自律的に開発の完了まで終わらせるという仕組みです。
もっとサブエージェントを増やしたりすることもできますが、あまり増やしすぎると精度が落ちてしまうというデータもあります。この3つのサブエージェントさえ作って動かすことができれば、もう8割9割は全自動でアプリ開発が完了します。
もちろん最後の1割2割は人間のバグ修正・出しが必要になりますが、MVPの8割9割がこれで完成するので、かなりの効率化になります。
Planner(計画者)
実装前に最初だけ呼び出されるエージェントです。例えば「動画講座プラットフォームを作ろう」となったら、どういう仕様にするのかを決めるためのエージェントになります。
ただしPlannerは必須ではなく、最初にスラッシュプランコマンドやプランモード、最近だとUltra Planを使って仕様書を固めるという方法でも大丈夫です。
仕様書を固めるときは、最初から講座プラットフォームの仕様が決まっているわけではないので、Claude Codeから逆質問してもらいます。「どういった機能が必要そうですか」「ここはどうしますか」と質問が来るので、それに答えて仕様書をどんどん固めていくという作業が最初に必要になります。
Generator(生成者)
Generatorは実際のエンジニアの役割を担います。Plannerエージェントで作った計画書・仕様書・Taskを1機能ずつ実装していくエージェントです。
エージェントが一つ一つ違うので、Planner用のコンテキストを使い、Generator用のコンテキストを使うという形になっています。メインのコンテキストを汚すことなくきれいに実行できるというのも、サブエージェントを分割しているメリットになります。
Evaluator(評価者)
Evaluatorは実装が完了した内容をレビューする、レビュアーの役割です。実際のエンジニアの開発現場でも、仕様書をもとにエンジニアが実装して、実装した内容をプルリクエストという形でGitHubで「このコード作りました、レビューしてください」と投げます。レビュアーが良いか悪いかをレビューして、良ければマージする(既存のコードに組み合わせる)という作業を行います。それがEvaluatorの役割になります。
一定の基準に満たない場合は不合格となり、もう一度レビューの内容を返却してGeneratorがそれを見てさらに修正を加えていくというフィードバックループが生まれます。合格であれば次の機能に移動します。
例えば講座プラットフォームの実装が全部で50機能存在するのであれば、自律的に50機能を行います。つまりこの生成者と評価者が自律的にフィードバックループを行うので、50機能を全部実行するまで止まらずにやってくれるわけです。今回のプラットフォームの規模でいうと数時間程度、おそらく4時間5時間ほど自律的に動いて完成までやってくれます。
Evaluatorの高度な機能
Evaluatorはコードの中身を評価するだけではなく、PlaywrightというMCPサーバーを使ってAIがブラウザを起動し、どういうデザインの見た目になっているのかを目を持たせることもできます。ちゃんと意図した通りにアニメーションしているか、ボタンがちゃんと押されているかといったUIの見た目の部分もEvaluatorでテストすることができます。
数時間稼働させて「完了しました」と帰ってきたアプリケーションは、もうちゃんと動作するアプリが完成しているというところが今までと全然違います。ハーネス設計していない場合だと「実装しました」と言われてもちょっと動かないとかエラーが出てしまうことがあったと思いますが、このハーネスにすればちゃんと合格点に達している状態で納品してもらえるので、ちゃんと動くわけです。
キーワードはこの自己改善ループです。この自己改善ループがすべて終わればアプリ完成ということになります。
デザインの指定方法
Generatorでコード実装させるとき、どういうデザインで実装されるのかという問題があります。そこはPlannerのところでDesign MDファイルを活用します。
最近だとGetDesignsなどのサービスが存在していて、例えばNotion風のデザインにしたいときやAppleのようなデザインにしたいといった場合に、デザイントークンが配布されています。Design MDファイルをコピー&ペーストして「デザインはこんな感じのベースでお願いします」と言えば、それを元にやってくれます。
ワイヤーフレームを決めたい場合は、画像やスクリーンショットを渡せばそれどおりに実装してくれます。また、ChatGPTの画像生成の精度が上がってきているので、講座プラットフォームのワイヤーフレームやUIデザインを出してもらい、その画像を添付しても良いでしょう。
コード生成以外への応用
今回のお話はコード生成だけに限らず、コンテンツ生成にも応用できます。Xのポストの生成や動画の生成など、何かしらコンテンツを生成して副業や事業をしている方であれば、このハーネスは応用できます。生成に対してのEvaluatorというサブエージェントを組み込むだけで、フィードバックループを回して精度が上がってくるので、いろんな事業に応用していただきたいと思います。