RubyでTwitterBotをつくってサーバーにアップしたい

ながらくおひさしぶりです。
何をしてたかというと、

誰でもできるTwitter Botの作り方―人気キャラにつぶやかせる

誰でもできるTwitter Botの作り方―人気キャラにつぶやかせる

という本を買ってしまいました。バカです。
どうバカかというと、この本で扱われてる言語がRubyというところが(自分の能力許容量的に)大バカです。
……なんでこの期に及んでまた言語を増やそうとするのか!

『誰でもできるTwitterBotの作り方』について

というところでこの本に付いてざっくりとご説明です。
この本は、

  1. 自分のPCにRubyをインストールし
  2. Windowsのタスクスケジューラやタスクでそれを起動させ
  3. Twitterに予め用意しておいた言葉を自動的にアップする

botを作ることを目的としています。
つまり、botを動かしてる間はずっと自分のPCを起動しっぱなし、ネットにつなぎっぱなしにしておかねばなりません。
あ、自分が起きてる間だけ起動させるbotです、という方向性もないわけじゃないです。管理人とbotラブラブ同棲生活(byヒジリ@スカーレッドライダーゼクス)の演出ですね!


……世迷言はおいといて。
そういうわけで、この本を参考に出来上がるのはあくまで自分のPCをTwitterBotサーバとして使用するBotです。
ここが大事。

つくったRubyスクリプトをサーバで使用するために その1

私が普段いろいろアップして使ってるのはさくらインターネットレンタルサーバのスタンダードプランです。
スタンダードではサーバにRubyがインストールされていますので、一見本を参考に作ったスクリプトが使えるような気がします。が、できせん。
なぜなら本のスクリプトは全て「twitter_oauth」というライブラリを使用しており、このライブラリがさくらインターネットのサーバにはインストールされていないからです(2010年7月現在)。
……逆に言えば、必要なライブラリもRubyスクリプトと一緒にアップすれば使えるはず。


というわけでこういうことをしました。

  1. スクリプトに出てくる「require 'rubygems'」という1文は#付けてコメントアウト
  2. コマンドプロンプトで「gem fetch twitter_oauth」と入力して「twitter_oauth.gem」というライブラリをダウンロード。(gemってのがよく分からないんですが、こう入力すると同名のライブラリをダウンロードしてくれるそうです)
  3. twitter_oauth.gemの拡張子を「.tar」に変更して解凍。→「twitter_oauth-0.4.2」フォルダができる(数字は違うかもしれません)。
  4. 解凍した中からさらに「data.tar.gz」というファイルを探し、これを解凍。→「data」フォルダができる。
  5. 解凍した「data」フォルダ内から「lib」というフォルダを探し、その中にある「twitter_oauth.rb」ファイルと「twitter_oauth」フォルダを使用したいRubyスクリプトと同じ所に貼り付ける。

以下、「oauth」「json」「mime-types」各ライブラリも2〜4を繰り返してダウンロードし、貼り付ける。


これでとりあえずPC上では動きました!
……バカでしょー?

さくらインターネットRubyスクリプトを使うには

以下のサイト様を全面的に参考にさせていただきました。
http://morio-dev.seesaa.net/article/134038083.html
まずは一つめに挙げられている、「Rubyスクリプトの拡張子を.rbから.cgiに変更してパーミッションを755に」する方法でやってみました。
あ、拡張子を変更したりパーミッション変更したりするスクリプト自作したbotスクリプトだけです。

つくったRubyスクリプトをサーバで使用するために その2

その1とは逆のアプローチ。SSHでサーバ側に必要なライブラリをインストールする方法です。
さくらインターネットはスタンダードプラン以上でTELNETSSHを使えます。そうするとサーバ側のRubyに入ってないライブラリもユーザーディレクトリ?にインストールして使うことができるそうです。
使用したSSHクライアントはこちら↓
http://yebisuya.dip.jp/Software/PuTTY/
参考にしたのはこちら↓
さくらのレンタルサーバーに RubyGems をインストールする手順 - Google App Engine+Pythonで脱プログラミング初心者を目指す日記
なおブログ記事では途中でviエディタによる編集がありますが、私がインストールした1.3.7では

set path = (/sbin /bin /usr/sbin /usr/bin /usr/games /usr/local/sbin /usr/local/bin /usr/X11R6/bin)

set path = (/sbin /bin /usr/sbin /usr/bin /usr/games /usr/local/sbin /usr/local/bin /usr/X11R6/bin /home/User/bin)

の書き換えは必要ありませんでした。なんか、$HOMEとかなってました。

参考にした記事のとおりにやってけば大体間違いなくGEMがインストールできるんですが、私がやったときは途中でエラーコード出て止まりました。GEMのインストール場所はユーザーディレクトリのなかの一箇所、と決めてたはずなのに、勝手にルートにインストールしに行って怒られてました。そりゃ怒られるわ。
で、そのエラーコードが出たときに参考にしたのがこちら↓
さくらサーバーに gem をインストールする際に「chown/chgrp: Operation not permitted」とエラーが出た場合 - make world

よく使用したUNIXコマンド

インストールにあたっては以下のコマンドをよくうちました。

pwd 現在のディレクトリの場所を絶対パスで表示する
ls ディレクトリの情報を表示する。ようするにそのディレクトリになんというファイルやサブディレクトリがあるかを表示する。どこのディレクトリか指定してない時はカレントディレクトリの情報を表示。
cd チェンジディレクトリ。ディレクトリの移動。

超基本です。基本だけど、こうやってメモしておかないと忘れてしまう。

twitter_oauthライブラリも

GEMがインストールできたら、次はtwitter_oauthをインストール。こういう手順自体はPCにインストールした時と変わりません。

%gem install twitter_oauth

でふつーにインストールしてくれました。……たしか。ちょっとこのへん記憶が曖昧です。


ここまでくれば、あとはPCのコマンドプロンプトからの実行と同じように、「ruby test.rb」とたたくと実行してくれます。
cronで叩く方法はまた今度探します。まずはスクリプト書かないと。

文字コード

ここで一つ、メモ。
さくらインターネットのサーバーはEUCコードです。ので、スクリプトファイルはEUCで作るのがよいようです。「ruby -Ks スクリプト名」とやらなくても文字化けしないでちゃんと動いてくれました。ただPCでテストする時(=コマンドプロンプトで動かす時)はShift_JISでないといけないので、サーバーにアップする時にEUCに変換するのがいいかも。