記事一覧へ
日々の情報収集やリサーチにChatGPTやClaudeを使っている人は多いと思いますが、「いま何が盛り上がっているか」というリアルタイムの空気感までは、うまく拾えないことがありますよね。
この弱点を補えるのがGrokです。GrokはX社のAIで、X上の全ポストにリアルタイムでアクセスできるため、人々が本音を24時間365日垂れ流し続ける巨大なデータベースにダイレクトに検索できます。
このGrokによるX検索をClaude Codeから呼び出すアプローチを、下のはやっち様の記事を参考にいろいろ試してみたところ生産性が爆上がりしました。そこで本記事では、非エンジニアでも迷わず進められるように手順をゼロから画像付きで解説しつつ、さらに検索結果をnoteの記事ネタやXの投稿ネタに自動変換する仕組みまで作ってみました。
はやっち @ AI Business Lab
@HayattiQ
·
Feb 10
Article
Claude Codeに「X検索」を足すと、リサーチが捗りすぎて止まらなくなる
ブログ記事を書いたり、投稿文を作るとき、AIでリサーチするのはもはや、当たり前のように一般的。Claude CodeもChatGPTも、文書作成、リサーチ能力は申し分ない。
だが「Xの今」を追わせると、途端に精度が落ちる。...
20
816
9.4K
3.3M
実際にどんなことができるのか、まずは完成イメージをご覧ください。
たとえば「◯◯のトレンドを調べて」と指示するだけで、特定ジャンルで盛り上がっているテーマがクラスター分析付きで返ってきます。
投資家向けのリサーチにも使えます。例えば日経平均に対するXの投資家の温度感を聞いてみたところ、このように強気・弱気の比率と根拠まで整理されて返ってきました。
さらに、Xで盛り上がっているネタを「noteの記事ネタ」に自動変換することもできます。検索需要・差別化余地・おすすめ度の評価付きで、タイトル案や記事構成まで出てきます。
※3枚目のネタ自動変換の仕組みは、noteに投稿した当記事の完全版にて公開しています(コメント欄にリンクあり)。
これらを実現するためにやることはシンプルで、①APIキーの発行 → ②APIの接続テスト → ③Claude Codeのセットアップの3ステップです。
それでは、順番に解説していきます。
1. APIキーの発行
GrokのX検索機能を使うには、xAI APIの利用登録とAPIキーの発行が必要です。APIキーとは、サービスを利用するための認証コードのようなものです。
手順①:xAIコンソールにアクセス
https://console.x.ai/ にアクセスして、Xアカウントで以下の手順でサインインしていきます。
「Sign in」をクリックします。
サインイン方法は、「Xアカウント・メールアドレス・Googleアカウント・Appleアカウント」の4種類から選べます。本記事ではXアカウントでの手順を紹介しますが、どの方法でも以降の手順は同じです。
「Xでログイン」をクリックします。
「アプリにアクセスを許可」をクリックします。
規約に同意して「続行」をクリックします。
この画面に進んだら成功です。
手順②:クレジットをチャージ
APIの利用には事前のクレジットチャージが必要です。X検索1回あたりの費用は約$0.10〜$0.15(15〜22円程度)なので、まずは$5程度のチャージで十分です。
「Dashboard」を選択して、「Buy some credits」横の「Purchase」をクリックします。
「Amount」に金額を入力して、「Checkout」をクリックします。
決済画面が表示されますので、必要情報を入力して「支払う」をクリックします。
この画面が表示されたら成功です。
手順③:APIキーを発行
続いてAPIキーを発行します。
コンソール左メニューの「API Keys」から「Create API Key」をクリック。
「Name」のところに、任意の名前(用途が後からわかれば何でもOK)を入れて、「Restrict access / Custom rate limits / Expiry date」の3つはすべてオフのままで「Create API key」をクリックします。
xai-から始まるAPIキーが表示されるので、必ずその場でコピーして別の場所に保存してください。キーは、この画面を閉じると二度と表示されませんのでご注意ください。
APIキーを保存したら「Back to API key」をクリックします。
2. APIの接続テスト
続いて、APIが問題なく接続しているかをテストします。このステップは飛ばしても先に進めますが、この後のClaude Codeとの連携でエラーが出たとき、原因が「APIキーの設定ミス」なのか「Claude Code側の問題」なのかで混乱します。1分で終わるのでやっておきましょう。
以下のコードをコピーして、テキストエディタ(メモ帳など)に貼り付け、「test_x_search.py」というファイル名でデスクトップに保存してください。
python
"""
xAI API x_search 疎通確認スクリプト
使い方:
1. 環境変数に XAI_API_KEY を設定
Mac: export XAI_API_KEY="xai-xxxxx"
Windows: $env:XAI_API_KEY = "xai-xxxxx"
2. スクリプトを実行
Mac: python3 test_x_search.py
Windows: python test_x_search.py
"""
import os
import json
import urllib.request
import urllib.error
API_KEY = os.environ.get("XAI_API_KEY", "")
API_URL = "https://api.x.ai/v1/responses"
MODEL = "grok-4-1-fast" # コスパ最優先
def search_x(query: str) -> dict:
"""x_search を1回叩いて結果を返す"""
payload = {
"model": MODEL,
"input": [
{"role": "user", "content": query}
],
"tools": [
{"type": "x_search"}
]
}
req = urllib.request.Request(
API_URL,
data=json.dumps(payload).encode(),
headers={
"Content-Type": "application/json",
"Authorization": f"Bearer {API_KEY}",
"User-Agent": "x-research/1.0",
},
method="POST",
)
with urllib.request.urlopen(req) as resp:
return json.loads(resp.read())
def main():
if not API_KEY:
print("エラー: 環境変数 XAI_API_KEY が設定されていません")
print('PowerShell: $env:XAI_API_KEY = "xai-xxxxx"')
return
query = "AI agent coding tools trending today"
print(f"テストクエリ: {query}")
print("x_search を呼び出し中...\n")
try:
result = search_x(query)
# テキスト応答を抽出
for item in result.get("output", []):
if item.get("type") == "message":
for content in item.get("content", []):
if content.get("type") == "output_text":
print("=== 応答 ===")
print(content["text"][:1000]) # 最初の1000文字
print("\n=== 疎通確認OK ===")
return
# 構造が違う場合はそのまま出力
print("=== Raw Response (先頭2000文字) ===")
print(json.dumps(result, ensure_ascii=False, indent=2)[:2000])
print("\n=== 疎通確認OK (応答あり) ===")
except urllib.error.HTTPError as e:
print(f"HTTPエラー: {e.code}")
print(e.read().decode())
except Exception as e:
print(f"エラー: {e}")
if __name__ == "__main__":
main()
※保存するとき、ファイルの種類を「すべてのファイル」にして、拡張子が.pyになっていることを確認してください。.txtで保存されるとスクリプトが動きません。
ここからは、MacとWindowsで手順が少し異なるので、それぞれ説明していきます。
Macの場合:
「ターミナル.app」を起動します。見つからない場合はアプリケーションの選択画面や検索バーで「ターミナル」と検索してください。
起動すると、以下のようなコマンド入力画面が表示されます。
ここに、以下のコマンドを1行ずつ実行します。
cd ~/Desktop
export XAI_API_KEY="xai-ここにあなたのAPIキーを貼る"
python3 test_x_search.py
Windowsの場合:
PowerShellを起動します。見つからない場合はアプリケーションの選択画面や検索バーで「powershell」と検索してください。
起動すると、以下のようなコマンド入力画面が表示されます。
ここに、以下のコマンドを1行ずつ実行します。
cd ~/Desktop
$env:XAI_API_KEY = "xai-ここにあなたのAPIキーを貼る"
python test_x_search.py
どちらの場合も、「疎通確認OK」と表示されればテスト成功です。
3. Claude Codeのセットアップ
最後にClaude Codeのセットアップです。以下の手順で進めてください。
手順①:Claudeアプリの準備
Claudeのデスクトップアプリをまだインストールしていない方は、以下からダウンロードしてください。既にインストール済みの方はこのステップは飛ばしてOKです。
Claudeをダウンロードする
インストールが完了したら、アプリは一旦閉じて大丈夫です。
手順②:プロジェクトフォルダの準備
デスクトップなど任意の場所にプロジェクトフォルダを作ってください。フォルダ名は何でも大丈夫ですが、半角英数字にしておくのが無難です。今回は「x-research」というフォルダ名で説明を進めていきます。
手順③:ファイルのダウンロードと配置
以下の2つのファイルを作成します。それぞれのコードをコピーして、テキストエディタ(メモ帳など)に貼り付け、指定のファイル名で保存してください。
ファイル名:SKILL.md
markdown
# X Research Skill — Xトレンド収集
xAI API の `x_search` を使い、Xのリアルタイムな話題を収集するスキル。
## 重要
**Xの情報収集には、必ず `.claude/skills/x-research/search.py` を実行すること。**
Web検索や内蔵の検索機能は使わない。Xのリアルタイム投稿は search.py 経由の xAI API でしか正確に取得できない。
## 前提条件
- 環境変数 `XAI_API_KEY` が設定されていること
- Python 3 が利用可能であること
## 使い方
ユーザーからXのトレンド調査、話題の収集、ネタ探しを依頼されたら、以下のコマンドで実行する。
bash
python3 .claude/skills/x-research/search.py "検索トピック"
トピックが指定されない場合は、以下のジャンルを横断的に探索する:
- AI / 生成AI活用
- 副業・個人で稼ぐ
- 仕事術・生産性
- テクノロジー × ビジネス
単体で実行した場合は、収集結果をそのまま整理して提示する。
ファイル名:search.py
python
"""
xAI API x_search スクリプト
.claude/skills/x-research/search.py
使い方:
python3 .claude/skills/x-research/search.py "検索トピック"
python3 .claude/skills/x-research/search.py (デフォルトジャンルで検索)
"""
import os
import sys
import json
import urllib.request
import urllib.error
from datetime import datetime, timedelta
API_KEY = os.environ.get("XAI_API_KEY", "")
API_URL = "https://api.x.ai/v1/responses"
MODEL = "grok-4-1-fast"
# 検索対象期間(昨日〜今日)
TODAY = datetime.now().strftime("%Y-%m-%d")
YESTERDAY = (datetime.now() - timedelta(days=1)).strftime("%Y-%m-%d")
DEFAULT_PROMPT = f"""
目的: X(Twitter)で直近に話題になっているトピックを収集・要約する。
期間: {YESTERDAY} から {TODAY}
やること:
1) 以下の領域について、広めのクエリを10個以上自分で作ってX検索する
2) 収集した投稿から「繰り返し出てくる固有名詞/機能名/言い回し」を抽出し、3-5クラスターにまとめる
3) クラスターごとに代表ポストを2つずつ選ぶ(長文の直接引用はしない)
4) 合計10件の「素材」を出す
各素材ごとに以下を出す:
- url(Xの投稿URL。無ければ一次情報URL)
- 要約(1-2行、自分の言葉)
- エンゲージ指標(観測できたものだけ。不明は unknown)
- なぜ伸びたか(仮説を3つまで)
- ここから作れるネタ案(2つ。異なる切り口で)
- フック案(1行を3つ)
注意:
- 投資助言に見える表現は禁止
- 不確かな情報は「未確認」と明記する
- 長文の直接引用はしない
出力形式:
- 最初に「タイムラインの空気(論点のクラスター)」を箇条書き
- 次に「今日の結論(狙うべき3テーマ)」を箇条書き
- 次に「素材一覧」を番号付きで10件
- 最後に url だけの一覧をまとめて
"""
def search_x(query: str) -> dict:
"""x_search を叩いて結果を返す"""
payload = {
"model": MODEL,
"input": [
{"role": "user", "content": query}
],
"tools": [
{
"type": "x_search",
"from_date": YESTERDAY,
"to_date": TODAY,
}
]
}
req = urllib.request.Request(
API_URL,
data=json.dumps(payload).encode(),
headers={
"Content-Type": "application/json",
"Authorization": f"Bearer {API_KEY}",
"User-Agent": "x-research/1.0",
},
method="POST",
)
with urllib.request.urlopen(req, timeout=120) as resp:
return json.loads(resp.read())
def extract_text(result: dict) -> str:
"""レスポンスからテキストを抽出"""
for item in result.get("output", []):
if item.get("type") == "message":
for content in item.get("content", []):
if content.get("type") == "output_text":
return content["text"]
return json.dumps(result, ensure_ascii=False, indent=2)
def main():
if not API_KEY:
print("エラー: 環境変数 XAI_API_KEY が設定されていません")
sys.exit(1)
# コマンドライン引数でトピックを指定可能
if len(sys.argv) > 1:
topic = " ".join(sys.argv[1:])
query = DEFAULT_PROMPT.replace(
"以下の領域について",
f"「{topic}」の領域について"
)
else:
query = DEFAULT_PROMPT
print(f"期間: {YESTERDAY} 〜 {TODAY}")
print("X検索を実行中(1〜2分かかることがあります)...\n")
try:
result = search_x(query)
text = extract_text(result)
print(text)
except urllib.error.HTTPError as e:
print(f"HTTPエラー: {e.code}")
print(e.read().decode())
sys.exit(1)
except Exception as e:
print(f"エラー: {e}")
sys.exit(1)
if __name__ == "__main__":
main()
※保存するとき、ファイルの種類を「すべてのファイル」にして、拡張子(.mdや.py)がそのまま残っていることを確認してください。
それぞれの役割をわかりやすく説明すると以下のとおりです。
SKILL.mdとは
Claude Codeへの「指示書」です。「X検索スクリプトをこう使って、結果をこの形式で整理して」という手順が書いてあります。Claude Codeはこのファイルを読んで、何をすべきか理解します。
search.pyとは
xAI APIを実際に叩くスクリプトです。Claude Codeがこのスクリプトを実行すると、GrokがXのリアルタイム投稿を検索し、結果を返してくれます。
SKILL.mdが「司令塔」でsearch.pyが「実働部隊」というイメージです。
両ファイルを保存したら、プロジェクトフォルダの中に以下の構成でフォルダとファイルを配置します。
x-research/
└── .claude/
└── skills/
└── x-research/
├── SKILL.md
└── search.py
※ご注意(Macの場合のみ)
「.claude」のようにドットから始まる名前のフォルダやファイルは、Macではデフォルトで非表示になってしまいますので、Finderを開いた状態で「Cmd + Shift + .」を押して隠しファイルの表示を有効にしてください。
その状態で、「.claude」というフォルダを作ろうとすると以下の確認画面が表示されるので、「ドットを使用」をクリックすれば完了です。
※Windowsではそのまま表示されるので設定不要です。
※ターミナルでディレクトリを作成・確認する場合は不要です。
以上で、セットアップは完了です。
4. 実際に使ってみる
それでは、実際に使ってみましょう。
手順①:初期設定(初回のみ)
Claudeのデスクトップアプリを開いて「コード」タブを選択します。ここがClaude Codeの画面です。
チャット欄の下にある「フォルダーを選択」で、先ほど作成したプロジェクトフォルダ(x-research)を選択してください。
フォルダを開いたら、まずAPIキーを設定します。チャット欄に以下のように入力してください。
環境変数 XAI_API_KEY に "xai-あなたのAPIキー" を設定して
Claudeが設定を完了したら、次回以降はこの設定が保存されるので再入力は不要です。
初めてスクリプトを実行するとき、下のように画面下部に許可を求めるバーが表示されます。これはClaude Codeが「このコマンドを実行していいですか?」と確認しているものです。「Always allow for project (local)」を選ぶと、次回以降は同じコマンドの確認が省略されます。毎回確認したい場合は「一度だけ許可」を選んでください。
Claudeから「環境変数を設定しました」という趣旨の回答があれば成功です。
手順②:指示してみる
チャット欄に以下のように入力してみてください。
search.pyでXのトレンドを調べて
1〜2分ほど待つと、Xで今盛り上がっている話題が整理されて返ってきます。
※プロジェクトフォルダにCLAUDE.mdというファイルを置いて、Claudeに「Xの話題はsearch.pyを使え」と事前に指示しておく方法もありますが、環境によっては安定しないことがあるため、本記事では確実に動く「search.pyで〜」という指示の形を採用しています。
ジャンルを絞りたい場合は、具体的に指定するだけでOKです。
search.pyでAI活用系のトレンドを調べて
search.pyでキャリア・転職系のトレンドを調べて
もちろん、結果を元にさらに掘り下げることもできます。「この中で一番盛り上がっているネタを深掘りして」「◯番目のテーマをもう少し詳しく」といった質問を続ければ、チャットしながらネタを練っていけます。
これで、XのリアルタイムなトレンドをClaude Codeから一言でリサーチできる環境が整いました。毎日のリサーチにぜひ活用してみてください。
さらに、冒頭でお見せした「noteの記事ネタ」や「Xの投稿ネタ」への自動変換の仕組みは、noteに投稿した当記事の完全版にて公開しています。
完全版のリンクはコメント欄をご確認ください
※補足
Xのデータ取得にはSocialData APIという選択肢も最近話題です。API単価は安いですが、返ってくるのは生データのため、AIに分析させるとトークン消費が大きくなりがち(トータルのコストが高くなりがち)です。ネタ探し用途なら、検索から分析まで一発で完結するxAI APIの方がトータルでは効率的です。

Claudeclaude-workflow
Claude Code × Grokで毎日のネタ集めを自動化した全手順|Xのトレンドリサーチを劇的に時短する方法
♥ 474↻ 40
原文を表示 / Show original
日々の情報収集やリサーチにChatGPTやClaudeを使っている人は多いと思いますが、「いま何が盛り上がっているか」というリアルタイムの空気感までは、うまく拾えないことがありますよね。
この弱点を補えるのがGrokです。GrokはX社のAIで、X上の全ポストにリアルタイムでアクセスできるため、人々が本音を24時間365日垂れ流し続ける巨大なデータベースにダイレクトに検索できます。
このGrokによるX検索をClaude Codeから呼び出すアプローチを、下のはやっち様の記事を参考にいろいろ試してみたところ生産性が爆上がりしました。そこで本記事では、非エンジニアでも迷わず進められるように手順をゼロから画像付きで解説しつつ、さらに検索結果をnoteの記事ネタやXの投稿ネタに自動変換する仕組みまで作ってみました。
はやっち @ AI Business Lab
@HayattiQ
·
Feb 10
Article
Claude Codeに「X検索」を足すと、リサーチが捗りすぎて止まらなくなる
ブログ記事を書いたり、投稿文を作るとき、AIでリサーチするのはもはや、当たり前のように一般的。Claude CodeもChatGPTも、文書作成、リサーチ能力は申し分ない。
だが「Xの今」を追わせると、途端に精度が落ちる。...
20
816
9.4K
3.3M
実際にどんなことができるのか、まずは完成イメージをご覧ください。
たとえば「◯◯のトレンドを調べて」と指示するだけで、特定ジャンルで盛り上がっているテーマがクラスター分析付きで返ってきます。
投資家向けのリサーチにも使えます。例えば日経平均に対するXの投資家の温度感を聞いてみたところ、このように強気・弱気の比率と根拠まで整理されて返ってきました。
さらに、Xで盛り上がっているネタを「noteの記事ネタ」に自動変換することもできます。検索需要・差別化余地・おすすめ度の評価付きで、タイトル案や記事構成まで出てきます。
※3枚目のネタ自動変換の仕組みは、noteに投稿した当記事の完全版にて公開しています(コメント欄にリンクあり)。
これらを実現するためにやることはシンプルで、①APIキーの発行 → ②APIの接続テスト → ③Claude Codeのセットアップの3ステップです。
それでは、順番に解説していきます。
1. APIキーの発行
GrokのX検索機能を使うには、xAI APIの利用登録とAPIキーの発行が必要です。APIキーとは、サービスを利用するための認証コードのようなものです。
手順①:xAIコンソールにアクセス
https://console.x.ai/ にアクセスして、Xアカウントで以下の手順でサインインしていきます。
「Sign in」をクリックします。
サインイン方法は、「Xアカウント・メールアドレス・Googleアカウント・Appleアカウント」の4種類から選べます。本記事ではXアカウントでの手順を紹介しますが、どの方法でも以降の手順は同じです。
「Xでログイン」をクリックします。
「アプリにアクセスを許可」をクリックします。
規約に同意して「続行」をクリックします。
この画面に進んだら成功です。
手順②:クレジットをチャージ
APIの利用には事前のクレジットチャージが必要です。X検索1回あたりの費用は約$0.10〜$0.15(15〜22円程度)なので、まずは$5程度のチャージで十分です。
「Dashboard」を選択して、「Buy some credits」横の「Purchase」をクリックします。
「Amount」に金額を入力して、「Checkout」をクリックします。
決済画面が表示されますので、必要情報を入力して「支払う」をクリックします。
この画面が表示されたら成功です。
手順③:APIキーを発行
続いてAPIキーを発行します。
コンソール左メニューの「API Keys」から「Create API Key」をクリック。
「Name」のところに、任意の名前(用途が後からわかれば何でもOK)を入れて、「Restrict access / Custom rate limits / Expiry date」の3つはすべてオフのままで「Create API key」をクリックします。
xai-から始まるAPIキーが表示されるので、必ずその場でコピーして別の場所に保存してください。キーは、この画面を閉じると二度と表示されませんのでご注意ください。
APIキーを保存したら「Back to API key」をクリックします。
2. APIの接続テスト
続いて、APIが問題なく接続しているかをテストします。このステップは飛ばしても先に進めますが、この後のClaude Codeとの連携でエラーが出たとき、原因が「APIキーの設定ミス」なのか「Claude Code側の問題」なのかで混乱します。1分で終わるのでやっておきましょう。
以下のコードをコピーして、テキストエディタ(メモ帳など)に貼り付け、「test_x_search.py」というファイル名でデスクトップに保存してください。
python
"""
xAI API x_search 疎通確認スクリプト
使い方:
1. 環境変数に XAI_API_KEY を設定
Mac: export XAI_API_KEY="xai-xxxxx"
Windows: $env:XAI_API_KEY = "xai-xxxxx"
2. スクリプトを実行
Mac: python3 test_x_search.py
Windows: python test_x_search.py
"""
import os
import json
import urllib.request
import urllib.error
API_KEY = os.environ.get("XAI_API_KEY", "")
API_URL = "https://api.x.ai/v1/responses"
MODEL = "grok-4-1-fast" # コスパ最優先
def search_x(query: str) -> dict:
"""x_search を1回叩いて結果を返す"""
payload = {
"model": MODEL,
"input": [
{"role": "user", "content": query}
],
"tools": [
{"type": "x_search"}
]
}
req = urllib.request.Request(
API_URL,
data=json.dumps(payload).encode(),
headers={
"Content-Type": "application/json",
"Authorization": f"Bearer {API_KEY}",
"User-Agent": "x-research/1.0",
},
method="POST",
)
with urllib.request.urlopen(req) as resp:
return json.loads(resp.read())
def main():
if not API_KEY:
print("エラー: 環境変数 XAI_API_KEY が設定されていません")
print('PowerShell: $env:XAI_API_KEY = "xai-xxxxx"')
return
query = "AI agent coding tools trending today"
print(f"テストクエリ: {query}")
print("x_search を呼び出し中...\n")
try:
result = search_x(query)
# テキスト応答を抽出
for item in result.get("output", []):
if item.get("type") == "message":
for content in item.get("content", []):
if content.get("type") == "output_text":
print("=== 応答 ===")
print(content["text"][:1000]) # 最初の1000文字
print("\n=== 疎通確認OK ===")
return
# 構造が違う場合はそのまま出力
print("=== Raw Response (先頭2000文字) ===")
print(json.dumps(result, ensure_ascii=False, indent=2)[:2000])
print("\n=== 疎通確認OK (応答あり) ===")
except urllib.error.HTTPError as e:
print(f"HTTPエラー: {e.code}")
print(e.read().decode())
except Exception as e:
print(f"エラー: {e}")
if __name__ == "__main__":
main()
※保存するとき、ファイルの種類を「すべてのファイル」にして、拡張子が.pyになっていることを確認してください。.txtで保存されるとスクリプトが動きません。
ここからは、MacとWindowsで手順が少し異なるので、それぞれ説明していきます。
Macの場合:
「ターミナル.app」を起動します。見つからない場合はアプリケーションの選択画面や検索バーで「ターミナル」と検索してください。
起動すると、以下のようなコマンド入力画面が表示されます。
ここに、以下のコマンドを1行ずつ実行します。
cd ~/Desktop
export XAI_API_KEY="xai-ここにあなたのAPIキーを貼る"
python3 test_x_search.py
Windowsの場合:
PowerShellを起動します。見つからない場合はアプリケーションの選択画面や検索バーで「powershell」と検索してください。
起動すると、以下のようなコマンド入力画面が表示されます。
ここに、以下のコマンドを1行ずつ実行します。
cd ~/Desktop
$env:XAI_API_KEY = "xai-ここにあなたのAPIキーを貼る"
python test_x_search.py
どちらの場合も、「疎通確認OK」と表示されればテスト成功です。
3. Claude Codeのセットアップ
最後にClaude Codeのセットアップです。以下の手順で進めてください。
手順①:Claudeアプリの準備
Claudeのデスクトップアプリをまだインストールしていない方は、以下からダウンロードしてください。既にインストール済みの方はこのステップは飛ばしてOKです。
Claudeをダウンロードする
インストールが完了したら、アプリは一旦閉じて大丈夫です。
手順②:プロジェクトフォルダの準備
デスクトップなど任意の場所にプロジェクトフォルダを作ってください。フォルダ名は何でも大丈夫ですが、半角英数字にしておくのが無難です。今回は「x-research」というフォルダ名で説明を進めていきます。
手順③:ファイルのダウンロードと配置
以下の2つのファイルを作成します。それぞれのコードをコピーして、テキストエディタ(メモ帳など)に貼り付け、指定のファイル名で保存してください。
ファイル名:SKILL.md
markdown
# X Research Skill — Xトレンド収集
xAI API の `x_search` を使い、Xのリアルタイムな話題を収集するスキル。
## 重要
**Xの情報収集には、必ず `.claude/skills/x-research/search.py` を実行すること。**
Web検索や内蔵の検索機能は使わない。Xのリアルタイム投稿は search.py 経由の xAI API でしか正確に取得できない。
## 前提条件
- 環境変数 `XAI_API_KEY` が設定されていること
- Python 3 が利用可能であること
## 使い方
ユーザーからXのトレンド調査、話題の収集、ネタ探しを依頼されたら、以下のコマンドで実行する。
bash
python3 .claude/skills/x-research/search.py "検索トピック"
トピックが指定されない場合は、以下のジャンルを横断的に探索する:
- AI / 生成AI活用
- 副業・個人で稼ぐ
- 仕事術・生産性
- テクノロジー × ビジネス
単体で実行した場合は、収集結果をそのまま整理して提示する。
ファイル名:search.py
python
"""
xAI API x_search スクリプト
.claude/skills/x-research/search.py
使い方:
python3 .claude/skills/x-research/search.py "検索トピック"
python3 .claude/skills/x-research/search.py (デフォルトジャンルで検索)
"""
import os
import sys
import json
import urllib.request
import urllib.error
from datetime import datetime, timedelta
API_KEY = os.environ.get("XAI_API_KEY", "")
API_URL = "https://api.x.ai/v1/responses"
MODEL = "grok-4-1-fast"
# 検索対象期間(昨日〜今日)
TODAY = datetime.now().strftime("%Y-%m-%d")
YESTERDAY = (datetime.now() - timedelta(days=1)).strftime("%Y-%m-%d")
DEFAULT_PROMPT = f"""
目的: X(Twitter)で直近に話題になっているトピックを収集・要約する。
期間: {YESTERDAY} から {TODAY}
やること:
1) 以下の領域について、広めのクエリを10個以上自分で作ってX検索する
2) 収集した投稿から「繰り返し出てくる固有名詞/機能名/言い回し」を抽出し、3-5クラスターにまとめる
3) クラスターごとに代表ポストを2つずつ選ぶ(長文の直接引用はしない)
4) 合計10件の「素材」を出す
各素材ごとに以下を出す:
- url(Xの投稿URL。無ければ一次情報URL)
- 要約(1-2行、自分の言葉)
- エンゲージ指標(観測できたものだけ。不明は unknown)
- なぜ伸びたか(仮説を3つまで)
- ここから作れるネタ案(2つ。異なる切り口で)
- フック案(1行を3つ)
注意:
- 投資助言に見える表現は禁止
- 不確かな情報は「未確認」と明記する
- 長文の直接引用はしない
出力形式:
- 最初に「タイムラインの空気(論点のクラスター)」を箇条書き
- 次に「今日の結論(狙うべき3テーマ)」を箇条書き
- 次に「素材一覧」を番号付きで10件
- 最後に url だけの一覧をまとめて
"""
def search_x(query: str) -> dict:
"""x_search を叩いて結果を返す"""
payload = {
"model": MODEL,
"input": [
{"role": "user", "content": query}
],
"tools": [
{
"type": "x_search",
"from_date": YESTERDAY,
"to_date": TODAY,
}
]
}
req = urllib.request.Request(
API_URL,
data=json.dumps(payload).encode(),
headers={
"Content-Type": "application/json",
"Authorization": f"Bearer {API_KEY}",
"User-Agent": "x-research/1.0",
},
method="POST",
)
with urllib.request.urlopen(req, timeout=120) as resp:
return json.loads(resp.read())
def extract_text(result: dict) -> str:
"""レスポンスからテキストを抽出"""
for item in result.get("output", []):
if item.get("type") == "message":
for content in item.get("content", []):
if content.get("type") == "output_text":
return content["text"]
return json.dumps(result, ensure_ascii=False, indent=2)
def main():
if not API_KEY:
print("エラー: 環境変数 XAI_API_KEY が設定されていません")
sys.exit(1)
# コマンドライン引数でトピックを指定可能
if len(sys.argv) > 1:
topic = " ".join(sys.argv[1:])
query = DEFAULT_PROMPT.replace(
"以下の領域について",
f"「{topic}」の領域について"
)
else:
query = DEFAULT_PROMPT
print(f"期間: {YESTERDAY} 〜 {TODAY}")
print("X検索を実行中(1〜2分かかることがあります)...\n")
try:
result = search_x(query)
text = extract_text(result)
print(text)
except urllib.error.HTTPError as e:
print(f"HTTPエラー: {e.code}")
print(e.read().decode())
sys.exit(1)
except Exception as e:
print(f"エラー: {e}")
sys.exit(1)
if __name__ == "__main__":
main()
※保存するとき、ファイルの種類を「すべてのファイル」にして、拡張子(.mdや.py)がそのまま残っていることを確認してください。
それぞれの役割をわかりやすく説明すると以下のとおりです。
SKILL.mdとは
Claude Codeへの「指示書」です。「X検索スクリプトをこう使って、結果をこの形式で整理して」という手順が書いてあります。Claude Codeはこのファイルを読んで、何をすべきか理解します。
search.pyとは
xAI APIを実際に叩くスクリプトです。Claude Codeがこのスクリプトを実行すると、GrokがXのリアルタイム投稿を検索し、結果を返してくれます。
SKILL.mdが「司令塔」でsearch.pyが「実働部隊」というイメージです。
両ファイルを保存したら、プロジェクトフォルダの中に以下の構成でフォルダとファイルを配置します。
x-research/
└── .claude/
└── skills/
└── x-research/
├── SKILL.md
└── search.py
※ご注意(Macの場合のみ)
「.claude」のようにドットから始まる名前のフォルダやファイルは、Macではデフォルトで非表示になってしまいますので、Finderを開いた状態で「Cmd + Shift + .」を押して隠しファイルの表示を有効にしてください。
その状態で、「.claude」というフォルダを作ろうとすると以下の確認画面が表示されるので、「ドットを使用」をクリックすれば完了です。
※Windowsではそのまま表示されるので設定不要です。
※ターミナルでディレクトリを作成・確認する場合は不要です。
以上で、セットアップは完了です。
4. 実際に使ってみる
それでは、実際に使ってみましょう。
手順①:初期設定(初回のみ)
Claudeのデスクトップアプリを開いて「コード」タブを選択します。ここがClaude Codeの画面です。
チャット欄の下にある「フォルダーを選択」で、先ほど作成したプロジェクトフォルダ(x-research)を選択してください。
フォルダを開いたら、まずAPIキーを設定します。チャット欄に以下のように入力してください。
環境変数 XAI_API_KEY に "xai-あなたのAPIキー" を設定して
Claudeが設定を完了したら、次回以降はこの設定が保存されるので再入力は不要です。
初めてスクリプトを実行するとき、下のように画面下部に許可を求めるバーが表示されます。これはClaude Codeが「このコマンドを実行していいですか?」と確認しているものです。「Always allow for project (local)」を選ぶと、次回以降は同じコマンドの確認が省略されます。毎回確認したい場合は「一度だけ許可」を選んでください。
Claudeから「環境変数を設定しました」という趣旨の回答があれば成功です。
手順②:指示してみる
チャット欄に以下のように入力してみてください。
search.pyでXのトレンドを調べて
1〜2分ほど待つと、Xで今盛り上がっている話題が整理されて返ってきます。
※プロジェクトフォルダにCLAUDE.mdというファイルを置いて、Claudeに「Xの話題はsearch.pyを使え」と事前に指示しておく方法もありますが、環境によっては安定しないことがあるため、本記事では確実に動く「search.pyで〜」という指示の形を採用しています。
ジャンルを絞りたい場合は、具体的に指定するだけでOKです。
search.pyでAI活用系のトレンドを調べて
search.pyでキャリア・転職系のトレンドを調べて
もちろん、結果を元にさらに掘り下げることもできます。「この中で一番盛り上がっているネタを深掘りして」「◯番目のテーマをもう少し詳しく」といった質問を続ければ、チャットしながらネタを練っていけます。
これで、XのリアルタイムなトレンドをClaude Codeから一言でリサーチできる環境が整いました。毎日のリサーチにぜひ活用してみてください。
さらに、冒頭でお見せした「noteの記事ネタ」や「Xの投稿ネタ」への自動変換の仕組みは、noteに投稿した当記事の完全版にて公開しています。
完全版のリンクはコメント欄をご確認ください
※補足
Xのデータ取得にはSocialData APIという選択肢も最近話題です。API単価は安いですが、返ってくるのは生データのため、AIに分析させるとトークン消費が大きくなりがち(トータルのコストが高くなりがち)です。ネタ探し用途なら、検索から分析まで一発で完結するxAI APIの方がトータルでは効率的です。