はじめに
この記事は長野高専 Advent Calender 2022 5日目の記事です.序章なので軽めの内容を...
みなさん,TwitterのBotはどうやって運用していますか?本記事では,GitHub Actionsというのを活用すれば無料でBot運用ができるかもよ!というのを紹介したいと思います.
Gitの操作,Twitter Botの作り方に関する説明は省略します
GitHub Actions とは?
GitHub Actions は、ビルド、テスト、デプロイのパイプラインを自動化できる継続的インテグレーションと継続的デリバリー (CI/CD) のプラットフォームです。
― Understanding GitHub Actions | GitHub
?
GitHub Actionsは,各イベント(pushとかPRとか)が発生したタイミングでソースコードをビルドしたり,クラウドにデプロイしたりするワークフローを実行してくれるサービスです.
このワークフローは独自のYAMLファイルなどを用いて設定しますが,基本的にどのコマンドも用いることができるため,この仕様をうまいこと使用するとTwitter Botだって運用できちゃうわけです.
各イベントについて
GitHub Actionsでは様々なイベントが用意されています1.
push |
特定のブランチにpushされたとき |
pull_request |
特定のブランチに対してPRが完了したときなど |
schedule |
特定のスケジュールされた時間 |
今回はこのschedule
を用いて定期実行するBotを作っていきます.
宣伝
本記事の方法で運用しているBotです.
Botを作成する
ではまずBotを作成しましょう.このときのコツとして,DiscordのBotのように実行し続けるものではなく,1回実行する際の処理を書くようにしましょう.
Actionsを設定する
では、いよいよActionsを設定します。
Actionsを使うには、Workflowというものを設定する必要があります。
.github/workflow
というディレクトリ(作成してください)にYAMLファイルで実行するコマンド群を書き、これをWorkflowと呼びます。
以下は5分毎に実行するWorkflowの雛形です(もしくは,test-run
ブランチにpushしても実行されます)。
name: Sample Job
"on":
push:
branches:
- test-run
schedule:
- cron: "*/5 * * * *"
jobs:
run_follow_job:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
# ここから書く
環境を構築する
実行するためにはそのための環境が必要です。Ubuntuで実行する場合はだいたい揃っていますが、バージョンが古いです。適切なsetupアクションを呼び出して、最新の環境を使うようにしましょう。
この記事では有名所だけ載せます。これ以外の言語を用いる際には「GitHub Actions {言語名}」等で調べてください
Node.jsをセットアップ2
Node.js バージョン16
を使いセットアップする方法は次のとおりです.
- uses: actions/setup-node@v3
with:
node-version: 16
- run: npm ci
Pythonをセットアップ3
Pythonバージョン3.10
を使いセットアップする方法は次のとおりです.
- uses: actions/setup-python@v4
with:
python-version: "3.10"
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install flake8 pytest
if [ -f requirements.txt ]; then pip install -r requirements.txt; fi
実行コマンドを記載する
では、いよいよBotを実行します!
まず、実行に必要なコマンドをおさらいします。TLSpachaを例にすると、
node app
これをWorkflowに記載すると
- run: node app
のようになります。
node a
node b
のように、複数実行する必要がある場合は
- run: node a
- run: node b
のように記載しましょう。
Secretsの設定
APIキーや認証情報など、表向きには出せない情報を公開せずにプログラムに流す仕組みがあります。それがSecretsです。
ここで追加・編集します.追加するときは緑の[New repository secret]です.
実際は、ここらへんの値を設定してください。
-
TWITTER_API_KEY
: APIキー -
TWITTER_API_KEY_SECRET
: APIシークレット -
TWITTER_ACCESS_TOKEN
: アクセストークン -
TWITTER_ACCESS_TOKEN_SECRET
: アクセストークンシークレット -
BOT_ID
: BotのID(必要であれば)
- run: node app
env:
TWITTER_API_KEY: ${{ secrets.TWITTER_API_KEY }}
TWITTER_API_KEY_SECRET: ${{ secrets.TWITTER_API_KEY_SECRET }}
TWITTER_ACCESS_TOKEN: ${{ secrets.TWITTER_ACCESS_TOKEN }}
TWITTER_ACCESS_TOKEN_SECRET: ${{ secrets.TWITTER_ACCESS_TOKEN_SECRET }}
BOT_ID: ${{ secrets.BOT_ID }}
完成
TLSpachaの例です。
name: Tweet Job
"on":
push:
branches:
- test-run
schedule:
- cron: "0/5 * * * *"
jobs:
run_tweet_job:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: 16
- run: sudo apt install -y fonts-noto-cjk
- run: npm i
- run: node app
env:
TWITTER_API_KEY: ${{ secrets.TWITTER_API_KEY }}
TWITTER_API_KEY_SECRET: ${{ secrets.TWITTER_API_KEY_SECRET }}
TWITTER_ACCESS_TOKEN: ${{ secrets.TWITTER_ACCESS_TOKEN }}
TWITTER_ACCESS_TOKEN_SECRET: ${{ secrets.TWITTER_ACCESS_TOKEN_SECRET }}
BOT_ID: ${{ secrets.BOT_ID }}
DEFAULT_ICON: ${{ secrets.DEFAULT_ICON }}