30分で誰でも作れるTwitter Bot開発・運用手順 – Ruby Twitter bot

ツイッター

2013年12月3日: TwitterBot開発について最新の記事を更新しました。
 ⇒ 3分でスッキリ! Oauth 1.0図解とRuby Twitter bot開発

はじめに

たまたま仕事でTwitter Botに関連する開発依頼があったので調査・開発手順をまとめてました。
内容としては最低限必要なサーバー環境の構築とRubyを使ったTwitter Bot作成、そして定期実行処理の設定といった流れです。

  • サーバー構築からTwitter Botの開発までほとんどコピペでできると思うのでサーバー・プログラミングの知識がない方でも頑張ればできると思います。
  • Twitter Bot開発はウェブに関する各技術に少しづつ触れる事ができて、規模が小さいわりにはちょっとした達成感も得られるのでサーバーやプログラミングの勉強を始めてみたいという方には最適だと思います。
  • 今回はTwitter Botの開発言語にはRubyを、レンタルサーバーには仮想専用サーバー(VPS)を利用しています。
    Rubyは感覚的に書くことができるので初めてスクリプト言語を覚えたいという人には良いかもしれません。
  • 30分で誰でも作れる書きましたが、多少馴れている人であればサーバーの申し込みから始めても30分かからないと思います。
  • (もし30分以上掛かってしまってもご容赦ください・・)

また、今回はTwitter Bot作成までに最低限必要なもののみ記述しているので、サーバーのその他の設定に関しては省略している箇所もあるのでご了承ください。

【 対象者 】
・Twitter Botをとにかく開発したみたい方
・Rubyはある程度わかるんだけどサーバー周りも少し触ってみたいなと思っている方
・Rubyもサーバーも覚えてはみたいけど何から手をつけていいかわからない方
・自分以外つぶやいてくれるフォロワーが一人もいない方。
・30分間暇なんですけど~って方
などなど

目次

※1の開発環境が既に整っている人は5から初めてください。

1. 開発環境
2. 作業の前に必要な物
3. 仮想専用サーバー(VPS)をレンタルしよう
4. サーバー開発環境構築
5. Twitterアカウントを取得
6. Twitterアプリケーション登録申請
  → 「Consumer key」と「Consumer secret」を取得します。
7. Twitter OAuth登録
  → 「OAuth token」と「OAuth secret」を取得します。
8. Twitter Bot作成
9. Twitter Botの定期実行を設定

おまけ1. vimエディタの基本コマンド

1. 開発環境

今回利用した開発環境です。

【 開発言語 】 
Ruby 1.8.7
 → まつもと ゆきひろが開発したオブジェクト指向スクリプト言語

【 OS 】 
CentOS 5
 → ほとんどのVPSサービスで採用されているRPM系Linux

【 Webサーバー 】 
Apache 2.2.3
 → Twitter OAuthを登録する際に使います。

【 その他 】
RubyGem 1.3.7
 → Rubyのパッケージ管理システム。
 → これを使ってRuby用Twitterライブラリ「TwitterGem」を取得します。

TwitterGem 1.1.1
 → Ruby用Twitterライブラリ
 → Twitter処理が簡単に行う事できます。
 → http://twitter.rubyforge.org/

Cron
 → プログラムを定期的に実行できるLinuxコマンド。
 → これを使ってTwitter Botで定期的につぶやくように設定します。

2. 作業の前に必要な物

【 レンタルサーバー 】
 → Twitter Botを動かすためのサーバー。これがないと何もできません。
 → 共有サーバーだとRubyのバージョンが古かったりスクリプトの定期処理ができなかったりするので自由度の高い仮想専用サーバー(VPS)を利用します。
 → 今回利用したのは国内最安月額490円のServersMan@VPS
 → 自前でサーバー持っている人はそれでもいいと思います。

【 メールアカウント 】
 → Twitterアカウント取得用に。。
 → GmailとかYahooメールとかメールができればなんでもいいです。

【 Telnet/SSH クライアントソフト 】
 → これを使ってサーバーにアクセスして開発します。
 → Telnet/SSH クライアントのフリーソフト「Putty」を使用します。
 → ダウンロードはこちら ([最新版]→[インストーラー]をクリック)

3. 仮想専用サーバー(VPS)をレンタルしよう

仮想専用サーバー(VPS)と書きましたが、環境が揃っていれば普段使い慣れているサーバーを使えばいいと思います。
仮想専用サーバー(VPS)を選んだ理由としては以下が挙げられます。
・ 低価格で高い自由度である。
・ 最新バージョンのRubyが使える (共有サーバーの場合はかなり古かったりする)
・ プログラムを定期的に実行できるcronコマンドが使える (ほとんどの共有サーバーでは使えない)
・ サーバー初期化が容易である。 (途中ではまったら初期化してみる。あとはサーバーを1から勉強したい人にはオススメ)

ちなみに今回は「ServersMan@VPS」(月額490円~)を借りてTwitter Botの開発をしていますが、他VPSでは、さくらのVPSもおすすめです。どちらでもほぼ同じ手順でBot構築できると思います。

スペック詳細、他の仮想環境サーバー(VPS)サービスが気になる方は下記参照。
→ さくらインターネット@VPSとServersMan@VPSを徹底比較

もしServersManを利用される場合は登録時にいくつか選択する箇所があると思いますので、以下のように選択してください。
他は登録の指示に従って進んでいれば登録完了できると思います。

【 プラン 】
 → 「Entry」「Standard」「Pro」とありますが、どのプランでもOKです。
 → 今後のサーバー利用用途を考慮して選択すればよいと思います。

【 選択OS 】
 → 「CentOS」を選択します。

【 ソフトウェアパッケージを選択 】
 → どのパッケージでも大丈夫ですが、今回は「ディスクパッケージ」を選択
 ※ もしPHPを他で使う予定がある場合は「ホームページパッケージ」を選択すればいいと思います。

4. サーバー開発環境構築

ここではサーバー環境の構築をします。
おおまかな流れとしてはPuttyを使ってサーバーにアクセスして下記3点のインストールを行います。
下記(a)から(i)まで作業は一見長そうですが3分程度で終わると思います。
・Ruby1.8.7
・RubyGem 1.3.7
・TwitterGem 1.1.1

a. Puttyをダウンロード&インストールします。

「Putty」からputty-0.60-jp20070603.zipをダウンロード。

b. putty-0.60-jp20070603.zipを解凍します。

c. 解凍後にでてくるフォルダ内にある「puttyjp.exe」をダブルクリックします。

Puttyアイコン[画像その1]

d. Puttyでサーバーにアクセス

まず、ServersMan@VPS登録完了後に送られてくるメールに記載されている「IPアドレス(IPv4)」「SSH用ポート番号」を確認します。
Puttyを起動すると下記画像のようなウインドウが開くと思います。
※Putty セキュリティ警告がでできたら「はい」を押して進みます。
「IPアドレス(IPv4)」「SSH用ポート番号」をそれぞれ「ホスト名(またはIPアドレス)」「ポート(P)」に入力して「開く」ボタンを押します。

Putty画面[画像その2]

e. サーバーにログインします。

サーバーアクセスに成功する「ユーザー名」「パスワード」を聞いてきます。([画像その3]参照)
下記のように入力してアクセスしてください。
「ユーザー名」「パスワード」に関してはServersMan登録完了後に送られてくるメール内にある「rootユーザID」「rootユーザパスワード」を参照してください。

PuttyログインからRubyのインストールまで[画像その3]

f. 必要なライブラリをインストールします。

Putty上で下記のコマンドを入力します。 ([画像その3]参照)

yum install -y gcc

※補足
「yum」はCentOSのパッケージ管理用コマンドです。yumを使って様々にパッケージをインストールする事ができます。
今回は「yum」コマンドを使って「gcc」というコンパイラをインストールしました。
「gcc」はrubyのインストールに必要なので先にいれておきます。

g. Rubyをダウンロード&インストールします。

Putty上で下記のコマンドを入力します。 ([画像その3]参照)

# 「sources」ディレクトリを作成します。
$ mkdir ~/sources
# 「sources」ディレクトリを移動します。
$ cd ~/sources
# Rubyソースコードをダウンロードします。
$ wget ftp://ftp.ruby-lang.org/pub/ruby/1.8/ruby-1.8.7-p330.zip
# ダウンロードしてきたRubyソースコードを解凍します。
$ unzip ruby-1.8.7-p330.zip
# 解凍先へ移動します。
$ cd ruby-1.8.7-p330
# コンパイルします。
$ ./configure
$ make
# インストールします。
$ make install
# これでRubyのインストール完了です。

※補足
各Linuxコマンド簡易説明
「mkdir」 – フォルダを作成します。
「cd」 – ディレクリトを移動します。
「wget」 – ウェブ上からファイルをダウンロードします。

h. RubyGemをダウンロード&インストールします。

gと同じように下記のコマンドを入力していきます。
まずRubyGme本体をインストールする前にRubyで圧縮ファイルを操作するためのライブラリ「zlib」を有効にしてあげる必要があります。

# Rubyのzlibライブラリをインストールする
$ yum install -y zlib-devel
# zlibを有効にする
$ cd ~/sources/ruby-1.8.7-p330/ext/zlib
$ ruby extconf.rb
$ make
$ make install
# 一旦「sources」ディレクトリを戻ります。
$ cd ~/sources
# RubyGemをダウンロードします。
$ wget http://rubyforge.org/frs/download.php/70697/rubygems-1.3.7.zip
# ダウンロードしたRubyGemを解凍します。
$ unzip rubygems-1.3.7.zip
# 解凍したフォルダに移動します。
$ cd rubygems-1.3.7
# rubygemをインストールします。
$ ruby setup.rb
# インストールできてるか確認します。
$ gem –version
# 1.3.7と表示されていればRubyGemインストール完了です。

i. TwitterGemをインストールします。

下記のコマンドを入力してます。[画像その4]のように表示されればインストール完了です。

$ gem install twitter

[画像その4]

5. Twitterアカウントを取得

下記サイトからTwitterアカウントを登録してください。
※既にTwitterアカウントを持っている人は飛ばしてください。

6. Twitterアプリケーション登録申請

Twitterにログイン後、下記アドレスからTwitterアプリケーション登録を行ってください。
Twitterアプリケーション登録

[画像その5]

各入力フォーム内容は以下の通りです。

[アプリケーションのアイコン] 入力しなくてもOK
[アプリケーション名] あなたの任意のTwitter Bot名
[アプリケーションの説明] あなたのTwitter Botの説明
[アプリケーションのウェブサイトURL] あなたのサイト / Twitterの自分のページでも可
[お知らせ機能] 空白でOK
[所属会社/団体] 空白でOK
[サイト] 空白でOK
[あなたの招待状] クライアントアプリケーションを選択
[コールバックURL] あなたのサイト・ブログのURL
[Default Access type] Read & Writeを選択
[Twitterでログインする] チェックをつけます。
[認証の文字]表示されているのを表示してください。

登録完了後、以下のように表示されます。
「Consumer key」と「Consumer secret」は必要になるのでメモしておきます。

7. Twitter OAuth登録

OAuthとは外部アプリケーションの認証システムです。
OAuthとはアカウントへのアクセスをより安全に行うための認証システムです。
OAuth認証を行うためには先ほど取得した「Consumer key」とは別に「OAuth key」を取得する必要があるのですが、
取得には少し手順を踏む必要があります。 (OAuthについて詳しく知りたい方はコチラ)
以下、その手順になります。

まず必要なライブラリをインストールします。

# RubyGemのOAuth用ライブラリをインストールする
$ gem install oauth
# opensslライブラリをインストール
$ yum install openssl-devel
# Rubyのopensslライブラリを有効にする
$ cd ~/sources/ruby-1.8.7-p330/ext/openssl
$ ruby extconf.rb
$ make
$ make install

次にOAuthキーを取得します。
Putty上でirbコマンドを使用します。

$ irb
irb(main):001:0> require ‘rubygems’
=> true
irb(main):002:0> require ‘oauth’
=> true
irb(main):003:0> ConsumerKey = “あなたの「ConsumerKey」を入れてください”
=> “ConsumerKey”
irb(main):004:0> ConsumerKeySecret = “あなたの「ConsumerKeySecret」を入れてください”
=> “ConsumerKeySecret”
irb(main):005:0> consumer = OAuth::Consumer.new(ConsumerKey, ConsumerKeySecret, :site => “http://twitter.com”)
=> #“/oauth/request_token”, :authorize_path=>”/oauth/authorize”, :site=>”http://twitter.com”,:access_token_path=>”/oauth/access_token”,:oauth_version=>”1.0″, :scheme=>:header, :signature_method=>”HMAC-SHA1″, :proxy=>nil, :http_method=>:post}>
irb(main):006:0> request_token = consumer.get_request_token
=> #“**********************”, “oauth_callback_confirmed”=>”true”, “oauth_token_secret”=>”**************************************”, “oauth_token”=>”************************************”,:oauth_callback_confirmed=>”true”,:oauth_token=>”****************************”},@consumer=#, @http_method=:post, @secret=”ConsumerKeySecret”, @options={:request_token_path=>”/oauth/request_token”, :authorize_path=>”/oauth/authorize”, :site=>”http://twitter.com”, :access_token_path=>”/oauth/access_token”,:oauth_version=>”1.0″,:scheme=>:header, :signature_method=>”HMAC-SHA1″, :proxy=>nil, :http_method=>:post}>, @secret=”**********************************************”>
irb(main):007:0> request_token.authorize_url
=> “http://twitter.com/oauth/authorize?oauth_token=************************************”
↑に表示されたURLにブラウザからアクセスします。[画像その7]参照
irb(main):008:0>

下記の画面がでたら「許可する」ボタンを押します。

[画像その7]

下記のように暗証番号が表示されます。

[画像その8]

暗証番号がわかったらPuttyのirbに戻って以下のコマンドを入力します。
「OAuthKey」と「OAuthKeySecert」を取得できます。

irb(main):013:0> access_token = request_token.get_access_token(:oauth_verifier => ‘あなたの暗証番号’)
=> #“*************************************”,”oauth_token_secret”=>”*********************************”,:user_id=>”*****************”,:screen_name=>”***************”,”user_id”=>”*******************”,”oauth_token”=>”**********************************”,”screen_name”=>”***************”,:oauth_token=>”***************************”},@consumer=#, @http_method=:post, @secret=”********************************”, @options={:request_token_path=>”/oauth/request_token”, :authorize_path=>”/oauth/authorize”, :site=>”http://twitter.com”, :access_token_path=>”/oauth/access_token”,:oauth_version=>”1.0″, :scheme=>:header, :signature_method=>”HMAC-SHA1″, :proxy=>nil, :http_method=>:post}>, @secret=”*********************************”>
irb(main):014:0> puts access_token.token
****************************************** ← あなたのOAuthTokenが表示されます。
=> nil
irb(main):015:0> puts access_token.secret
****************************************** ← あなたのOAuthSecretが表示されます。
=> nil

これで「ConsumerKey」「ConsumerKey」「OAuthToken」「OAuthSecret」の4つのキーが揃ったと思います。
次はようやくTwitter Botの作成になります。

8. Twitter Bot作成

Twitter Botのrubyスクリプトを作成します。
作成するといってもこのサイトに置いてある雛型をダウンロードして少し書きかえるだけです。
下記コマンドを順に実行してみてください。

# ルートディレクトリに戻ります。
$ cd ~/
# Twitter Botの雛型をダウンロードします。
$ wget http://b.ruyaka.com/lab/ruby_gem_twitter/tweet.rb
# ダウンロードしたtweet.rbの一部を置換コマンドsedを使って書き換えます。
# 下記の「あなたの・・・・」の部分を置き換えてから実行してください。
$ sed -i -e "s/YOUR_CONSUMER_KEY/あなたのCONSUMER_KEY/g" tweet.rb
$ sed -i -e "s/YOUR_CONSUMER_SECRET/あなたのCONSUMER_SECRET/g" tweet.rb
$ sed -i -e "s/YOUR_OAUTH_TOEKN/あなたのOAUTH_TOEKN/g" tweet.rb
$ sed -i -e "s/YOUR_TOEKN_SECRET/あなたのTOEKN_SECRET/g" tweet.rb
# catコマンドでファイルの中身を確認します。
$ cat tweet.rb


※補足 sedコマンドについて
sedコマンドはファイル内の文字列を置換することができるコマンドになります。
コマンドのフォーマットは以下のようになります。
sed -i -e “s/書き変える文字列/書き変えたい文字列/” ファイル名
つまり先ほどの「sed -i -e “s/YOUR_CONSUMER_KEY/あなたのCONSUMER_KEY/” tweet.rb」の場合は、
tweet.rbファイル内の「YOUR_CONSUMER_KEY」という文字列を「あなたのCONSUMER_KEY」に置換するという事になります。

ちなみにダウンロードしたtweet.rbの中身は以下のようになります。(FTPなど使ってアップロードしてもOKです)

require 'rubygems'
require 'twitter'

CONSUMER_KEY = "YOUR_CONSUMER_KEY"
CONSUMER_SECRET = "YOUR_CONSUMER_SECRET"
OAUTH_TOEKN = "YOUR_OAUTH_TOEKN"
OAUTH_TOEKN_SECRET = "YOUR_OAUTH_TOEKN_SECRET"

Twitter.configure do |config|
  config.consumer_key       = CONSUMER_KEY
  config.consumer_secret    = CONSUMER_SECRET
  config.oauth_token        = OAUTH_TOEKN
  config.oauth_token_secret = OAUTH_TOEKN_SECRET
end

Twitter.update("TwitterGemテストなう")

tweet.rbを実行してみましょう。
下記コマンドを実行後にツイッターのあなたのページに「TwitterGemテストなう」とつぶやかれていれば成功です。

# tweet.rbを実行
$ruby tweet.rb

9. Twitter Botの定期実行を設定

定期的につぶやくように設定しましょう。
定期的に処理を実行させるためには「crontab」コマンドを使用します。
ただ、一点注意点としてcrontabを編集する際にvimというエディタを使用することなるのですが、
このvimエディタはだいぶ癖があり、ある程度コマンドを覚える必要があります。
最低限のvimコマンドをあまけ1に記しました。vimがわからない人は参考にしてみてください。

# crontabの中身を編集します。
$ crontab -e
# 下記一行をコピペします。

10 10 * * * /usr/local/bin/ruby /root/tweet.rb # 毎日10時10分になったらtweet.rbを実行する

# crontabの中身を参照します。コピペした内容が表示されていればOKです。
$ crontab -l
10 10 * * * /usr/local/bin/ruby /root/tweet.rb

これで毎日10時10分につぶやかれていれば成功です。

おまけ1. vimコマンド一覧

vimが初めての方が一番手こずるのがおそらく「コマンドモード」と「入力モード」の存在でしょうか。
vimの場合は例えば、コピー、ペースト、ファイルの保存、ファイルを閉じるなどは全て「コマンドモード」にしてから行います。
文字列を入力する場合は「入力モードに」変更してあげる必要があります。
vimにはかなりの数のコマンドがありますが、今回最低限必要になるであろうコマンドだけ記載します。

【 モードの切り替え用コマンド 】

ESC(エスケープキー) コマンドモードに変更します。
a (「a]キー) 入力モードに変更します。

【 ファイルの操作用コマンド 】
※必ずESCキーを押してコマンドモードにしてから入力してください。

:w (コロン + 「w」キー) ファイルを保存します。
:q (コロン + 「q」キー) ファイルの編集を終了します。
u (「u」キー) 一つ前の状態に戻します。
Ctrl + r (コントロールキー + 「r」キー) 一つ前の状態に戻します。

「9. Twitter Botの定期実行を設定」のcrontabを編集する際にvimを使う事になると思いますが、
その場合は大まかなコマンドの流れとしては以下のようになります。

「crontab -e」 実行後。
1. マウスを使って「10 10 * * * /usr/local/bin/ruby /root/tweet.rb」をコピーします。
2. 「a」キーを押して入力モードに変更します。
3. マウス右クリックを押して1でコピーした部分をペーストします。
4. ESCキーでコマンドモードに変更します。
5. 「:w」を押してファイルを保存します。
6. 「:q」を押してファイルの編集を終了します。
少し回りくどく感じるかもしれませんがこのような流れになります。

課題

シンプルなTwitter botの作成ができたと思います。
ただ、今回は最低限必要な基本的な部分のみなので、もっと本格的なTwitter botを作成するにはつぶやく内容やタイミングを工夫してあげる必要があります。
このTwitter bot作成の流れで間違い等ございましたらご指摘いただけると嬉しいです。