タイトル: APIにアプリケーションを登録する
SEOタイトル: X (Twitter) API アプリケーション登録完全ガイド|v2・Bearer Token・OAuth 2.0 PKCE
| この記事の要点 |
|
X (Twitter) API の概要
X API は、ツイート投稿・タイムライン取得・検索・ユーザー情報取得などをプログラム経由で行うための公式 API です。2023 年以降「Twitter」から「X」へリブランディングされ、無料枠の大幅縮小・有料化が進みました。
プランと料金 (2025 年現在)
| プラン | 月額 | 主な制限 | 典型用途 |
|---|---|---|---|
| Free | $0 | 投稿 500/月、月 100 リクエスト、自分のアカウントのみ | 動作確認・ボット (極小) |
| Basic | $200 | 投稿 3,000/月、検索 10,000/月、3 App まで | 小規模ボット・分析 |
| Pro | $5,000 | 投稿 300,000/月、検索 1M/月、フルアーカイブ検索 | 業務利用・分析サービス |
| Enterprise | 個別見積 | カスタム、Decahose / PowerTrack | 大規模分析・ニュースメディア |
料金は変動します。最新は公式 developer.x.com/en/products/x-api で確認してください。
登録手順
STEP 1: 開発者アカウント作成
- developer.x.com に X アカウントでログイン
- 右上 Sign up → 利用目的の英文記述 (用途・分析手法・公開予定など)
- 規約同意 → メール認証
- 無料プランの場合はそのまま Free Project が作られる
STEP 2: Project と App 作成
- Developer Portal → Projects & Apps → + New Project
- Project 名、用途、ユースケース説明を入力
- Project に紐づく App を作成(App 名はグローバルでユニーク)
- 作成完了画面で API Key / API Key Secret / Bearer Token が一度だけ表示される → 必ず保存
STEP 3: 権限設定
App 設定の User authentication settings を開き:
- App permissions: Read / Read and write / Read and write and Direct message
- Type of App: Web App (OAuth 2.0) / Native App / Automated App
- Callback URI: 例
https://myapp.example.com/auth/x/callback - Website URL: アプリの紹介ページ
取得できるキー類とその役割
| 名前 | 役割 | 主な用途 |
|---|---|---|
| API Key / API Key Secret | App を識別する Consumer 認証情報 | OAuth 1.0a 署名作成 |
| Bearer Token | App 単独の認証トークン | App-only 認証で公開データ取得 (検索・公開タイムライン) |
| Access Token / Token Secret | 特定ユーザーを代理する認証情報 | OAuth 1.0a でツイート投稿・DM 送信 |
| Client ID / Client Secret | OAuth 2.0 用 | OAuth 2.0 PKCE フローで Access Token を取得 |
App-only 認証 (Bearer Token) のリクエスト例
# 検索 (recent search, v2)
curl -X GET "https://api.x.com/2/tweets/search/recent?query=Laravel" \
-H "Authorization: Bearer YOUR_BEARER_TOKEN"
# ユーザー情報取得
curl -X GET "https://api.x.com/2/users/by/username/twitter" \
-H "Authorization: Bearer YOUR_BEARER_TOKEN"
# 自分のツイート (要 user 認証なので Bearer 単独では不可)
OAuth 2.0 PKCE フロー (ユーザー代理)
「他人のユーザーがあなたのアプリを通してツイートする」場合は OAuth 2.0 PKCE が現行の推奨方式です。
1. ブラウザを開いて authorize URL へリダイレクト
https://x.com/i/oauth2/authorize
?response_type=code
&client_id=YOUR_CLIENT_ID
&redirect_uri=https://myapp/auth/x/callback
&scope=tweet.read tweet.write users.read offline.access
&state=RANDOM_STATE
&code_challenge=CODE_CHALLENGE
&code_challenge_method=S256
2. ユーザーが許可 → コールバックに ?code=...&state=... が返る
3. サーバから code を access_token に交換
POST https://api.x.com/2/oauth2/token
grant_type=authorization_code
code=...
redirect_uri=...
client_id=...
code_verifier=...
4. レスポンスに access_token (期限あり) と refresh_token
5. API 呼び出し
GET https://api.x.com/2/users/me
Authorization: Bearer ACCESS_TOKEN
主要スコープ
| スコープ | 意味 |
|---|---|
tweet.read | ツイート読取 |
tweet.write | ツイート投稿 |
users.read | ユーザー情報取得 |
follows.read | フォロー関係読取 |
follows.write | フォロー追加 / 解除 |
like.read / like.write | いいね |
dm.read / dm.write | DM |
offline.access | refresh_token を得る (長期利用) |
v1.1 から v2 への移行
| v1.1 | v2 | 備考 |
|---|---|---|
GET statuses/user_timeline | GET /2/users/:id/tweets | レスポンス構造が変わった |
POST statuses/update | POST /2/tweets | JSON body 化 |
GET search/tweets | GET /2/tweets/search/recent | クエリ DSL が強化 |
GET users/show | GET /2/users/by/username/:name | — |
| OAuth 1.0a | OAuth 2.0 PKCE | v2 は両対応だが新規は OAuth 2 推奨 |
言語別 SDK
| 言語 | 主な SDK | 備考 |
|---|---|---|
| Python | Tweepy / twitter-api-client | Tweepy が定番 |
| Node.js / TS | twitter-api-v2 / twit (古い) | twitter-api-v2 推奨 |
| PHP | abraham/twitteroauth / noweh/twitter-api-v2-php | v2 対応版を選ぶ |
| Ruby | twitter gem / x-ruby | — |
| Java | twitter4j (v1.1) | v2 はメンテ少、自前 HTTP 推奨 |
レート制限
API ごとに 15 分窓 / 24 時間窓のレート制限があります。レスポンスヘッダで残量が確認可能。
# レスポンスヘッダ
x-rate-limit-limit: 450 -- 窓内の上限
x-rate-limit-remaining: 449 -- 残り
x-rate-limit-reset: 1700000000 -- リセットされる Unix 時刻
# 429 Too Many Requests が返ったらリセット時刻まで待機
# 指数バックオフよりも reset 時刻待ちが正解
運用上の注意
- キー類は環境変数 / Secrets Manager で管理。Git にコミットしない
- X 社のポリシー違反 (スパム判定・大量フォロー解除) でApp が予告なく停止される。利用規約熟読
- 料金プランの仕様は急に変わることがある (2023 年の激変は記憶に新しい)
- App 公開時はPrivacy Policy / Terms of Service URL の登録が必須
- 大量データ取得は Pro 以上の Filtered Stream / Full-archive Search 利用が前提
FAQ
Q: Free プランで投稿ボットを作れる?
A: 月 500 投稿までなので簡易なものなら可能。ただしリプライ取得や検索が極端に制限されるため、本格運用は Basic 以上が必要です。
Q: Bearer Token と OAuth トークンの違いは?
A: Bearer Token は App 自身を表すもので、公開データ取得には十分。ツイート投稿や DMは「誰のアカウントで実行するか」が必要なので OAuth 1.0a / 2.0 ユーザートークンが必須です。
Q: 申請が通らない
A: 利用目的の英文記述が薄すぎると却下されます。ユースケース・データ利用方針・公開先を具体的に記述してください (300 語以上推奨)。
Q: API キーを誤って公開してしまった
A: Developer Portal で即座にキー再生成。GitHub への push であれば Secret Scanning から X 社へ通知が行き自動失効されることもあります。