Skip to Content
DocsMarketing Campaign Contract

Marketing Campaign Contract

全チャネルを同一メッセージ階層で統一する

1つの商品に対して、LP・広告・メール・SNS・営業資料を「同じトーン、同じメッセージ階層」で一括生成する契約(Contract)。

メガプロンプトで「いい感じに作って」は祈り。Contractは「この入力→この出力→この検証」を保証する。

5W1B+P Message Contract | OS-10


なぜ Contract か

アプローチ問題
チャネルごとに別々に作るトーンがバラける。修正の連鎖が終わらない
メガプロンプトで全部盛り出力が長大で検証できない。「それっぽい長文」になる
Campaign Contract1つの5W1B+Pから全チャネルを派生。媒体別の制約で出力を固定

入力スキーマ

Core: 5W1B+P(全チャネル共通)

Speaker: 誰が言うか(ブランド名、信頼性、声のトーン) Claim: 何を言うか(主張、差別化、裏付け事実) Audience: 誰に言うか(ペルソナ、JTBD、反論、知識レベル) Timing: いつ言うか(文脈、心理、季節フック) Purpose: なぜ言うか(課題、ゴール) Benefit: 何が得か(成果、感情、機能、社会的価値、変容) Proof: 根拠(データ、事例、証言、認定) +P: ひと押し(magic hints)

Campaign-specific

product_name: 商品名 offer: "初月無料", "30日返金保証" channels: 対象チャネル(下記参照) banned_phrases: キャンペーン全体のNG語句 message_hierarchy: primary: コアメッセージ(1文) secondary: 補強メッセージ(配列) proof_points: 数字・根拠(配列) cta_primary: メインCTA cta_secondary: ソフトCTA

対応チャネルと出力制約

ChannelFormatMax CharsRequired ElementsVariations
LPHTML5,000headline, subheadline, benefit_list, proof, cta, faq1
Google Ads (RSA)Text270headline×3(30字), description×2(90字)3
Meta AdsText500primary_text, headline, cta_button3
TikTok AdsText300hook, value_prop, cta2
Email (Welcome)HTML1,500subject, preview, greeting, value_delivery, next_step2
Email (Promo)HTML1,200subject, preview, offer, urgency, cta2
Email (Nurture)HTML1,500subject, preview, insight, proof, soft_cta1
Email (Re-engage)HTML800subject, preview, we_miss_you, incentive, cta2
Twitter/XText280*hook, value, cta_or_link3
ThreadsText500hook, story, cta_or_link3
Sales DeckMarkdown3,000problem, solution, differentiator, proof, pricing, cta1

* Twitter: CJK=2文字, URL=23文字固定の加重カウント


検証条件(Validation)

Per-asset(アセット単位)

  • 文字数が min〜max 範囲内
  • 必須要素がすべて存在
  • 禁止語句なし
  • CTAが空でない
  • Twitter: 加重文字数 ≤ 280
  • Google Ads: headline ≤ 30字, description ≤ 90字

Cross-channel(キャンペーン全体)

  • message_hierarchy.primary がすべてのアセットに反映されている
  • tone の一貫性スコア ≥ 0.7
  • 全チャネルで同じ offer を訴求している
  • 禁止語句が全アセットで排除されている

出力フォーマット

{ "campaign_id": "mc-campaign-001", "assets": [ { "channel": "lp", "variation": 0, "headline": "...", "body": "...", "cta": "...", "meta": { "description": "..." }, "char_count": 3200, "constraint_violations": [], "tone_consistency_score": 0.92 }, { "channel": "google_ads", "variation": 0, "headline": "...", "body": "...", "cta": "...", "meta": { "ad_group": "..." }, "char_count": 240, "constraint_violations": [], "tone_consistency_score": 0.88 } ], "message_consistency_score": 0.91, "tone_consistency_score": 0.89, "total_assets": 24, "channels_covered": ["lp", "google_ads", "meta_ads", "email_welcome", "sns_twitter", "sns_threads"], "validation_passed": true }

使い方

1. Contract を定義する

5W1B+Pのコア要素 + 対象チャネル + message_hierarchy を設定。

2. 一括生成する

全チャネルのアセットが同時に生成される。各チャネルの制約に従って出力が自動調整される。

3. 検証する

アセット単位の制約チェック + キャンペーン全体のトーン一貫性チェックが自動実行される。

4. A/Bテスト

variations > 1 のチャネルは複数バリエーションが生成される。本番投入後のパフォーマンスで選択。


技術実装

型定義: src/lib/genpost/contracts-v2.ts

MarketingCampaignContract // Campaign contract MarketingAsset // Individual asset MarketingCampaignOutput // Full campaign output ChannelConstraints // Per-channel specs CHANNEL_DEFAULTS // Channel preset configs validateMarketingAsset() // Per-asset validation twitterCharCount() // Twitter weighted count validateTwitterAsset() // Twitter-specific validation


設計診断を依頼する

Campaign Contract の設計・導入支援が必要な場合:

Responsible Architect:Panolabo / 沼 健一郎

Last updated on