PerlとRubyがくしゅう帳

プログラミングの勉強会の参加記録や学んだことなど。 twitter ID : @tomcha_です。 最近は主にPerl関連の勉強会やコミュニティに参加しています。

タグ:perl

ある日、リスペクトしている、とある偉いperlハッカー先生がツイッターでつぶやいていた。

twitter

perl入学式で、無いものはcpanモジュールを駆使して自分で作れば良いと教わっていたので、自分でtwitterbotを作って見ることにした。

・・・何ヶ月か前に勉強会perl鍋に参加した時に作り、ローカル環境で実験してうまく動いてからずっと放置していたので、きちんとスクリプトを仕上げてさくらvpsのサーバーに上げて自動実行させようとしたら色々ハマッてしまったので、その解決策を備忘録として書いておく。


twitterbotのスクリプトは、cpanのNet::Twitter::Lite::WithAPIv1_1モジュールを使った。TwitterAPIの利用登録から実際の使い方は@yusukebeさんのブログ記事「イカ娘でTwitter OAuth認証」を参考にさせていただいた。


作ったtwitterbotは、

@で話しかけられると定型文を返すというbotなので、perlのスクリプトでは、@で話しかけれられているかを取得->話しかけられていれば、@で返す

の部分を作り、その.plファイルをcronという定期的にスクリプトを実行してくれるデーモンで5分毎に実行させるような仕組みにした。


cronの設定は、crontab -eというコマンドで以下の書式で設定ファイルを書く。

PATH=/home/ユーザー/perl5/perlbrew/bin:/home/ユーザー/perl5/perlbrew/perls/perl-5.16.3/bin

*/5 * * * * /home/ユーザー/ディレクトリ/スクリプト.pl


注意点は、PATHで使うperlの位置を設定しておかないと、デフォルトで入っているシステムのperlで実行しようとしてしまうので、perlbrwでインストールした新しいperlを使うには、PATHを設定する。

で、いざcronを実行してみると、5分毎にスクリプトの実行を試みているが、エラーが帰ってきてスクリプトが動いていない。エラーの内容は、

Can't locate JSON.pm in @INC (@INC contains: ・・・

cpanモジュールが然るべき位置に無いと怒られた。


cpanm -reinstallコマンドでインストールしなおしてもエラーは変わらず。

エラーの出てるcpanモジュールのuse宣言の順番を最後に回すと、一番最初にuseしているモジュール名で同様のCan't locate エラーが出た。どうも全てのcpanモジュールが読み込めてない様だ。


色々ググってこちらのブログ記事「PerlによるTwitter bot制作」を参考にさせていただいた。

どうやら、crontabで設定したPATHは、使用するperlのディレクトリ位置情報のみで、インストール済みのcpanモジュールのディレクトリ位置情報は別の模様。cpanモジュールの位置は、フルパスで指定しなければならない様だ。


cpanモジュールの絶対パスをスクリプトの最初に記述、FindBinというcpanモジュールで、現在実行している.plスクリプトのディレクトリ位置を取得し、スクリプト中に出てくる設定ファイル等のディレクトリ位置を読み込めるように設定しなおしたら、twitterbotのスクリプトは見事動いた。


完成したbotはこちら。何かやらかしてしまった時に、@dakarabot にメンションを飛ばすと反応します。


twotterbotを作ってみて、困った点

  • twitterのAPIの制限で、同じツイートは短時間の間にツイートできない。(スパム対策か?)だから、スペースをかましたダミーのツイートとかをいくつか作って誤魔化してみた。だから、大量に@が飛んでくると、多分動かない。
  • 自分には絵心が全く無いので、twitter用アイコンの作成ができませんでした。なので、偉いperlハッカー先生の趣向を尊重してみた。

kansaipmは、昨日のお酒が抜けるまでblogを書くまでがkansaipmとのお約束通り、感想を書いてみます。

トークの詳しい内容の解説とか、難しい部分は他の方のblogにお任せして、自分なりの感想を書いてみました。

  • 小規模チームで仕事を回すコツ「みんながリーダーシップをとる」「打ち合わせはダラダラしない」「最初は意見を否定しない」
  • 「ボケて」が爆発的に伸びたキッカケはNaverと2chまとめ( @yusukebe さん )
  • MovableTypeはフレームワークとしてのポテンシャルがあり、ブログ以外にも色々作れる(@junnamaさん)
  • ソースコード内のコピペ部分を検出、可視化する技術。凄い。Githubにソースコードが上がってるらしいので、見てみたい。(@goccy54さん)
  • kansaipmの活動報告。初参加でしたが、関連の勉強会などこれからもお世話になります。(@nqounetさん)
  • Perl入学式のこれまでとこれから。まさか自分が運営側に回るとは1年前には予想もしていなかった…(@__papix__ さん)
  • Perl Oceanを使えば、チャットの様なメッセージサービスが作れる。インストールして遊んでみたい。(@lapis25さん)
  • デプロイツールのお話。デプロイとはサーバーの設定や必要なファイルやモジュールをインストールする等のこと。VPSを契約したら色々参考にさせて頂きます。(@shiba_yu36さん)

今回参加した中での、サプライズな出来事
  • 「ボケて」の制作者であり「webサービスのつくり方」著者のゆーすけべーさんに、本にサインをしてもらった!懇親会では、perlやMojoliciousの話を直接聞けた。(Mojoliciouのアレやら、LDDのアレ、楽しみにしてます!)
  • Mixiさんのメモ帳を抽選でもらいました!(ありがとうございます)
 
今回、kansaipmは初参加だったんですが、昨年から勉強させてもらってる「Perl入学式」や「namba.pm」で見かけた方や、お話をした方が何名かおられたので、入りにくい感はすごく少なかった。色々な勉強会に積極的に参加しておくというのは大事なことだと思いました。特に地方の場合はコミュニティ規模が小さいので、とても効果がありますね。

そして夏に行った「Yapc::Asia2012」でトークされていた著名なPerlHackerに直にお話が聞けたりと、いい経験とモチベーションを頂けたのも大きな収穫でした。JPAの地方への講師派遣制度、本当に良かった!!
Yapcや100人規模の勉強会の懇親会とかなら、いきなり面識も無いのに著名な方に話しかけるとか、ハードル高杉というか、もう完全に無理ゲーです。
若い学生さんやこれからプログラミングを勉強していこうという真の初心者の方(自分も含めて)にも間口が広い、素晴らしいコミュニティなので、kansaipm、ぜひ参加してみると良いと思います。

また、今年もYapcがあるので、有給休暇とって参加したいですね。
 
「つくることの楽しさ」「コンピューターを操作する楽しさ」

2012年は一歩目を踏み出した年、2013年は更に突き進む年にしたいですね。

<メモ>今回ググった知らなかった単語
・バリデーション
・デプロイ

このページのトップヘ