はじめに
アフィリエイターをやっていた頃は、
Twittbotというサービスを使って、Botを量産していたが、
エンジニアになって、自分でもTwitterのBotを作ってみたいなあと思い、挑戦してみました!
TL;DR
-
Heroku登録 -
Twitter APIへ申請し、アクセスキー&シークレットを取得 -
gitとheroku CLIのインストール -
Pythonパッケージの用意 -
HerokuにアプリケーションをPush&Build -
Herokuのリポジトリに環境変数の内容をエクスポート -
Heroku Schedulerを設定 - 動作確認
Herokuとは
Heroku はアプリの構築、提供、監視、スケールに役立つクラウドプラットフォームで、アイデアを出してから運用を開始するまでのプロセスを迅速に進めることが可能です。また、インフラストラクチャの管理の問題からも解放されます。
Salesforceが提供するPaaS(Platform as a Service)とのことで、
ざっくりとアプリケーションを実行するための環境を提供してくれて、アプリ公開に必要な手順を代行してくれるサービスです。
データベースサーバーや、アプリケーションサーバーなどの環境を簡単に利用できるメリット◎
無料枠の範囲内であれば、お金はかからないので便利。
Herokuへ登録
こちらから登録できます。
必要情報を記入したら、[Create Account]しましょう〜
登録後に他要素認証、例えば、Google Authenticatorアプリを使用してログインするなどアカウントの保護をしておくといいと思います。
Twitter APIの申請について
Twitter APIを利用するための、「アクセスキー&シークレット」を取得する方法はこちらを参考ください。
gitとheroku CLIのインストール
Homebrewを事前にインストール
gitとheroku CLIで使います。
# Reference: https://brew.sh/
$ /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
gitのインストール
# Reference: https://git-scm.com/download/mac
$ brew install git
$ git --version # インストール確認
※Xcode Command Line Toolsがインストールされていなければ、インストールするよう促してくれます。
heroku CLIのインストール
# Reference: https://devcenter.heroku.com/ja/articles/heroku-cli#download-and-install
$ brew tap heroku/brew && brew install heroku
$ heroku -v # インストール確認
Pythonパッケージの用意
ディレクトリ構成
.
├── .env
├── app
│ ├── post_tweet.py
│ └── settings.py
├── requirements.txt
└── runtime.txt
プログラムコード
runtime.txt
実行環境として、Python + バージョンを書きます。
python-3.9.4
requirements.txt
Twitterつぶやき用に、tweepyを使います。
Twitter APIのアクセスキー&シークレットを.envから取得するので、python-dotenvを使います。
python-dotenv==0.17.1
tweepy==3.10.0
settings.py
.envファイルから定数に値セット
# coding: UTF-8
import os
from os.path import join, dirname
from dotenv import load_dotenv
dotenv_path = join(dirname(__file__), '.env')
load_dotenv(dotenv_path)
# Twitter API
API_KEY = os.environ.get("API_KEY")
API_SECRET_KEY = os.environ.get("API_SECRET_KEY")
ACCESS_TOKEN = os.environ.get("ACCESS_TOKEN")
ACCESS_TOKEN_SECRET = os.environ.get("ACCESS_TOKEN_SECRET")
post_tweet.py
Auth情報を取得し、apiインスタンス作成。ツイート!
# -*- coding: utf-8 -*-
import tweepy
import settings
if __name__ == '__main__':
# Auth: Set Keys & Secrets for Twitter API
auth = tweepy.OAuthHandler(settings.API_KEY, settings.API_SECRET_KEY)
auth.set_access_token(settings.ACCESS_TOKEN, settings.ACCESS_TOKEN_SECRET)
# Generate Api Instance
api = tweepy.API(auth)
api.update_status('Twitterつぶやき投稿!!')
Herokuでアプリ作成 & Pushするまで
GUIバージョンの手順
[Create New App]
アプリの情報を入力
作成したアプリのSettingsでHeroku git URLを取得
Git ClientでローカルフォルダをGit管理にして、リモートリポジトリと連携
※Git Fork使ってます。
Fileタブから選択
> Remoteで右クリック
Test Connectionするといいですねぇ
Heroku CLIバージョンの手順
※.envファイルをプッシュしないように気をつけてください。
$ cd /Users/username/src/app # Git管理したいディレクトリに移動 ※usernameとappは任意
$ heroku login # herokuにログイン
heroku: Press any key to open up the browser to login or q to exit: # ブラウザが立ち上がる
$ heroku create app # アプリ作成
Creating app...done
https://app.herokuapp.com/ | https://git.heroku.com/app.git # リモートリポジトリ情報
$ git init # /Users/username/src/appをgit管理
$ git remote add origin https://git.heroku.com/app.git # リモートにorigin追加
$ git add . # /Users/username/src/appをステージに追加
$ git commit -m "app first commit" # ローカルでcommit(コメント付き)
$ git push origin master # originにローカルmasterブランチをpush
Herokuのリポジトリに環境変数の内容をエクスポート
.envファイルを用意したら
$ heroku config:push # 環境変数をHerokuに反映
※デフォルトでは、すでにHerokuに設定した環境変数名と.envに書いた環境変数名が同じなら、Heroku側の環境変数の値は上書きされない。上書きする場合は--overwriteオプションつける。
Heroku Schedulerを設定
事前にBillingにクレジットカード情報を登録
Home > Account settings > Billing

Heroku SchedulerのAdd-Onを追加
コマンド
$ heroku addons:add scheduler:standard --app app # アプリ名をappに
Heroku Schedulerの設定
すごくシンプルです。
[Add Job]を押して、キャプチャのように設定。
コマンドは、appディレクトリに移動させてから、post_tweet.pyを実行。
自分は1時間おきにしました。

ただ、かゆいところに手が届かないな〜10分と1時間と1日おきっていう、ざっくり感・・・w
改善策
実際、python-crontabなんかを使えば、HerokuのスケジューラーのAdd-Onを使わなくてもできそうだし、
別の方法では、Procfileを作成して、その中にclock: cd ./app && python post_tweet.pyという記述してルートディレクトリにProcfileをPush。heroku clock=1みたいに指定して実行すれば、cronjobを設定できるみたいだ。
そうすれば、もっと細かく定期実行の間隔をコントロールできるようになるから、
今後、制御してみたいと思います〜。
▼Heroku x Cronjobの参考
ハマったポイント
-
homebrewが古くなっていて、アップデートしたところ、芋づる式で、GNU Compiler Collectionのインストール、Xcode Command Line Toolsのアップデートなどが走り、意外とスムーズには行かなかった。- terminalに出力される情報の確認が大切だった。
-
runtime.txtとrequirements.txtをルート(ディレクトリのトップ)に置いておかないと、push後に走るherokuのビルドでエラーが出た。 - いつもGitクライアントをメインで使っているので、ターミナルでコマンドで
git commitしたら、.envファイルも間違ってコミットしてしまい、一回git rmする必要があった。- 後処理が若干面倒だった。
-
Schedulerでコマンド指定した時に、リポジトリのルートディレクトリからcd ./appしてからじゃないと、自分の記述したPythonファイルの相対パス的に実行ができなかった。- 実行したい
Pythonファイルをルートに置くか、cd ./appの選択肢 -
python ./app/post_tweet.pyはimportの参照エラーが起こった。- なかなか
pythonの参照はむずい。という結論
- なかなか
- 実行したい
まとめと感想
初めて、Herokuと聞いた時に、なにそれヘロヘロやんって思ったけど、
Herokuの名称は、「heroic(英雄的な)」と「haiku(俳句)」からなるかばん語である。 日本語の名詞を含めているのは、Rubyの開発者のまつもとゆきひろに敬意を示してのことである。
参照元:wikipedia
らしい。俳句、、、TwitterのBot量産しろってか?!wwwwwww
また、Heroku自体が、Gitリポジトリだったのが、正直驚いた。
アップしたアプリケーションを定期実行したり、他の用途にも使ったり、可能性は無限大であることを知りました。
いや〜奥が深そうなので、もうすこしHeroicなHaikuの世界に飛び込んでみたいところですねえ!
ちなみに、今回作ったTwitter BOTは、本田圭佑っぽいつぶやきをするBOTですwww
本田AIが圭佑ばりにツイートし続けますwww
悔しくてしょうがなかった。それが夢ってやつです。
— 本田圭佑っぽいBot (@k_honda_bot89) May 24, 2021
参考までにwww
以上、ありがとうございました!







