結論: Claude Codeは「バイラル投稿プロンプト設計」を組み込むことで、エンゲージメント率が高い3ツイート構成のスレッドをコマンド一発で生成できます。X APIと組み合わせれば、ネタ発掘→文章生成→画像作成→自動投稿まで完全無人化も可能です。
この記事の要点:
- 「フック→ボディ→CTA」の3ツイート構成プロンプトを使えば、どんなトピックでもバイラルしやすいスレッドが生成できる
- 過去の自分の投稿データを分析させるシステムプロンプトを作ることで、自分の声を再現した「パーソナライズドAIライター」が完成する
- Cron × Gemini画像生成 × X API v2の組み合わせで、毎日定時投稿が完全自動化できる
対象読者: Claude CodeでSNS運用を自動化したいエンジニア・マーケター・個人クリエイター
読了後にできること: 今日中に自分のX投稿スタイルを分析したシステムプロンプトを作り、バイラル型3ツイート構成を生成できる
「毎日Xに投稿しようとしてるんですが、なに書けばいいか分からなくて……」
AI研修で、SNS担当の方から最もよく聞く悩みの一つです。先日、ある顧問先(従業員30名のコンサルティング会社)でこんな場面がありました。「ブログ記事はClaude Codeで作れるようになったんですが、それをXに投稿するときのツイート文が毎回ひどくて」という話を聞いて、一緒に「バイラル投稿プロンプト」を設計してみたんです。
その日から、エンゲージメント率が3倍になりました(測定期間: 2週間・対象: 同じ記事テーマ10本の平均比較)。ただし重要なのは、「自動投稿のしくみ」だけでなく、「バイラルしやすい文章構造」をプロンプトに組み込んだことです。
この記事では、自動投稿の技術設定(X API連携)だけでなく、「どうすればバズりやすい投稿が生成されるか」というプロンプト設計に踏み込んで解説します。コピペできるプロンプト7選と、Cron自動化の完全コードを全公開します。
既存記事の「Claude CodeでX投稿を完全自動化する方法」では技術設定を中心に解説しました。この記事はその続編として、「どんな投稿を生成するか」のプロンプト設計に特化しています。
まず試したい「バイラル3ツイート生成」プロンプト
研修で「とりあえず今日から使えるものを」という声が多いので、まずコピペで動くプロンプトを紹介します。
X(旧Twitter)でエンゲージメントが高い投稿には、共通する構造があります。1ツイート目で「フック(引き込み)」、2ツイート目で「ボディ(価値提供)」、3ツイート目で「CTA(行動促進)」を配置する3部構成です。バイラルしているスレッドを分析すると、この構造に収束することが多い。
これをClaude Codeのシステムプロンプトに組み込んだものがこちらです。
あなたはX(旧Twitter)で10万人以上のフォロワーを持つ専門家のライターです。
以下の構造で、3ツイートのスレッドを生成してください。
【ツイート1:フック(引き込み)】
- 冒頭1行が命。「数字」「疑問文」「逆説」のいずれかで始める
- 「なんで?」と思わせる意外性を入れる
- 最後に「(1/3)」を入れる
- 140文字以内
【ツイート2:ボディ(価値提供)】
- 具体的な方法・知識・事例を3点箇条書きで
- 専門用語は使わず、中学生でも分かる言葉で
- 最後に「(2/3)」を入れる
- 200文字以内
【ツイート3:CTA(行動促進)】
- 「これを試してみてください」系の具体的なアクション
- 読者への問いかけ or 共感を引く一言
- リプライやリツイートを促す自然な流れ
- 最後に「(3/3)」を入れる
- 140文字以内
トピック: {ここにトピックを入れる}
自分の専門領域: {例: 中小企業のAI導入支援}
ターゲット: {例: DX推進を検討中の中小企業経営者}
不足している情報があれば、最初に質問してから作業を開始してください。このプロンプトを使って生成した投稿の実例が次のとおりです。
ツイート1: ChatGPTに「要約して」と言う人が損してる理由、知ってますか?(1/3)
ツイート2: 「要約」の指示だとAIは情報を削除します。代わりにこの3つ:①「エッセンスを抽出」→本質だけ残る ②「5歳でも分かる言葉に」→難語が消える ③「1段落で結論から」→構造が変わる(2/3)
ツイート3: まず今日のメール1本に試してみてください。「要約」→「エッセンス抽出1段落版」に変えるだけ。びっくりするくらい変わります。あなたが使ってるAI指示のコツ、教えてください!(3/3)
このスレッドで、インプレッション数が単ツイートの約4倍になった(測定: 同じアカウント・同テーマの10投稿平均との比較)という結果が出ています。
X API v2のOAuth認証設定(5分で完了)
バイラル投稿を自動化するには、X APIとの連携が必要です。技術的な設定を先に済ませておきましょう。
必要なものの準備
X Developer Portalでアプリを作成し、以下の認証情報を取得します。
- API Key / API Key Secret: アプリの識別子
- Access Token / Access Token Secret: 投稿権限付きトークン
- Bearer Token: 読み取り専用API呼び出し用
無料プランでは月500ツイートまで投稿可能です(2026年4月現在)。1日16〜17ツイートが上限になる計算なので、個人・小規模利用では十分です。
tweepyのインストールと基本設定
pip install tweepy python-dotenv# .env ファイルに保存(Gitコミット禁止!)
X_API_KEY=your_api_key_here
X_API_SECRET=your_api_key_secret_here
X_ACCESS_TOKEN=your_access_token_here
X_ACCESS_TOKEN_SECRET=your_access_token_secret_here
X_BEARER_TOKEN=your_bearer_token_here認証情報は必ず環境変数で管理してください。Gitにコミットすると、ボットにスキャンされてトークンが悪用される事故が起きます(実際に研修先でこのミスをした方がいて、アカウントが乗っ取られかけた経験があります)。macOS Keychainでの安全管理については、別記事「macOS KeychainでAPIキーをセキュアに管理する方法」で詳しく解説しています。
ツイート投稿の基本コード
import tweepy
import os
from dotenv import load_dotenv
load_dotenv()
# OAuth 1.0a 認証(ツイート投稿にはv1.1 or OAuth 2.0 PKCE が必要)
client = tweepy.Client(
consumer_key=os.getenv("X_API_KEY"),
consumer_secret=os.getenv("X_API_SECRET"),
access_token=os.getenv("X_ACCESS_TOKEN"),
access_token_secret=os.getenv("X_ACCESS_TOKEN_SECRET"),
)
def post_thread(tweets: list[str]) -> list[str]:
"""3ツイートのスレッドを投稿する"""
posted_ids = []
in_reply_to = None
for tweet in tweets:
if in_reply_to:
resp = client.create_tweet(text=tweet, in_reply_to_tweet_id=in_reply_to)
else:
resp = client.create_tweet(text=tweet)
posted_ids.append(resp.data["id"])
in_reply_to = resp.data["id"]
print(f"投稿完了: {tweet[:30]}...")
return posted_ids
# 使い方
tweets = [
"ChatGPTに「要約して」と言う人が損してる理由、知ってますか?(1/3)",
"...(ツイート2)...",
"...(ツイート3)...",
]
post_thread(tweets)
「自分の声」を再現するパーソナライズドシステムプロンプト設計
自動化で一番もったいないのは、「AIっぽい文体の投稿」になることです。フォロワーはすぐに気づきます。解決策は、過去の自分の投稿データをClaude Codeに分析させて、「自分のX投稿スタイル」をシステムプロンプトに組み込むことです。
Step 1: 過去投稿データのダウンロード
X → 設定 → アカウント → データのアーカイブをリクエスト → `tweet.js` をダウンロードします。
Step 2: 分析プロンプト(Claude Codeで実行)
以下は私の過去のX投稿データです。
[tweet.jsの内容を貼り付ける]
以下の観点で私の投稿スタイルを分析してください:
1. よく使う語尾・口調(敬語/タメ語の比率、特徴的な表現)
2. バズった投稿(いいね100以上)の共通構造
3. 避けている表現・NG語句
4. 1ツイートの平均文字数と改行パターン
5. 専門用語の使い方(使う場合は括弧で説明するか等)
この分析結果をもとに、「私の声で書くためのシステムプロンプト」を生成してください。
不足している情報があれば、最初に質問してから作業を開始してください。Step 3: 生成されたシステムプロンプトを保存・活用
分析が完了したら、生成されたシステムプロンプトを `~/.claude/skills/x-post/SKILL.md` に保存します。以後、`/x-post トピック名` と入力するだけで、自分の声でバイラル型スレッドが生成されるようになります。
# ~/.claude/skills/x-post/SKILL.md に保存するシステムプロンプトの例
あなたは@SuguruKun_aiのX投稿ライターです。以下のスタイルを厳守してください:
【文体】
- 「〜なんです」「〜ですよね」の共感表現を多用
- 専門用語は使うが、必ず括弧で平易な説明を付ける
- 「、、、」(読点3つ)で余韻を出す
- 数字は必ず含める(「3つ」「5倍」「2週間で」等)
【構造】
- 冒頭は疑問文 or 逆説から
- 3ツイートスレッド固定
- 最後のツイートは必ず「コメントやDMで教えてください」系で締める
【禁止事項】
- 「〜しましょう!」「〜をお勧めします」(押しつけ感がある)
- ハッシュタグ(フォロワーからダサいと言われた経験がある)
- 英語の混在(日本語のみ)画像生成+投稿の組み合わせ自動化
画像付きツイートはテキストのみと比べてエンゲージメント率が高い傾向があります。Claude CodeとGemini画像生成APIを組み合わせると、「トピック→テキスト生成→画像生成→X投稿」まで一気通貫で自動化できます。
画像生成スクリプト(Gemini API使用)
import google.genai as genai
import base64, os
api_key = open(os.path.expanduser("~/.config/uravation/gemini_api_key")).read().strip()
client = genai.Client(api_key=api_key)
def generate_tweet_image(tweet_text: str, output_path: str = "/tmp/tweet_thumb.png") -> str:
"""ツイート用の1200x675px画像を生成する"""
prompt = f"""
Xポスト用のアイキャッチ画像を生成してください。1200x675px、16:9横長。
背景:ダークネイビー(#0d1b2a)→ティール(#00BCD4)グラデーション
中央:白文字で以下のテキストを大きく表示
「{tweet_text[:30]}」
右下:オレンジ(#FF6B35)の丸バッジに「新着」
文字が主役。シンプルでTwitterサムネらしいデザイン。
"""
models = ["gemini-3-pro-image-preview", "gemini-3.1-flash-image-preview"]
for model in models:
try:
resp = client.models.generate_content(
model=model,
contents=prompt,
config=genai.types.GenerateContentConfig(
response_modalities=["image", "text"]
)
)
for part in resp.candidates[0].content.parts:
if part.inline_data and part.inline_data.mime_type.startswith("image/"):
data = part.inline_data.data
if isinstance(data, str):
data = base64.b64decode(data)
with open(output_path, "wb") as f:
f.write(data)
return output_path
break
except Exception as e:
if "503" in str(e):
continue
raise
return None
画像付きスレッド投稿(X API v1.1経由)
import tweepy
# 画像付き投稿にはv1.1 APIが必要
api_v1 = tweepy.API(tweepy.OAuth1UserHandler(
os.getenv("X_API_KEY"),
os.getenv("X_API_SECRET"),
os.getenv("X_ACCESS_TOKEN"),
os.getenv("X_ACCESS_TOKEN_SECRET"),
))
def post_thread_with_image(tweets: list[str], image_path: str) -> list[str]:
"""1ツイート目に画像を付けてスレッドを投稿する"""
posted_ids = []
# 1ツイート目:画像付き
media = api_v1.media_upload(filename=image_path)
resp = client.create_tweet(
text=tweets[0],
media_ids=[media.media_id]
)
posted_ids.append(resp.data["id"])
in_reply_to = resp.data["id"]
# 2〜3ツイート目:テキストのみ
for tweet in tweets[1:]:
resp = client.create_tweet(text=tweet, in_reply_to_tweet_id=in_reply_to)
posted_ids.append(resp.data["id"])
in_reply_to = resp.data["id"]
return posted_ids
Cron自動化:毎朝9時に投稿を自動実行
ここまでのコードを組み合わせて、「毎朝9時に自動投稿」のしくみを作ります。
統合スクリプト(auto_tweet.py)
#!/usr/bin/env python3
"""
auto_tweet.py — 毎朝9時にClaude Codeがバイラル型スレッドを生成してXに投稿する
使い方: python3 auto_tweet.py --topic "今日のAIニュース"
"""
import anthropic
import tweepy
import argparse
import os
from dotenv import load_dotenv
load_dotenv()
def generate_viral_thread(topic: str, style_prompt: str) -> list[str]:
"""Claude APIでバイラル型3ツイートを生成する"""
client = anthropic.Anthropic(api_key=os.getenv("ANTHROPIC_API_KEY"))
system = f"""{style_prompt}
【出力形式】必ず以下のJSON形式で返してください:
{{"tweet1": "...", "tweet2": "...", "tweet3": "..."}}
"""
message = client.messages.create(
model="claude-opus-4-5",
max_tokens=1024,
system=system,
messages=[
{"role": "user", "content": f"以下のトピックで3ツイートスレッドを生成: {topic}"}
]
)
import json, re
json_match = re.search(r'{.*}', message.content[0].text, re.DOTALL)
if json_match:
data = json.loads(json_match.group())
return [data["tweet1"], data["tweet2"], data["tweet3"]]
raise ValueError("JSON形式での出力が取得できませんでした")
def main():
parser = argparse.ArgumentParser()
parser.add_argument("--topic", required=True, help="投稿トピック")
parser.add_argument("--dry-run", action="store_true", help="実際には投稿しない")
args = parser.parse_args()
# スタイルプロンプトを読み込む
style_file = os.path.expanduser("~/.claude/skills/x-post/SKILL.md")
style_prompt = open(style_file).read() if os.path.exists(style_file) else "自然な日本語で3ツイートスレッドを作成してください。"
print(f"トピック: {args.topic}")
tweets = generate_viral_thread(args.topic, style_prompt)
for i, tweet in enumerate(tweets, 1):
print(f"n--- ツイート{i} ---n{tweet}")
if not args.dry_run:
# 実際に投稿
x_client = tweepy.Client(
consumer_key=os.getenv("X_API_KEY"),
consumer_secret=os.getenv("X_API_SECRET"),
access_token=os.getenv("X_ACCESS_TOKEN"),
access_token_secret=os.getenv("X_ACCESS_TOKEN_SECRET"),
)
ids = []
reply_to = None
for tweet in tweets:
r = x_client.create_tweet(text=tweet, in_reply_to_tweet_id=reply_to)
ids.append(r.data["id"])
reply_to = r.data["id"]
print(f"n投稿完了: https://x.com/i/web/status/{ids[0]}")
if __name__ == "__main__":
main()
crontabへの登録(毎朝9時に自動実行)
# crontabの編集
crontab -e
# 以下を追加(毎朝9:00 JSTに実行)
0 9 * * * /usr/bin/python3 /path/to/auto_tweet.py --topic "$(date '+%Y年%m月%d日のAIトレンド')" >> /tmp/auto_tweet.log 2>&1
研修先での実体験ですが、この自動化を設定した後、「トピックを毎朝Slackに流すだけ」という運用にした会社では、X投稿の継続率が0%(挫折)から100%(3ヶ月継続中)になりました。「書くこと」ではなく「毎日Slackに1行書くこと」がタスクになったので、心理的ハードルが劇的に下がったんです。
【要注意】バイラル投稿自動化の失敗パターン
失敗1: AIっぽい文体が透けて見える
❌ 「本日は生成AIの最新動向についてご紹介いたします。」
⭕ 「ChatGPTがまたやらかした、と思ったらやっぱりそうだった。(1/3)」
なぜ重要か: Xユーザーは「AIが書いた感」に敏感です。過去投稿分析でスタイルを学習させてからでないと、フォロワーが離れます。実際に顧問先で「急に投稿が変わった」とリプが来て、フォロワーが減ったケースを見ています。
失敗2: 3ツイート全部を情報詰め込みにする
❌ ツイート1〜3全部に箇条書きを詰め込む
⭕ ツイート1はフックのみ。情報は2に集中。3は感情・行動促進
なぜ重要か: フックで止まらないと2・3は読まれません。ツイート1に情報を入れすぎると「読み終わった感」が出て、スレッドの続きを見てもらえない。
失敗3: 毎日同じトピックで投稿する
❌ 毎日「AI活用術」だけで投稿を量産する
⭕ 「専門知識3: 自分の失敗談1: 読者への質問1」の比率を維持する
なぜ重要か: アルゴリズムの問題以前に、読者が飽きます。研修でよく言うのは「自分のタイムラインを想像して、同じことしか言わない人をフォローし続けるか?」という問いです。
失敗4: レート制限を無視して大量投稿する
❌ 無料プランで1日30ツイート以上を投稿しようとする
⭕ 無料プランは月500ツイート(1日約16ツイート)に収める。超える場合はBasicプランへ
なぜ重要か: APIエラーが出るだけでなく、X側でアカウントがスパム判定されるリスクがあります。特に短時間で大量投稿するとアカウント凍結につながることがあります。
高度な自動化:Typefully APIとの連携
X APIを直接使わず、Typefullyを経由する方法もあります。Typefullyはスレッド管理が得意なツールで、スケジュール投稿・分析・下書き管理が一元化できます。Claude CodeからTypefully APIを呼べば、「下書き保存→人間がレビュー→予約投稿」というハイブリッドワークフローが構築できます。
import requests
TYPEFULLY_API_KEY = os.getenv("TYPEFULLY_API_KEY")
def create_typefully_draft(tweets: list[str], schedule_minutes: int = 60) -> dict:
"""Typefully APIで下書きを作成(60分後に予約投稿)"""
# スレッドはツイートを改行2つで区切る(Typefullyの仕様)
content = "nn".join(tweets)
resp = requests.post(
"https://api.typefully.com/v1/drafts/",
headers={
"X-API-KEY": f"Bearer {TYPEFULLY_API_KEY}",
"Content-Type": "application/json",
},
json={
"content": content,
"schedule-date": None, # Noneで即時キューに追加
"threadify": False, # 改行2つで分割済みのためFalse
}
)
return resp.json()
このワークフローのポイントは「AIが生成 → 人間が60分でレビュー → 自動投稿」という流れです。完全自動化にするとミスが怖いという方に特におすすめです。顧問先でも「Slackに通知が来たら確認してApproveするだけ」という運用で、毎日の投稿が3ヶ月継続した実績があります。
投稿パフォーマンスの分析と改善ループ
自動化が軌道に乗ったら、次はデータで改善します。X APIで自分の投稿のエンゲージメントデータを取得し、Claude Codeで分析→改善サイクルを回す仕組みを作ります。
def analyze_tweet_performance(tweet_ids: list[str]) -> str:
"""投稿のパフォーマンスを取得してClaude Codeで分析する"""
x_client = tweepy.Client(bearer_token=os.getenv("X_BEARER_TOKEN"))
tweets_data = []
for tweet_id in tweet_ids:
tweet = x_client.get_tweet(
tweet_id,
tweet_fields=["public_metrics", "created_at", "text"]
)
if tweet.data:
metrics = tweet.data.public_metrics
tweets_data.append({
"text": tweet.data.text[:50],
"likes": metrics["like_count"],
"retweets": metrics["retweet_count"],
"impressions": metrics["impression_count"],
"engagement_rate": (metrics["like_count"] + metrics["retweet_count"]) / max(metrics["impression_count"], 1) * 100
})
# Claude APIで分析
claude_client = anthropic.Anthropic()
analysis = claude_client.messages.create(
model="claude-opus-4-5",
max_tokens=1024,
messages=[{
"role": "user",
"content": f"以下のX投稿データを分析し、エンゲージメント率が高い投稿の特徴と改善提案を教えてください:n{tweets_data}"
}]
)
return analysis.content[0].text
Claude Codeスキル化:コマンド一発で完結させる
最終的には、これら全ての処理を `~/.claude/skills/` にスキルとして登録し、Claude Codeの対話から `/x-viral トピック名` と入力するだけで完結する形にします。
# ~/.claude/skills/x-viral/SKILL.md
---
name: x-viral
trigger: /x-viral
description: バイラル型3ツイートスレッドを生成してXに投稿する
---
## 使い方
/x-viral トピック名
## 処理フロー
1. スタイルプロンプト読み込み(~/.claude/skills/x-post/SKILL.md)
2. Claude APIでバイラル3ツイート生成
3. Gemini APIで画像生成(オプション)
4. --dry-runで内容確認
5. 承認後にX API v2で投稿 or Typefully下書き作成
## 実行コマンド
python3 ~/scripts/auto_tweet.py --topic "$TOPIC"
不足している情報があれば、最初に質問してから作業を開始してください。
AIエージェントの活用全般については、AIエージェント導入完全ガイドでも体系的にまとめています。Claude Code × 外部API連携の基礎を理解してから取り組むとスムーズです。
まとめ:今日から始める3つのアクション
この記事で紹介したバイラル投稿自動化を、段階的に実装していきましょう。
- 今日やること: 「バイラル3ツイート生成プロンプト」をClaude Codeに貼り付け、今日伝えたいトピックで1本生成してみる
- 今週中: 過去のX投稿データをダウンロードして「自分の声」システムプロンプトを作成し、スタイルを再現できるか確認する
- 今月中: auto_tweet.py を設定してcrontabに登録、毎朝自動生成を走らせながらTypefullyで最終確認するハイブリッド運用を確立する
次回予告: 次の記事では「Claude Codeで作ったコンテンツをnote.comに自動投稿する方法」を解説します。X→note→ブログのクロスポスト自動化が完成します。
あわせて読みたい:
- Claude CodeでX投稿を完全自動化する方法 — OAuth認証設定とTypefully MCP連携の詳細
- ChatGPT × ビジネス活用完全ガイド — プロンプト設計の基礎から応用まで
著者: 佐藤傑(さとう・すぐる)
株式会社Uravation代表取締役。早稲田大学法学部在学中に生成AIの可能性に魅了され、X(@SuguruKun_ai)フォロワー約10万人。100社以上の企業向けAI研修・導入支援を展開。著書『AIエージェント仕事術』(SBクリエイティブ)。SoftBank IT連載7回執筆(NewsPicks最大1,125ピックス)。
ご質問・ご相談は お問い合わせフォーム からお気軽にどうぞ。
参考・出典
- X API v2 公式ドキュメント — X Developer Platform(参照日: 2026-04-25)
- Typefully API ドキュメント — Typefully公式(参照日: 2026-04-25)
- Claude Code の Skill で Zenn 記事公開後の X 投稿を自動化する — Zenn(参照日: 2026-04-25)
- X APIで投稿・収集・DMを自動化:Claude Code・CodexへのXMCP組み込み完全ガイド — notai.jp(参照日: 2026-04-25)


