1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

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

Last updated at Posted at 2025-06-17

はじめに

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

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

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

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

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

書こうと思ったきっかけ

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

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

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

Screenshot 2025-06-17 at 23.28.33.png

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

Screenshot 2025-06-17 at 23.42.42.png

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

実際にやってみた

ディレクトリ構成

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

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

参考文献

.github/workflows/tweet.yml

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

  • 毎時0分にスクリプトを自動実行(cron設定)
  • リポジトリチェックアウト
  • Pythonのセットアップ
  • 必要パッケージのインストール
  • スクリプトの実行(環境変数はSecretsから渡す)
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

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

.gitignore に以下を追加:

.env

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

git rm --cached .env

実行してみた

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

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

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

Screenshot 2025-06-17 at 23.34.44.png

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

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

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

Screenshot 2025-06-17 at 23.36.15.png

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

⚠️ フィードが空です

こんな感じです!

Screenshot 2025-06-17 at 23.40.24.png

まとめ

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

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

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

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

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?