Project: 「tweetwatch」: GitHub

    開発の動機

     今年の都知事選の頃、多くのフォロワーを抱えている人(以下a氏と表記)が

    Twitterで#都知事選というタグをつけて自分が投票した候補者の名前を呟けば、それを集計してくれるアプリ作れないかな~

    と物欲しそうに呟いていたのが目に止まりました。
    Yahooのアンケートのように、誰がどれぐらい票を獲得しているかtwitterで独自に確認しようという意図のようです。  プログラマたるもの、そこで「すぐ出来ますよ」とリプライするような軽率な行動をとってはいけません。職業プログラマなら尚更です。誰かが手を挙げるかもと思いながらしばらく様子を見ていましたが、その呟きに対して反応する人はいなかったようです。こういう場合、相手がどれほどのものを要求しているかわからないので迂闊に出来ますなんて言えませんが、StreamingAPI使えばとりあえず使える程度のものであれば、すぐ出来るんじゃないかと思い調べてみました。

    とりあえずローカル環境で動くもの

     「StreamingAPI」で検索すると役に立ちそうなサイトはすぐに見つかりました→「Herokuの無料枠でTwitter Stream APIを常時監視 => DBに保存するRubyコード」
    このmorizyunって人のサイトは調べ物をしている際にはよくお世話になっていますが、今回見つけた記事も自分の要望その物です。私はherokuは使いませんでしたがほぼこの記事のコードそのままがローカル環境で動作しました。ツイートの集計がしたいのであればDBに溜まったデータに対してSQLを打ち込めば好きな結果が得られます。a氏に教えてあげようかとも思いましたが、おそらくプログラミングやSQLも知らないa氏が実際に自分のPCで動かすためにはそうとうな時間をかけてサポートしてあげないと無理だろうと思って止めておきました。自分が良かれと思って教えても、逆に恨まれることになり兼ねません。そうなんです、自分でニタニタ楽しむためのソフトを作れたとしても、それをひと様に使ってもらおうとするとまた一段とハードルが高くなるんですねぇ(今回は自分で楽しむものさえパクリですが)。

    ひと様が使えるようにするために

     最初はDBにデータを格納するだけのシェルスクリプトを起動しながら、ユーザー向けのwebインターフェースを提供してあげればいいだけだからそれほど手間はかからないと思いましたが、そうすると2プロセス動かすことになり、herokuの無料枠では済まなくなります。それに運用環境を何とか用意したとしても、自分のtwitterアカウントの認証キーをそのサービスで利用するとなると、一人しか利用できないwebサービスになってしまいます。twitter社にAPI利用料を支払えば解決ですが、そこまでする気もないので開発に取りかかるのは躊躇してました。
    で結局、

    • 運用環境に関してはとりあえず自宅サーバで動くようにしてから考える
    • twitterのAPIキーをユーザ自身が登録して、そのキーを利用しながらDB格納プロセスを起動するようにする

    という方針で作りました。 集計画面
    DBにデータを格納するシェルスクリプトは、morizyun氏のコードを叩き台にしてWebサイトから制御するためのプロセス間通信用インターフェースを追加し、そのサーバーとなるシェルスクリプトに接続するクライアントアプリとなるユーザ向けのwebサイトを作る。そのwebサイトはRuby on Rails チュートリアルでRSpecの勉強(写経)をしながら作ったものがあったのでそれを流用しています。
    以降、DBにデータを格納するサーバースクリプト(server側)とRails製Webサイト(client側)に分けて紹介します。