ageGroups配列方式からageMin/ageMax方式へ|広告フィルタ設計の落とし穴

4

Moeriumの広告ターゲティングで、最初に採用したのは ageGroups: [30, 40, 50] という配列方式でした。一見シンプルですが、「50以上」を意味するのか「50だけ」なのかが曖昧。バイブコーディングでも、仕様の言語化は人間の仕事だと痛感した話です。

当初の設計:ageGroups配列

  • ageGroups: [30, 40, 50] → 30代・40代・50代に表示
  • 一見直感的
  • でも「50代しか書いてないけど70代も対象なのか?」が曖昧

問題が発覚した瞬間

Claudeに「30歳以上の男性に表示する広告を追加して」と指示したら、ageGroupsを [30, 40, 50, 60, 70, 80, 90, 100] と展開してきました。これは仕様が曖昧すぎる証拠

再設計:ageMin / ageMax方式

  • ageMin: 30 → 30歳以上、上限なし
  • ageMin: 20, ageMax: 39 → 20〜39歳
  • ageMax: 25 → 25歳以下
  • 配列ではなく数値2つで明確化

意味的に明確で、Claudeに頼んでも誤解なく実装される。仕様変更には30分。

改善されたターゲティングロジックが効いているSNSの実物を見てみてください。

教訓:仕様の言語化は人間の責任

Claudeはコードは書いてくれますが、「仕様が曖昧だと曖昧なまま実装される」。仕様の精度はそのままアウトプットの精度に直結します。「ageGroupsという名前」と「実際の意味」がずれていても、Claudeはそのまま動かしてしまう。

言語化のコツ

  • 名前で意味が伝わる:ageMin/ageMaxは見た瞬間意味が分かる
  • テストケースを先に書く:「30歳の男性に出る/出ない」を例示
  • 境界値を明示:「30歳ちょうどは含む?」を最初に決める
  • Claudeに「曖昧な点はあるか」と聞く

「Claudeに聞く」のもバイブコーディング

Claudeに仕様を渡す時、「この仕様で曖昧な点はあるか」と先に聞くのが効きます。Claudeが見つけた曖昧点を解消してから実装に入ると、後の手戻りが激減します。

仕様レビューもClaudeに任せる時代

バイブコーディングで作るSNSの実物がこちらです。

Moeriumをもっと楽しむ

関連記事

コメント

  1. この記事へのコメントはありません。

目次