はじめに
Qiitaの組織に新しい記事が投稿されたとき、自動でX(旧Twitter)に通知できたら便利ですよね。今回は、それをPythonとGitHub Actionsを使って実現してみました。
前回と前々回の記事の続きとなりますので、興味のある方はそちらを参考にしてみてください。
1本目の記事では、Twitter(現X)上で自動投稿を行う簡易的な仕組みを技術的に検証してみました!
2本目の記事では、Qiitaの組織アカウントに新着記事が投稿された際に、自動でX(旧Twitter)へ投稿する仕組みを趣味で作ってみました!
記事が長くなってきたので、今回でひとまず技術検証は一区切りにしようと思います!
書こうと思ったきっかけ
前回の記事で、QiitaのRSSフィードを使って新着記事をPythonで取得し、Xに自動投稿する処理を作成しました。
今回は、この処理をGitHub Actionsで定期的に実行することで、自動化された通知Botにしたいと思い、取り組みました。
いい感じに定期実行できました!!
GitHub Actionsもとてもいい感じに成功しています!!
実際のリポジトリになります
実際にやってみた
ディレクトリ構成
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
機密情報になりますので、こんな感じで登録してください!
.envをGitに上げないようにする
.gitignore
に以下を追加:
.env
すでにコミット済みなら以下を実行:
git rm --cached .env
実行してみた
GitHub Actionsの「workflow_dispatch」機能を使って、手動起動してみました。
GitHubリポジトリの Actions
タブから該当ワークフローを選び、「Run workflow」ボタンを押すだけで実行可能です。
以下の赤枠から実行可能となっています!
実行後、コンソールログに以下のような出力があり、Qiitaに新しい記事があった場合には正常にツイートされました:
✅ ツイートしました: 【Qiita更新】◯◯という記事タイトル by ユーザー名
https://qiita.com/xxx/items/yyy #Qiita #HackathonChallenge
正常にツイートされていることが確認できました!
新しい記事がなかった場合は、以下のようにスキップされます:
⚠️ フィードが空です
こんな感じです!
まとめ
ここまで読んでいただき、ありがとうございました!
- Qiitaの組織フィードを活用して、新着記事を自動検知
- GitHub Actionsで任意のタイミングに GitHub Actions を起動
- .envはGit管理外にしてセキュアに運用
これで、技術発信をよりスムーズにいい感じにできるのではないかと思いました。
今後は記事の重複チェックや複数記事への対応なども進めていきたいと考えていますが、ひとまず今回の検証はここで一区切りとしようと思います…!