LoginSignup
10
2

More than 1 year has passed since last update.

無料でTwitter Botを運用しよう【GitHub Actions編】

Last updated at Posted at 2022-12-04

はじめに

この記事は長野高専 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しても実行されます)。

.github/workflow/sample.yml
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です。

設定は,
image.png
image.png

ここで追加・編集します.追加するときは緑の[New repository secret]です.

image.png

実際は、ここらへんの値を設定してください。

  • 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の例です。

.github/workflows/tweet.yml
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 }}
  1. Events that trigger workflows | GitHub Actions

  2. Node.js のビルドとテスト

  3. Python のビルドとテスト | GitHub Docs

10
2
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
10
2