#june29jp

通知特化型Twitterアプリ「29hours」をつくってHerokuで動かしているお話

2013-03-08

背景

近年、若者のメンション離れが問題視されている。明示的なメンションはせずに、ある人を指す俗称などで話しかける、いわゆる「空リプ」は社会現象となり、タイムラインに蔓延している。この状況では、フォローが増えれば増えるほどコミュニケーションを円滑に進めることが難しくなり、増え過ぎたフォローと速くなりすぎたタイムラインを前に「SNS疲れ」を表明する人も

…論文調に書くのは飽きた。

概要

いくつかの Twitter クライアントアプリには、キーワードフィルタの設定などがあり、特定の条件を満たすツイートをそれなりに見逃さずに閲覧できるようになっています。しかし、常時起動型のアプリはあまり多くなく、移動中など、デスクトップから離れるタイミングでは、自身への言及に対する反応が困難になりがちです。

そこで、自分用として「1日に29時間くらい動く」をコンセプトとした「29hours」という通知特化型アプリをつくりました。お手軽にずっと動かし続けたいものなので、Heroku の上で動かしやすいようにちょっとした工夫もしてあります。

ちょっと前にも同じコンセプトでアプリをつくって VPS で動かしていたりもしたのですが、拡張性に乏しく、また、運用も面倒臭い感じで動作させ続けるのが苦になってしまったので、そのときの不満を解消するべく新しくつくりなおしたのでした。

このエントリでは、そんなかわいい 29hours を紹介します。

想定ユーザ

「Git はわかりません」という人だと、実際に手元で動かしてみるのはむつかしいと思います。逆に「Git はわかります」くらいの人であれば、わりとすぐに動かして遊べると思うので、このエントリを読んで興味が沸いてきたら試してみてください!

「29hours」オーバービュー

29Hours には、大きく4つの設定があります。順番に説明します。

  • Twitter に接続するための設定
  • マッチ条件を指定する設定
  • 通知先の設定
  • リンク先の設定

Twitter に接続するための設定

Twitter アプリなので、いつもの4つ組の値を設定します。

マッチ条件を指定する設定

好きな Matcher クラスを使用できます。

どんなツイートをチェックしたいかを指定します。今は「特定の文字列を含むツイート」を検知する KeywordsMatcher を実装してあります。

通知先の設定

好きな Notifier クラスを使用できます。

指定の条件にマッチしたツイートを、どのように通知するかを指定します。最初に Boxcar というサービスを通じて通知する BoxcarNotifier を実装しました。Boxcar には iPhone アプリがあるので、ぼくは iPhone で通知を受ける使い方をしています。

続いて im.kayac.com を通じて通知する ImkayacNotifier もつくりました。

リンク先の設定

好きな Linker クラスを使用できます。

通知にはリンクを含めることができます。最もベーシックなものとして HttpLinker というものを用意してあります。これは、通知対象ツイートを「http://twitter.com/#{screen_name}/status/#{status_id}」へリンクしてくれるものです。

ぼくは、iPhone では Tweetbot を使用することが多いので、TweetbotLinker もつくりました。通知対象ツイートを「tweetbot://#{screen_name}/status/#{status_id}」にリンクしてくれます。これを iPhone で開くと、Tweetbot で対象ツイートにアクセスできます。

もしあなたが利用しているクライアントアプリがカスタム URL スキーマに対応していたら、そのクライアントアプリ用のリンク URL をつくる Linker を実装して使用するのがよいでしょう。

設定ファイルのサンプル

たとえばこんな設定ファイルを書くと、ぼくのタイムラインを流れるツイートから、キーワード「大和田」「じゅーん」などにマッチするものを検知して「Boxcar」に通知し、それを開くと「Tweetbot」で対象ツイートにアクセスできるわけです。

動かす

動かすまでのおおまかな手順は、以下の通りです。

$ git clone git://github.com/june29/29hours.git
$ cd 29hours/
$ cp settings.example.yml settings.yml

(settings.yml を適当に編集する)

$ bundle exec ruby 29hours.rb

本体が 29hours.rb で、同じディレクトリにある settings.yml を読み込んで動きます。

Heroku に乗せる

Heroku で動かすには、先ほどの手順に続いて、以下も行いましょう。

$ heroku create アプリ名
$ git push heroku master
$ heroku config:add SETTINGS_FILE_PATH=http://path.to/your/settings.yml

(Heroku のアプリの管理画面で worker の数を0から1にする)

SETTINGS_FILE_PATH に URL を指定すると、そこにある設定ファイルを読み込んで動きます。いい感じに動く設定ファイルを用意できたら、Dropbox にでも置いてパブリックな URL をゲットして設定してやるのがおすすめです。こうすることで、ファイルシステムへのアクセスがむつかしい Heroku でも上手に動かすことができます。

設定ファイルの内容を変更したときは、いっぱつ再起動してやってください。

$ heroku restart –app アプリ名

プロセスがひとつまでなら無料で利用できるので、ダッシュボードからこのように設定します。また、Heroku に乗せると種々の Add-ons も活用できます。上の画面にもあるように、たとえばログ管理の Papertrail の Add-ons を導入してみましょう。29hours はツイートの本文をログに出力しているので、ツイート本文を対象に検索できちゃったりします。便利ですね。

まとめ

通知特化型 Twitter アプリ「29hours」をつくりました。ずっと動かし続けられるように、Heroku でも動くような設計にしました。通知に関する設定はそこそこプラガブルになっているので、今後の自分のユースケースの変化に合わせて、長くお付き合いしていきたいなぁと思っています。

june29/29hours · GitHub

おもしろかったら、シェアやブックマークや送金などぜひぜひお願いします。サイト運営の励みになります!

シェアや送金などお待ちしています!