【自動化】Python × GitHub Actions で Qiita の RSS を X に自動投稿する手順メモ

## はじめに

Qiitaの組織に新しい記事が投稿されたとき、自動でX（旧Twitter）に通知できたら便利ですよね。今回は、それをPythonとGitHub Actionsを使って実現してみました。

前回と前々回の記事の続きとなりますので、興味のある方はそちらを参考にしてみてください。

**1本目の記事では、Twitter（現X）上で自動投稿を行う簡易的な仕組みを技術的に検証してみました！**

https://qiita.com/free-honda/items/6919ff23fc904e2dd1d9

**2本目の記事では、Qiitaの組織アカウントに新着記事が投稿された際に、自動でX（旧Twitter）へ投稿する仕組みを趣味で作ってみました！**

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

***記事が長くなってきたので、今回でひとまず技術検証は一区切りにしようと思います！***

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

前回の記事で、QiitaのRSSフィードを使って新着記事をPythonで取得し、Xに自動投稿する処理を作成しました。

今回は、この処理をGitHub Actionsで定期的に実行することで、**自動化された通知Bot**にしたいと思い、取り組みました。

**いい感じに定期実行できました！！**

![Screenshot 2025-06-17 at 23.28.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/ecb7a507-b1c3-4228-bc50-6c2827013b8c.png)

**GitHub Actionsもとてもいい感じに成功しています！！**

![Screenshot 2025-06-17 at 23.42.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/b6cf748b-10fd-4af0-9532-3212868e5c30.png)

**実際のリポジトリになります**

https://github.com/free-honda/QIITA_TO_X_BOT

## 実際にやってみた

### ディレクトリ構成

Qiita記事の自動投稿Botに必要なファイルや設定を整理して構成しています。

```
QIITA_TO_X_BOT/
├── .github/
│   └── workflows/
│       └── tweet.yml          ← GitHub Actions の定義ファイル（CIの設定）
├── .env                       ← ローカル実行用の環境変数（Gitには含めない）
├── .gitignore                 ← .envなど、Gitに含めないファイルを指定
├── last_qiita_id.txt          ← 最後に取得した記事のID（GitHub Actionsでは一時ファイル）
├── qiita_to_x_bot.py          ← メインのPythonスクリプト
├── requirements.txt           ← 使用するPythonパッケージを記載
```

### requirements.txt

```
tweepy
feedparser
python-dotenv
```

ライブラリについては、以下の記事を主に参考にさせていただきました！

**参考文献**

https://scr.marketing-wizard.biz/dev/tweepy-twitter-apiv2

https://brian0111.com/python-feedparser-rss-parsing-guide/

https://qiita.com/harukikaneko/items/b004048f8d1eca44cba9

### .github/workflows/tweet.yml

GitHub Actionsで定期的にPythonスクリプトを実行するためのCI定義です。

* 毎時0分にスクリプトを自動実行（cron設定）
* リポジトリチェックアウト
* Pythonのセットアップ
* 必要パッケージのインストール
* スクリプトの実行（環境変数はSecretsから渡す）

```yaml
name: Tweet Qiita New Articles

on:
  schedule:
    - cron: '0 * * * *'  # 毎時0分に実行（日本時間なら9時間足す）
  workflow_dispatch:      # 手動実行も可能にする

jobs:
  tweet:
    runs-on: ubuntu-latest

    steps:
      - name: Checkout repository
        uses: actions/checkout@v4

      - name: Set up Python
        uses: actions/setup-python@v5
        with:
          python-version: '3.12'

      - name: Install dependencies
        run: |
          python -m pip install --upgrade pip
          pip install -r requirements.txt

      - name: Run bot script
        run: python qiita_to_x_bot.py
        env:
          BEARER_TOKEN: ${{ secrets.BEARER_TOKEN }}
          API_KEY: ${{ secrets.API_KEY }}
          API_SECRET: ${{ secrets.API_SECRET }}
          ACCESS_TOKEN: ${{ secrets.ACCESS_TOKEN }}
          ACCESS_TOKEN_SECRET: ${{ secrets.ACCESS_TOKEN_SECRET }}
```

### Secrets の設定

GitHub の Settings → Secrets → Actions に以下の5つを登録：

* `BEARER_TOKEN`
* `API_KEY`
* `API_SECRET`
* `ACCESS_TOKEN`
* `ACCESS_TOKEN_SECRET`

**機密情報になりますので、こんな感じで登録してください！**

![Screenshot 2025-06-17 at 23.32.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/8238f762-5cb7-4473-ba2d-3a8cc7d020e0.png)

### .envをGitに上げないようにする

`.gitignore` に以下を追加：

```
.env
```

すでにコミット済みなら以下を実行：

```bash
git rm --cached .env
```

## 実行してみた

GitHub Actionsの「workflow\_dispatch」機能を使って、手動起動してみました。

GitHubリポジトリの `Actions` タブから該当ワークフローを選び、「Run workflow」ボタンを押すだけで実行可能です。

**以下の赤枠から実行可能となっています！**

![Screenshot 2025-06-17 at 23.34.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/3fd982f1-31c8-4f95-909c-b3b7cc53e817.png)

実行後、コンソールログに以下のような出力があり、Qiitaに新しい記事があった場合には正常にツイートされました：

```
✅ ツイートしました： 【Qiita更新】◯◯という記事タイトル by ユーザー名
https://qiita.com/xxx/items/yyy #Qiita #HackathonChallenge
```

**正常にツイートされていることが確認できました！**

![Screenshot 2025-06-17 at 23.36.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/f4d85b58-cc8f-4ea4-a531-822dd0773188.png)

新しい記事がなかった場合は、以下のようにスキップされます：

```
⚠️ フィードが空です
```

**こんな感じです！**

![Screenshot 2025-06-17 at 23.40.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/4e4c9ef6-86d1-4ed1-bafd-0c9cef2273ba.png)

## まとめ

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

* Qiitaの組織フィードを活用して、新着記事を自動検知
* GitHub Actionsで任意のタイミングに GitHub Actions を起動
* .envはGit管理外にしてセキュアに運用

これで、技術発信をよりスムーズにいい感じにできるのではないかと思いました。

今後は記事の重複チェックや複数記事への対応なども進めていきたいと考えていますが、ひとまず今回の検証はここで一区切りとしようと思います…！