X（旧Twitter）投稿BotをPythonで構築：APIキー取得から自動投稿の実装まで

## はじめに

この記事では、Twitter（現X）上で自動投稿を行う簡易的なBotアプリの作成方法についてまとめます。APIの取得からPythonを使った投稿実装まで、最小構成で紹介しています。

**以前、Mattermost にメッセージを自動投稿するボットを Python で簡単に作成したことがあり、その経験も今回の参考になりました！**

https://qiita.com/free-honda/items/f7805597ec3ad0bb8f5f

内容に不備などがございましたら、お手数ですが優しくご指摘いただけますと幸いです。

## 書こうと思ったきっかけ

X（Twitter）で自動でもっと情報発信をしたいと考えたのがきっかけです。調べてみると案外シンプルに実装できたため、備忘録として記事化しました。

**こんな感じで投稿できました！（現時点では手動でプログラムを実行していますが、今後は cron などで定期実行できるようにする予定です…！）**

![Screenshot 2025-06-15 at 21.38.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/53d7b7bc-62a4-484b-8c71-767599a1e766.png)

## 事前確認

### プランの比較まとめ

| プラン名  | 月額               | 投稿上限（ユーザー） | 読み取り上限       | 特徴             |
| ----- | ---------------- | ---------- | ------------ | -------------- |
| Free  | 無料               | 500件/月     | 100件/月       | 書き込み専用（テスト向け）  |
| Basic | \$200/月| 3,000件/月   | 15,000件/月    | 個人・試作向け、読み書き可能 |
| Pro   | \$5,000/月        | 288,000件/月 | 1,000,000件/月 | ビジネス・商用大規模利用向け |

**参考文献**

https://developer.x.com/en

## 実際にやってみた

### APIキーの取得

#### 1. API Keyの取得手順

X Developerポータル（`https://developer.twitter.com/`）から以下を取得

![Screenshot 2025-06-15 at 21.43.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/2377ef6f-202a-4f1c-8ed5-ccceda89869d.png)

* 鍵アイコン（🔑）をクリックして下記の4情報を取得

  * API Key
  * API Secret
  * Access Token
  * Access Token Secret

![Screenshot 2025-06-15 at 21.45.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/124e589f-f0a0-49c4-abda-bce236e6ca46.png)

:::note alert
**※表示は一度きりなので、必ず安全な場所へ保存してください。**
:::

#### 2. アプリの「App permissions」を変更する

🔧 手順：

* X Developer Portal にアクセス
* 左メニューから「Projects & Apps > Your App > Settings」へ進む
* "App permissions"（アプリの権限） を以下に設定：

```
Read and Write
```

**ここの画面になります！**

![Screenshot 2025-06-15 at 21.47.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/06c59891-0ea5-4cf4-9504-6f98c0e7da93.png)

※デフォルトでは「Read only」になっています

* 「Save」をクリック
* **Access Token と Secret を再生成（再発行）**

  * 権限変更後は、新しいAccess Tokenが必要です
  * 「Keys and Tokens」タブへ行き、「Access Token and Secret」横の Generate をクリック

#### 3. AppleシリコンMacでの仮想環境構築

```bash
cd ~/Desktop/macbook\ pro/test

# 仮想環境の作成（arm64対応）
python3 -m venv venv
source venv/bin/activate

# パッケージのインストール
pip install --upgrade pip
pip install tweepy
```

**実際はこんな感じで仮想環境を構築しました！**

![Screenshot 2025-06-15 at 21.49.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/ab75b859-28fe-46f8-be21-ba6ae54d9c72.png)

## 実際のコード

```python
import tweepy

# 各種トークンをここに入力
bearer_token = "xxx"
api_key = "xxx"
api_secret = "xxx"
access_token = "xxx"
access_token_secret = "xxx"

# クライアント設定（v2）
client = tweepy.Client(
    bearer_token=bearer_token,
    consumer_key=api_key,
    consumer_secret=api_secret,
    access_token=access_token,
    access_token_secret=access_token_secret
)

# ツイート投稿（v2エンドポイント）
response = client.create_tweet(
    text="\U0001F389 新しいQiita記事が公開されました！\n\n「VPCエンドポイントをCloudFormationで一括作成：SSM・SSMMessages・EC2Messages対応テンプレート」 by honda@41期\n\U0001F517 https://qiita.com/free-honda/items/d9464a84211b4f521173\n\n#Qiita #技術ブログ #OrgName"
)
print("ツイート成功:", response.data)
```

## コード解説

### 1. ライブラリの読み込み

Twitter API に接続するための Python ライブラリ `tweepy` を読み込みます。

```python
import tweepy
```

これは、ツイート投稿や取得などの操作を簡単に行えるようにするものです。

```python
# 各種トークンをここに入力
bearer_token = "xxx"
api_key = "xxx"
api_secret = "xxx"
access_token = "xxx"
access_token_secret = "xxx"
```

### 2. API認証情報の定義

X（旧Twitter）APIを利用するには、開発者ポータルで取得した以下の認証情報が必要です。

* `bearer_token`: Twitter API v2 用のトークン（読み取り操作向け）

**ここです**

![Screenshot 2025-06-15 at 22.08.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/82391157-6ec6-40a7-a6e1-367ae289a544.png)

* `api_key` / `api_secret`: アプリそのものの認証（Consumer Key/Secret）
* `access_token` / `access_token_secret`: アカウントとしてツイートするための認証情報

これらをコード内に設定することで、API を使って自動で投稿するなどの操作が可能になります。

```python
# クライアント設定（v2）
client = tweepy.Client(
    bearer_token=bearer_token,
    consumer_key=api_key,
    consumer_secret=api_secret,
    access_token=access_token,
    access_token_secret=access_token_secret
)
```

### 3. Tweepyクライアントの初期化

`tweepy.Client` を使って、API に接続するためのクライアントを作成します。
このクライアントは Twitter API v2 に対応しており、ツイート投稿や取得などの機能を使えます。

この設定により、指定した認証情報を使って Twitter アカウントに接続できるようになります。

```python
# ツイート投稿（v2エンドポイント）
response = client.create_tweet(
    text="🎉 新しいQiita記事が公開されました！\n\n「VPCエンドポイントをCloudFormationで一括作成：SSM・SSMMessages・EC2Messages対応テンプレート」 by honda@41期\n🔗 https://qiita.com/free-honda/items/d9464a84211b4f521173\n\n#Qiita #技術ブログ #OrgName"
)
```

### 4. ツイート投稿

`create_tweet()` 関数を使ってツイートを投稿します。
ここでは、Qiita 記事の紹介文と URL、ハッシュタグ、絵文字を含めたツイート内容が投稿されます。

改行や記号、ハッシュタグ、絵文字もサポートされており、見やすく表現できます。

```python
print("ツイート成功:", response.data)
```

### 5. 実行結果の確認

投稿結果として返された情報（ツイート ID など）を `print()` 関数で表示し、成功を確認します。

```sh
(venv)  ~/Desktop/macbook pro/test   python test.py
ツイート成功: {'id': 'xxx', 'edit_history_tweet_ids': ['xxx'], 'text': '🎉 新しいQiita記事が公開されました！\n\n「VPCエンドポイントをCloudFormationで一括作成：SSM・SSMMessages・EC2Messages対応テンプレート」 by honda@41期\n🔗 https://t.co/YwmZqbYb7E\n\n#Qiita #技術ブログ #OrgName'}
```

ツイートが成功していれば、`response.data` に投稿内容やツイートIDが含まれます...！

## まとめ

ここまで読んでいただき、ありがとうございました！

:::note info
**X（Twitter）APIの利用にはプランによる制限がありますが、無料枠でも投稿Botのテスト用途には十分だと思いました！**
:::

tweepyライブラリを活用すれば、数行のコードで投稿まで実現できるので、ぜひ活用してみてください...！