AI Navigate

Claudeに私の完全なAIマーケティング部門を構築してもらった — 具体的にどうやって実現したか

Dev.to / 2026/3/13

💬 オピニオンTools & Practical Usage

要点

  • 著者はAIを単一のプロンプトツールとしてではなく協働チームとして位置づけ、人間の指示、反復、ガードレールを強調している。
  • 彼らは6つの専門AIエージェント(CMO、SEO、コピーライター、ソーシャル、メール、アナリスト)を統括するPython CLIを構築し、コンテキストを一歩ずつ渡して互いの作業を積み上げていく。
  • アーキテクチャは base Agent クラスと think() メソッド、およびエージェントとツールの構造化ファイルレイアウトを中核とし、モジュール化・スケーラブルな自動化を実現している。
  • 本稿はマーケティングには多様な役割が必要で、AIは人間のチームを置換するのではなく補完できると主張し、マーケティング運用におけるAI活用の具体的な設計図を提供する。

正直な話: 私はこのコードの大半を書いていませんでした。

私はそれを指示しました。何を望むのかを説明し、返ってきたものをレビューし、間違っているときには反論し、機能するまで繰り返し改善しました。これこそが私が本当に伝えたいスキルです — Claudeをコード断片を作成する検索エンジンのように扱い続けるなら、まだ多くを取り逃しています。

私たちが一緒に作ったものと、実際の会話の流れは以下のとおりです。

What I Wanted

AIにマーケティングの手伝いを求めても、ロボットの委員会が書いたようなコピーが返ってくるのにはうんざりしていた。そういうのは「Unlock Your Potential Today!」のようなタイプだ。誰も買わない。

本当の問題は、マーケティングは1つのプロンプトで完結する仕事ではない。戦略を考える人、キーワードを考える人、実際のコピーを書く人、ソーシャルカレンダーを計画する人が必要だ。これらを1つのプロンプトにまとめると、特定の点以外は全て見落とされる単一視点の回答になる。

だから Claude に本当に欲しかったものを伝えた。私にチームを作ってくれと。

The Prompt That Started It

Claude に仕様書を渡したわけではない。ただ問題を説明しただけだ。

「複数の専門AIエージェントを順次実行するPython CLI が欲しい。各エージェントには特定のマーケティング役割 — CMO、SEO、コピーライター、ソーシャルメディア、メール、アナリスト — を持つ。各エージェントは前のエージェントの出力をコンテキストとして受け取り、ゼロから始めるのではなく互いの作業に基づいて作業するべき。Claude Opus 4.6 をストリーミングと適応思考で使用する。」

それだけだ。アーキテクチャ図もファイル構造もない。望んだ成果と1つの制約だけ: 連続したコンテキストの受け渡し。

返ってきたものは動作する基盤だった。完璧ではない。だが動作している。

Claudeが落ち着いたアーキテクチャ

main.py                 # CLI + orchestrator
agents/
  base.py               # MarketingAgent base class
  cmo.py                # Campaign strategy
  seo.py                # Keyword + content strategy
  copywriter.py         # Landing pages, ads, taglines
  social.py             # Content calendar, platform playbooks
  email_marketer.py     # Welcome sequences, nurture flows
  analyst.py            # KPI dashboard, A/B roadmap
tools/
  platform_tools.py     # HubSpot, Mailchimp, Buffer, Semrush hooks
campaigns/              # Saved campaign outputs

六名エージェント。各エージェントは専門家。実在のチームにいる実在の人のように名付けるのは、正直なところ、そうすることでシステムのプロンプトが良くなるからだ。

The Base Agent — This Is the Core

すべてのエージェントは1つのクラスから継承する。think() メソッドが全てのゲームだ:

class MarketingAgent:
    def __init__(self, name: str, role: str, system_prompt: str, emoji: str = "🤖"):
        self.name = name
        self.role = role
        self.system_prompt = system_prompt
        self.emoji = emoji

    def think(self, task: str, context: str = "", max_tokens: int = 4096) -> str:
        messages = [{"role": "user", "content": task}]
        if context:
            messages = [
                {
                    "role": "user",
                    "content": f"Context from previous team members:

{context}

---

Your task: {task}"
                }
            ]

        full_text = ""
        with client.messages.stream(
            model=" claude-opus-4-6",
            max_tokens=max_tokens,
            thinking={"type": "adaptive"},
            system=self.system_prompt,
            messages=messages,
        ) as stream:
            for text in stream.text_stream:
                print(text, end="", flush=True)
                full_text += text

        return full_text

シンプル。タスクを取り、前のエージェントからのコンテキストを前に付け、レスポンスをストリーミングする。コンテキストこそが“ばかげた”を防ぐ要素だ。

The Context Handoff — Why This Actually Works

ここがオーケストレーターのパイプラインだ。 Claude に対して反論した部分だ—初期のバージョンは全てを並行実行し、誰も話を合わせていなかったため出力が支離滅裂だった。

# CMO goes first — sets everything
self.outputs["01_cmo"] = self.agents["cmo"].think(cmo_task)

# SEO gets the CMO brief
self.outputs["02_seo"] = self.agents["seo"].think(
    seo_task, context=self.outputs["01_cmo"]
)

# Copywriter gets CMO + SEO both
self.outputs["03_copy"] = self.agents["copywriter"].think(
    copy_task,
    context=self.outputs["01_cmo"] + "

" + self.outputs["02_seo"]
)

# Social gets CMO + Copy
self.outputs["04_social"] = self.agents["social"].think(
    social_task,
    context=self.outputs["01_cmo"] + "

" + self.outputs["03_copy"]
)

# Email gets CMO + Copy
self.outputs["05_email"] = self.agents["email"].think(
    email_task,
    context=self.outputs["01_cmo"] + "

" + self.outputs["03_copy"]
)

# Analyst gets everything
self.outputs["06_analytics"] = self.agents["analyst"].think(
    analyst_task,
    context="

---

".join([
        self.outputs["01_cmo"],
        self.outputs["02_seo"],
        self.outputs["04_social"],
    ])
)

コピーライターがランディングページの見出しを書いたとき、それはすでにCMOが定義したポジショニング、SEOのキーワード、正確なペルソナを知っている。コピーは一般的ではない。ゼロから始めるのではなく、エージェントが事前に作成した完全な戦略ブリーフを起点としているからだ。

これが単一プロンプトのマーケティングAIにはできないことだ。チームがない。一人が六つの仕事を同時にこなそうとするだけで、それは露呈する。

What I Had to Correct

最初のパスで Claude が間違えた点はいくつかあって、それを私は指摘して修正した:

1. 並行実行。 最初のドラフトは全エージェントを同時に走らせた。効率的に見えたが、出力はめちゃくちゃ。コピーライターがSEO専門家の推奨を理解していなかった。Claude に順次実行にして理由を説明した。即座に修正。

2. ジェネリックなシステムプロンプト。 初期の版には「あなたはマーケティングの専門家です」みたいな曖昧な役割説明があった。具体性を求めた — 実際の成果物、期待される出力形式、現実の肩書きを持つ人物の視点から書かれていること、出力品質が顕著に向上。

3. クイックモードでのコンテキスト注入なし。 クイックキャンペーン(CMO + コピーライターのみ)はCMOのブリーフをコピーライターへ渡していなかった。テストで発見。1行の修正だが、これがシステムの要点だった。

これがAIを指示する実際の作業の姿だ。魔法のプロンプトエンジニアリングではない。出力を見直し、間違っている点を特定し、どう修正すべきかを具体的に指示することだ。

What It Produces

完全なキャンペーンを実行すると、六つの connected deliverables が得られる:

  • CMO output — ポジショニング、ペルソナ、チャネル構成、メッセージの柱、KPI
  • SEO output — キーワードクラスター、検索意図分析、トップ3ページのコンテンツブリーフ、技術チェックリスト
  • Copywriter output — ヒーローコピー、ランディングページ全体、3つのGoogle広告のバリエーション、3つのMeta広告のバリエーション、ブランドボイスガイド
  • Social output — LinkedIn、Instagram、X、TikTok 向けの4週間カレンダーと、その場で投稿可能なコンテンツ
  • Email output — ウェルカムシーケンス(5通)、セールスシーケンス(3通)、リエンゲージメントシーケンス、ニュースレターテンプレート
  • Analyst output — KPIダッシュボード、アトリビューションモデル、A/Bテストロードマップ、90日ベンチマーク

フルランの総出力は、実際に自己参照する連携マーケティングコンテンツとして8,000語から12,000語程度になる。ソーシャル投稿はCMOが定義した同じメッセージの柱を使用。メールの件名はコピーライターが展開したコピーの角度と一致。全体として一貫性がある。

How to Run It

git clone https://gitlab.com/JonathanMelton-FusionAL/ai-marketing-team
cd ai-marketing-team
pip install -r requirements.txt
cp .env.example .env
# Add your ANTHROPIC_API_KEY

# Full campaign — all 6 agents
python main.py campaign --product "B2B SaaS for HR teams" --save

# Quick mode — CMO + Copywriter only
python main.py campaign --product "your product" --mode quick

# Ask one agent directly
python main.py ask cmo "What channels should a bootstrapped SaaS focus on first?"
python main.py ask copy "Write 5 headline variations for a project management tool"
python main.py ask seo "Keywords for email automation software?"

--save フラグはすべてを campaigns/ にタイムスタンプ付きでダンプします。活用してください。後で出力を参照したくなるでしょう。

What I'd Do Differently

実データのキーワード。 現在は SEO エージェントがキーワード量を推定している。Semrush API キーを接続するフック(tools/platform_tools.py にある)を使えば、推奨が実際の検索データに基づくものになる。

反復ループ。 ええ、現状は直線的なパイプライン。私が望むのは、CMO がコピーライターの出力をレビューして、ポジショニングと一致しない場合には修正を指示することだ。トークン的には高コストだが、実際のチームの動きに近い。

MCP サーバーバージョン。 次に作るのはこれ。全体を MCP サーバとして包み、Claude Desktop のツールとして動く。CLI は不要で、「Xのキャンペーンを実行する」という指示だけで作業が完了する。FusionAL が向かっているのは、すべてのAIツールを一箇所に集約し、設定の手間をゼロにする世界だ。

注: Opus 4.6 with adaptive thinking はトークンを早く消費する。6エージェントの完全なキャンペーンは製品説明の長さ次第で約 $1-3 かかる。予算を見積るか、またはエージェント base.py の claude-opus-4-6 を claude-sonnet-4-6 に置換して安価な実行を選ぶとよい。

The Bigger Point

私は独学の開発者だ。CSの学位もチームもない。私はこれを一人で作り、Claude にコードの“重い部分”を任せ、私が十分に理解してレビュー・修正できるレベルのコードを自分で書かなくてもよくした。

これが今のスキルだ。すべての構文を知っていることではない。速く打てることでもない。何を求めるかを知り、それを満たしていないときに気づく力と、軌道修正の方法を知っていることだ。

それを“ずるい”と感じて諦めるなら、それは違う。2026年の優れたビルダーの働き方だ。

Repo: gitlab.com/JonathanMelton-FusionAL/ai-marketing-team

もし実行して何が出力されたか教えてくれたら、X で私をタグしてください — @2EfinAwesome

私は FusionAL — チームがAIツールを設定するためにプラットフォームエンジニアを雇う必要のない統合MCPゲートウェイを構築しています。開発の進捗は X でフォローしてください — X.