この内容は古いバージョンです。最新バージョンを表示するには、戻るボタンを押してください。
バージョン:6
ページ更新者:atom
更新日時:2026-06-11 07:12:00

タイトル: Twitter API
SEOタイトル: X (Twitter) API 完全ガイド — v2 移行と有料化対応

この記事の要点
  • 2023 年 2 月に Twitter API が原則有料化、X API v2 が現行。v1.1 は段階的に廃止
  • 料金: Free (read 1 ツイート/月相当) / Basic $100/月 / Pro $5,000/月 / Enterprise (個別契約)
  • 無料 tier では月間ツイート投稿 500 件、検索ほぼ不可、書き込みのみ可能
  • 認証は OAuth 2.0 PKCE または Bearer Token、ユーザー操作系は OAuth 1.0a User Context
  • エンドポイント: /2/tweets / /2/users / /2/users/:id/tweets / /2/spaces
  • クライアント: Python は Tweepy、Node は twitter-api-v2。代替: Mastodon API / Bluesky AT Protocol

X (Twitter) API の概要

2023 年 4 月、Elon Musk 体制下で従来の無料 API がほぼ廃止され、X API v2 という新体系に統一されました。スクレイピング対策強化と収益化が目的で、開発者コミュニティに大きな影響を与えた変更です。

本記事執筆時点 (2026 年) で v1.1 は段階的に停止され、新規開発はすべて v2 で行います。

料金プラン (2026 年時点)

プラン月額投稿上限/月読み取り検索用途
Free$0500 (書き込みのみ)自分のツイートのみ×ボット投稿のみ
Basic$1003,000 (User) / 50,000 (App)月 10,000 件過去 7 日個人開発・小規模
Pro$5,000300,000月 1,000,000 件フルアーカイブ商用サービス
Enterprise応相談制限大制限大フルアーカイブ + Firehose研究機関・大企業

無料 tier が極めて限定的なため、個人開発でも実質 Basic $100/月が最低ラインになっています。

認証方式

v2 API は 3 種類の認証をユースケース別に使い分けます:

方式用途取得物
OAuth 2.0 Bearer TokenApp-only 読み取り (検索、公開タイムライン)Bearer Token
OAuth 2.0 PKCEユーザー認可、ツイート投稿、DMAccess / Refresh Token
OAuth 1.0a User Context従来互換、メディアアップロードAPI Key + Secret + Access Token + Secret

Tweepy (Python) の使い方

# pip install tweepy
import tweepy

# Bearer Token (App-only, 読み取り専用)
client = tweepy.Client(bearer_token="YOUR_BEARER_TOKEN")

# 自分の最新 5 件取得
me = client.get_me()
tweets = client.get_users_tweets(id=me.data.id, max_results=5)
for t in tweets.data:
    print(t.id, t.text)

# 投稿には OAuth 1.0a または OAuth 2.0 User Context が必要
client = tweepy.Client(
    consumer_key="API_KEY",
    consumer_secret="API_SECRET",
    access_token="ACCESS_TOKEN",
    access_token_secret="ACCESS_SECRET",
)
client.create_tweet(text="Hello from API v2!")

twitter-api-v2 (Node.js)

// npm install twitter-api-v2
import { TwitterApi } from 'twitter-api-v2';

const client = new TwitterApi({
  appKey: process.env.X_API_KEY,
  appSecret: process.env.X_API_SECRET,
  accessToken: process.env.X_ACCESS_TOKEN,
  accessSecret: process.env.X_ACCESS_SECRET,
});

// ツイート投稿
const tweet = await client.v2.tweet('Hello X API v2!');
console.log(tweet.data.id);

// 検索 (Basic 以上)
const search = await client.v2.search('from:elonmusk -is:retweet', {
  max_results: 10,
  'tweet.fields': ['created_at', 'public_metrics'],
});
for await (const t of search) {
  console.log(t.text, t.public_metrics);
}

主要エンドポイント (v2)

エンドポイント用途必要プラン
POST /2/tweetsツイート投稿Free 以上
DELETE /2/tweets/:idツイート削除Free 以上
GET /2/tweets/search/recent直近 7 日検索Basic 以上
GET /2/tweets/search/all全期間検索Pro 以上
GET /2/users/:idユーザー情報Basic 以上
GET /2/users/:id/tweetsユーザータイムラインBasic 以上
GET /2/spacesSpaces 情報Basic 以上
GET /2/tweets/:id/liking_usersいいねしたユーザーPro 以上

レート制限の確認

レスポンスヘッダで残量を確認できます:

x-rate-limit-limit: 75
x-rate-limit-remaining: 73
x-rate-limit-reset: 1715000000

# x-rate-limit-reset は Unix 秒。
# 0 になったら 429 Too Many Requests が返る。
import tweepy, time

def safe_call(fn, *args, **kwargs):
    while True:
        try:
            return fn(*args, **kwargs)
        except tweepy.TooManyRequests as e:
            reset = int(e.response.headers.get('x-rate-limit-reset', time.time() + 60))
            wait = max(reset - int(time.time()), 5)
            print(f"Rate limit, sleeping {wait}s")
            time.sleep(wait)

v1.1 から v2 への移行

v1.1v2
POST statuses/update.jsonPOST /2/tweets
GET statuses/user_timeline.jsonGET /2/users/:id/tweets
GET search/tweets.jsonGET /2/tweets/search/recent
GET friends/list.jsonGET /2/users/:id/following
レスポンスがフラットdata + includes + meta 構造

代替プラットフォーム

X API の有料化を受け、開発者の一部は分散型プロトコルへ移行しています:

  • Mastodon API — 各インスタンスごとに OAuth、REST/Streaming、無料。statuses エンドポイントが Twitter v1.1 に近い
  • Bluesky AT Protocol — DID ベースの分散 ID、com.atproto.* / app.bsky.* 名前空間、無料、レート制限緩め
  • Threads API (Meta) — 2024 年から提供開始、Instagram と連携、無料枠あり
  • Misskey / Nostr — フォロワー数は少ないが完全無料

規約変更の経緯

  • 2023 年 2 月: 無料 API 廃止予告
  • 2023 年 3 月: v2 新料金体系発表 ($100 / $5,000)
  • 2023 年 4 月: 旧無料 tier 停止
  • 2023 年 6 月: 読み取り制限 (デイリーリミット) 導入
  • 2024 年: Free tier に「書き込みのみ 500/月」追加
  • 2024 年以降: 学術研究者向け無料アクセスは原則廃止 (個別申請)

FAQ

Q: 個人の bot を運用したい。最低いくらかかる?
A: 投稿のみで月 500 件以内なら Free で可能。タイムライン取得が必要なら Basic $100/月。

Q: v1.1 で動いていたコードが急に動かなくなった
A: v1.1 は段階的に shutdown 中。v2 に書き直すか、互換ラッパー (Tweepy 4.x など) を使ってください。

Q: ローカル開発で課金を抑えたい
A: Free で開発し、本番だけ Basic 契約する運用が一般的。プロジェクト単位で API Key を分けます。

Q: Mastodon や Bluesky は本当に Twitter 代替になる?
A: ユーザー数は 1/10 以下ですが、API は緩く、開発体験は良好です。クロスポスト用ライブラリ (mastodon.py, atproto) が充実。