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の実物がこちらです。
コメント
この記事へのコメントはありません。
この記事へのトラックバックはありません。