0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

AnthropicのHarness設計パターンをClaude Codeで試した話

きっかけ

3月にAnthropicがHarness設計の記事を出した。

Harness design for long-running application development

「Generator と Evaluator を分けてデザインを反復改善する」という話で、読んでいて自分のプロジェクトで試したくなった。手元にあった FIRE カルキュレーターのUIが平凡だったので、ちょうどいい実験台になりそうだった。

結論から言うと、4ラウンド回して48点→90点まで上がった。ただし完璧ではない(最後に書く)。

Harnessって何

元記事が指摘してるのは2つ。

  • 長時間タスクだとAgentが「もう終わらせたい」モードになって質が落ちる(Context Anxiety)
  • 自分で作って自分で評価させると「いいですね!」になりがち

解決策はGAN的な発想で、作る役と評価する役を別のAgentに分ける。

実験対象

自作のFIRE計算ツール。

  • Next.js 16 + TypeScript
  • Tailwind v4 + DaisyUI v5
  • カスタムCSS変数(oklch、ライト/ダーク対応)
  • フォント:DM Sans + Space Mono
  • Recharts

リポジトリ:https://github.com/Cyoukakitsu/fire--calculator--v1.1

「動くけどデザインが平凡」というよくある状態だった。配色は青紫系、レイアウトは中央寄せ、特に個性なし。

投げたプロンプト

Claude Codeに渡したPrompt。Generator と Evaluator を交互に5ラウンドまで回す指示にしている。

あなたは今、このFIREカルキュレータープロジェクトに対して
「デザイン改善ループ」を実行する。
Generator と Evaluator の二つの役割を交互に担い、
Evaluatorの合計スコアが85点以上になるか、4ラウンド完了するまで繰り返す。

## プロジェクト技術スタック
Next.js 16 + TypeScript + Tailwind CSS v4 + DaisyUI v5
カスタムCSS変数設計システム(oklch、ライト/ダーク対応)
フォント:DM Sans + Space Mono / チャート:Recharts
起動コマンド:pnpm dev

## 変更禁止ファイル
- src/hooks/ 配下すべて
- src/utils/calculateFireResult.ts
- src/types/index.ts

## 評価基準
- Design Quality(40点):視覚的統一感、専門感、色彩
- Originality(30点):意図的なクリエイティブ選択。減点対象の「AIっぽい」パターン:
  紫/青グラデ+白カード、没個性の角丸カード積み重ね、
  中央寄せのhero文字、opacity-50の多用
- Craft(20点):間隔、階層、コントラスト、レスポンシブ
- Functionality(10点):入力→計算→結果のフロー

## 実行フロー

### 準備
1. git checkout -b design-improvement
2. globals.css、page.tsx、components/配下を読み込む
3. design-log.md を作成、初期スコアを記録

### ループ(85点到達 or 5ラウンドまで)

【Generator】
- design-log.md を読んで前ラウンドのEvaluator批評を理解
- 改善を実装、git commitで保存
- design-log.md に追記:ラウンド番号、変更内容、自己評価、最も不満な点

【Evaluator】
- design-log.md を読んで本ラウンドの変更を把握
- コードを確認
- 採点:<70は差し戻し(ラウンドカウントしない)、70-84は問題点を記録して継続、≥85で通過
- design-log.md に追記:スコア、具体的理由、問題リスト

### 終了
初期と最終のスコア比較、最も顕著な改善3点を出力。

工夫したのはこのへん。

  • 終了条件を動的にした(85点 or 4ラウンド)
  • 触っちゃいけないファイルを明示(ロジック保護)
  • 「AIっぽい」を具体例で定義(紫グラデ+白カードとか)
  • git で毎ラウンド保存(戻れるように)
  • design-log.md を Agent 間のハンドオフ文書として使う

4ラウンドの結果

改善前のUI

image.png

改善後のUI

截屏2026-06-04 21.47.44.png

各ラウンドの得点

ラウンド Design Original Craft Func 合計
初期 10 8 16 14 48
R1 26 18 16 10 70
R2 30 22 18 12 82
R3 34 24 18 10 85(通過)
R4 36 27 18 9 90

各ラウンドでざっくり何が起きたか。

R1(48→70):色とタイポを建て直し

青紫だったプライマリを琥珀色に変更。背景を純白から温かみのあるアイボリーへ。「FIRE.」の見出しをでかくしてmonoフォントの小ラベルを添える、エディトリアル系のレイアウトにした。中央寄せの hero 文字を捨てたのが大きい。

ここで「AIが作りそうな配色」から脱出できた感はある。

R2(70→82):レイヤーと情報を増やす

body に薄いドット背景テクスチャを追加。金融ティッカー(amber背景、横スクロールするmonoフォントの語句)を上部に挿入。SituationCard には琥珀の左ボーダー、StrategyCard には緑の左ボーダーで色分け。

ResultSection を全幅の反転バンド(黒地に白文字)にしたのもこのラウンド。後でこれが問題になる。

R3(82→85):技術的バグの修正

R2でダークモードの Tooltip が壊れていた(CSS変数の文字列を hex として解釈できていない)のをR3で発見して修正。MutationObserver でダークモードを検知して Tooltip スタイルを切り替えるコードを追加。

あと「Years to FIRE」っていう指標が表示されてなかったので追加。

R4(85→90):Freedom Timeline

一番想定外だったのがこれ。Generator が勝手に「Freedom Timeline」というコンポーネントを作った。横向きのタイムラインで、現在の年齢→FIRE年齢→シミュレーション終点までを表示。達成済み区間が琥珀色で塗られて、マイルストーンは45度回転した正方形(菱形)。

やってみて

design-log.md は結構良くて、あとから「なんでこの色にしたんだっけ」が追える。それとラウンドが進むほど Generator が大胆になるのが面白い。R1〜R3 は手堅いんだけど、R4 で急に変化球を投げてくる。元記事でもそういう傾向に触れてた気がする。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?