RubyでTwitter Botを作ってHerokuで動かす
Web APIの勉強を兼ねて、Sinatraを使ってHerokuで動かすTwitter Botを作りました。
基本的にこちらの記事の丸写しですが、Ruby 2.3.0とSinatra 1.4.7にあわせて微修正してます。
目次
- 目次
- Twitter APIを使うための準備
- Botアプリ作成の事前作業
- Twitter Botのコードを書く
- Herokuにデプロイする
- Heroku SchedulerでBotを自動で動かす
- 参考記事
- 開発環境
Twitter APIを使うための準備
BotがつぶやくためのTwitterアカウント*1を用意し、BotがTwitterに接続するために必要となるコンシュマーキー*2やアクセストークン*3を準備します。
TwitterにBotを登録
TwitterのDeveloperサイトにサインインして必要事項を登録し、Twitter APIを利用するアプリ*4を作成します。
項目 | 登録内容 | |
---|---|---|
Name | b0npubot | 適当にアプリに名前を付ける |
Description | チャットボットを作りました | 適当にアプリの説明を書く |
Website | https://twitter.com/b0npu | とりあえずTwitterアカウントのURL*5を記述 |
Callback URL | 必須項目ではなかったので空白にしました |
Botの接続に必要なアクセストークンを取得
Twitterに登録したアプリケーションのKeys and Access Tokens
の項目にConsumer Key
とConsumer Secret
は記載されているので、Create my access token
からAccess Token
とAccess Token Secret
を生成します。
Botのアクセスレベルの確認
BotはTwitter につぶやきますので、
Access level
の項目がRead and write
になっていることを確認*6しておきます。
Botアプリ作成の事前作業
Rubyで作ったWebアプリをHeorkuで動かすためには、GitリポジトリとGemfileが必要になるので、準備します。
なお、Gitの使い方とHerokuの使い方はRailsチュートリアルの第2版を参考にしています。
また、Rubyの開発環境はこちらの記事を参考に構築しています。
Gitリポジトリのセットアップ
適当なディレクトリを作成して、ディレクトリの中に移動します。
~ $mkdir twitterbot ~ $cd twitterbot ~/twitterbot
git init
コマンドで、Gitリポジトリとしてセットアップ*7します。
~/twitterbot $git init Initialized empty Git repository in /Users/b0npu/twitterbot/.git/
Gemfileを作成
HerokuではGemfileを使ってgem*8を管理するそうなので、アプリケーションディレクトリの直下にGemfileを作成し、Botアプリで利用するgemを記述します。
~/twitterbot $touch Gemfile ~/twitterbot $vim Gemfile
Twitter APIを使うためのgemtwitter
と、WebフレームワークのSinatraを使うためのgemsinatra
を記述*9します。
source 'https://rubygems.org' # gemを探しに行く場所 ruby '2.3.0' # rubyのバージョンを指定 gem 'sinatra', '1.4.7' gem 'twitter', '5.16.0'
bundle install
コマンドで、Gemfileに記述したgemをインストールします。
~/twitterbot
$bundle install
とりあえずこの辺でgit commit
して、Gitリポジトリに作業内容を保存します。
~/twitterbot $git add -A ~/twitterbot $git commit -m "First commmit"
Twitter Botのコードを書く
Webアプリのメインファイルになるapp.rb
とBotの本体を記述するtweet.rb
に加え、Herokuで使う設定ファイルのconfig.ru
を作成し、コードを記述します。
~/twitterbot
$touch app.rb tweet.rb config.ru
ディレクトリの構成
~/twitterbot
|- app.rb // Webアプリのメインファイル
|- tweet.rb // Twitter Botの本体
|- config.ru // Herokuで使うWebアプリの設定ファイル
|- Gemfile // 使用するgemを管理するファイル
|- Gemfile.lock // インストールしたgemのバージョンを管理するファイル
|- .git // Gitリポジトリの管理フォルダ
tweet.rb
@text
に格納した文字列を、Twitter APIのコンシュマーキーやアクセストークンを使用してTwitterにつぶやきます。
require 'twitter' class Tweet def initialize @text = ["ちゃうねん", "せやないねん", "どないやねん", "ええねん", "これや!!", "いけるで!!", "こっからや!!"] @client = Twitter::REST::Client.new do |config| config.consumer_key = "YOUR_CONSUMER_KEY" config.consumer_secret = "YOUR_CONSUMER_SECRET" config.access_token = "YOUR_ACCESS_TOKEN" config.access_token_secret = "YOUR_ACCESS_SECRET" end end def random_tweet tweet = @text[rand(@text.length)] update(tweet) end private def update(tweet) begin @client.update(tweet) rescue => e nil #TODO end end end # random_tweetを実行する if __FILE__ == $0 Tweet.new.random_tweet end
tweet.rb
だけでもTwitter APIを使ってつぶやけるようなので、確認してみます。
~/twitterbot
$ruby tweet.rb
コードやアクセストークンに間違いが無ければ、Twitterで新着メッセージが確認できます。
app.rb
Twitter BotをHerokuで動かすために、SinatraでWebアプリにします。
require 'sinatra' require_relative 'tweet.rb' # URL'/'でアクセス get '/' do 'under construction' end # URL'/random_tweet'でアクセス get '/random_tweet' do Tweet.new.random_tweet end
app.rb
を動かして、Webサーバを起動させます。
~/twitterbot $ruby app.rb [2016-06-11 16:04:28] INFO WEBrick 1.3.1 [2016-06-11 16:04:28] INFO ruby 2.3.0 (2015-12-25) [x86_64-darwin15] == Sinatra (v1.4.7) has taken the stage on 4567 for development with backup from WEBrick [2016-06-11 16:04:28] INFO WEBrick::HTTPServer#start: pid=28495 port=4567
Webサーバが起動したら、ブラウザからhttp://localhost:4567/random_tweet
を入力するか、
curl
コマンドでhttp://localhost:4567/random_tweet
に接続してみます。
$curl http://localhost:4567/random_tweet Please check your tweet%
app.rb
のコードに間違いが無ければ、tweet.rb
の動作確認時と同様に新着メッセージが確認できます。
config.ru
HerokuでSinatraアプリとして動かすため、config.ru
にSinatraアプリである旨を記述します。
require_relative 'app.rb' run Sinatra::Application
Herokuにデプロイする
Twitter BotをHerokuで動かすために、Gitを使用してHerokuにデプロイします。
Gitリポジトリにコミット
Herokuにデプロイする前に作業内容を保存しておく必要がありますので、git commit
します。
~/twitterbot $git add -A ~/twitterbot $git commit -m "Add tweet bot"
Herokuにアプリのリポジトリを作成
heroku create
で、HerokuにTwitter Botアプリのリポジトリを作成します。
~/twitterbot
$heroku create b0npubot
Herokuにリポジトリを作成したら、BotアプリのGitリポジトリをHerokuにpush
します。
~/twitterbot
$git push heroku master
HerokuでTwitter Botの動作確認
heroku open
で、Herokuに作成されたWebサイトを開きます。
~/twitterbot
$heroku open
app.rb
に記述したようにunder construction
の文字が表示されます。
Herokuに作成されたWebサイトのURLにrandom_tweet
を加えて、接続します。
Twiiterに新着メッセージが表示されていれば、万々歳です。
動作確認の機能を削除
HerokuにデプロイしたTwitter Botの動作確認ができたら、念のため、app.rb
を編集して動作確認機能を削除しておきます。
require 'sinatra' require_relative 'tweet.rb' get '/' do 'under construction' end get '/random_tweet' do # Tweet.new.random_tweet # 'Please check your tweet' 'Closed' end
app.rb
の変更をgit commit
でGitリポジトリに保存し、Herokuにpush
して反映させます。
~/twitterbot $git commit -am "Remove manual tweet" ~/twitterbot $git push heroku master
random_tweet
のURLに接続して、変更が反映されている事を確認します。
Heroku SchedulerでBotを自動で動かす
HerokuでTwitter Botが動作する事を確認したら、Botらしくするために、Scheduler
アドオン*10を使って自動で動くようにします。
~/twitterbot
$heroku addons:create scheduler:standard
Scheduler
アドオンをTwitter Botアプリに加えたら、Scheduler
の設定画面を開きます。
~/twitterbot
$heroku addons:open scheduler
コマンドの欄にbundle exec ruby tweet.rb
を入力し、実行する頻度を設定して保存します。
Scheduler
の設定した後は、無課金で使えるリソースが使い果たされない事を祈ります(´・ω・`)
参考記事
Twitter Botに関しては、こちらの記事を参考にさせていただきました。
- Ruby素人でもできた!Herokuで動かすTwitter Bot! - Qiita
- Herokuを使って1日1回名言をツイートするTwitter Botの作り方 - アインシュタインの電話番号
- Rubyで書いたTwitterのbotをRaspberry Piで動かす - DesignAssembler
RubyのWebフレームワークに関しては、こちらの記事を参考にさせていただきました。