Libreq(リブレク) - 読みたい本を図書館にリクエスト
というサービスをリリースしました。
Libronに続く、カーリルAPIコンテストにエントリーした図書館シリーズ第2弾です。
読みたい本が図書館にないときにTwitterでつぶやいて本のリクエストができるサービスです。本が図書館にあるかを定期的にチェックし、もし蔵書に追加されて読めるようになったらリプライを送って通知します。
使い方
LibreqはLibronの姉妹サービスです。いまのところは、Libronから使ってください。
LibronはAmazonの検索結果ページから簡単スピーディに図書館の蔵書を検索でき、予約ページへと案内する便利ツールです。
Libron - 無料で本が読めるライフハック
Libronで検索した結果、本が図書館にないというときにLibreqあてにつぶやくリンクが表示されます。
クリックするとTwitterの画面にジャンプし、つぶやく内容が表示されます。四角で囲まれた部分は変更せず、あとは自由に編集してつぶやけばリクエスト完了です。
Libreqはリクエストされた本が図書館で借りられるようになったかを定期的にチェックしています。
もし借りられるようになったら、以下のように、リクエストした本人のTwitterアカウントあてにリプライを送ってお知らせします。
どうして作ったか?
Libron 1.xのコードをもとにカーリルAPI対応やChrome Extension対応を実装して、アイデアを動くコードで示してくださった@kojimiyaさんのLibronに対する提案がきっかけです。
カーリルAPIコンテストの当初の期限が一週間ほど遅れ、これはLibron以外にも作れということかとつぶやいたら、カーリルの中の人から「その通り」と言われるしで、作ることにしました。
とはいえ、作り始めてすぐに壁にぶつかりました。Libreqは読みたいと思った本が図書館にないときに利用者がTwitterでリクエストするわけですが、別に図書館と協力しているサービスではないですから、なんとなくリクエストが図書館の人に届けばいいなあ、くらいの感覚で。。でもそんなあいまいな目的でユーザーはわざわざリクエストのつぶやきしてくれるだろうか、と思ったのです。また図書館側の人の立場に立ってリクエストがどんな風に表示されたら汲み取りやすいのかなあ、と考えても、僕は図書館のユーザーに過ぎず、中の人ではないからうまく想像できないのです。(この点に関して、図書館の運営に関わっている方で、「こうしたらもっといい」などいろいろと提案していただける方がいましたら大歓迎ですので連絡ください)
そんなとき、rails に関するエントリーでちょくちょくブログを読ませてもらっている@satokoさんのつぶやきで、「読み終わった本を図書館に寄付したら喜ばれた」という話を読んで「これだ!」と思いました。
» Twitter / satoko: そういえば昨日、読み終わった1984 book3を図 ...
リクエストする側は一般ユーザー、それに応えるのが図書館の人、と考えていたので、応える側の立場が想像できなくて悶々としていたのですが、応える側に同じく一般ユーザーも加えたら、つまり自分も応える側に含まれるんだ、と思えるようになったら一気に楽になりました。
まだそのあたりは現状の実装には反映されていないかもしれませんが、頭の中に「こうしたらもっといい」といった改善案がどんどん湧いてくるようになったので、ご期待ください。
Libreqを通して、読みたい本が図書館にない利用者、利用者がどんな本を読みたいかを知りたい図書館、さらに本を図書館に寄付してもいいと思っている利用者を結びつけることを目指したいと思っています。
LibreqはHerokuで動かしています
ここからは技術的な話。
LibreqはRuby on RailsのPaaSと言えるHerokuで動いています。
運営しているサービスの開発などを手伝ってくれているid:kililiくんの
» Herokuがすごい - Wing my life
を読んだのがきっかけ。
チュートリアル通りやって最初のテストアプリが動いたとき感動しました。Railsを使えば10分でブログが作れるかもしれないが、Herokuを使えば10分で作れて、なおかつ世界中に公開できてしまう。「作れる」から「公開」がRailsだと意外に大変なのですが、それがあっさり出来てしまうのです。
パフォーマンスを心配していたのですが、意外と良好。体感的にはSlicehostやLinodeのVPSで運営している他のサービスとあまり大差ないかもしかしたらHerokuの方が速く感じます。実際に計測してみないとわからないところではありますが、Slicehostよりも速いといったブログのエントリーもみつけました。
Heroku Overview and Performance comparisons | Simply Excited – Technology, Outdoor and Design
ある程度の規模までは無料プランでいけそうな気がしています。しかもひとつだけでなく複数のアプリを作成できてしまって、これじゃあ儲からないんじゃないかと心配です。
Libreqでは定期的にlibreqあてのつぶやきを取り込んだり、あるいはリクエストされた本が図書館にあるかどうかをチェックする必要があるのですが、Herokuはcronもサポートしているので問題ありません。cron.rakeをlib/tasks以下に用意し、その中に実行したい処理を書くだけという簡単さ。ただ無料プランだと一日一回しか実行できないので、月々3ドルの、Hourlyつまり一時間に一回実行するプランにアップグレードしておきました。
Libreqでは、Twitter APIを使うのにtwitter gem、Amazon APIにはamazon-ecs gem、またカーリルAPIにアクセスして取得したxmlをパースするのにNokogiriといったgemを使っています。そうしたgemをHerokuで使えるようにするのも超簡単です。.gemsというファイルに
witter --version '= 0.9.5'
amazon-ecs --version '= 0.5.7'
nokogiri --version '= 1.2.3'
と書いておいて、git pushするだけ。Heroku上で勝手にインストールされます。
他にも無料プランの中で使えるAdd-onが充実していて、バックアップだったりエラーメール送信だったり、運用に入ろうとすると必要になり自分で用意しようとすると結構面倒なところが、ポチポチ「Add-on追加」のボタン押していくだけで済んでしまうのが楽しいです。
Ruby on Railsで自分のサービスを作りたいと思っている人はHerokuを使ってどんどん世に出したらいいと思いました。そしてサービスがはやってきたら、有料プランに切り替えHerokuを支えましょう :-)