読者です 読者をやめる 読者になる 読者になる

アドベントカレンダーを電子書籍で読めるサービスを作った

f:id:secondlife:20140111143236j:plain

 

QiitaAdventarATND のアドベントカレンダーがオフラインの電子書籍で読みたい、と思ったので作った。例えば寿司アドベントカレンダーなら、URLを入れて変換すると、readlistsを裏側で叩いて、こんな感じに生成される。

生成後は readlists の機能を使って、iPhone や iPad に送ったり、dropbox に epub を保存したり、その他いろいろな方法で、様々なデバイスで読むことが出来る(※なお readlists の kindle に送る、は一部文字がおかしくなるのでオススメしない)。また Qiita のアドベントカレンダーは、HTML の要素の関係で必要の無い要素も混じってしまっていて、ちょっとごちゃっとしてしまっているが、これは Qiita チームが HTML の構造を綺麗にしてくれれば解決するので勝手に期待!!1

どうぞご利用下さい。なおこのサービスのソースコードはこちら。

サービスの裏側のこと

当初、readlists-anonymous というライブラリを作っていて、これを公開すればいいや、と思ってたのだけど、CUI じゃほぼ誰も使わなさそうなので Web サービス化した。

作ってみたものの飽きそうなWebアプリはherokuで動かしておく - はこべブログ ♨ でも書かれてるとおり、自分の VPS や自宅サーバに作ると何かのタイミングで動かなくなる未来が見えていたのと、最近の heroku 事情はどうなんだろうと使ってみたかったので、と思って heroku でホスティング。

このサービスは裏で readlists を http 叩いていてネットワークIO待ちが発生し、トータルの処理時間に数十秒かかるんだけど、いちいち worker 化するのもめんどうだよなぁ、と思っていたところ、Web サーバに Thin 使って EventMachine 使えるようにしておくと、EM::defer 使ったバックグランド処理が楽に書ける とのことなのでソレで*1。データは消えても問題ないので、memcached(heroku だと今は MemCachier) plugin に進捗の状態なども入れて管理。簡単ワイワイ

また heroku でどうやれば良いんだろう、という問題解決がオフィシャルサイトのドキュメントにかなり載っているため、ググって stackoverflow 見るより、オフィシャルを見た方が素早く解決して素晴らしい感じ。その他も heroku でハマることは一つも無く、サクサク作って行けた。しかも0円、無料です。

Web のデザイン周りは、Twitter Bootstrap, Bootswatch, Font Awesome とそれを CDN でホスティングしてくれる Bootstrap CDN で。favicon も無いと寂しいので、Icon Generator でとりあえず感あふれる favicon を作った。デザインの抽象化・再利用のエコシステムもできあがっていて、大変便利な時代が来てることは知っていたけど、いざ自分が使ってみると便利さが実感できた。

readlists-anonymous のこと

サービスの裏側で使ってる readlists-anonymous はコマンドラインのツールもついているので、

$ gem install readlists-anonymous
$ readlists-anonymous -t example-title http://example.com/ http://test.example.com/
* Created anynymous readlists
share-url: http://readlists.com/8ddbbc9e/
public-edit-url: http://readlists.com/8ddbbc9e2a52458ea0104afed343cb81/
Add http://example.com/
Add http://test.example.com/
...

みたいに、CUI から自分の好きな URL を readlists に登録して使うことも出来る。どうぞご利用下さい。

*1:この方法だと Web サーバの再起動時に処理が止まってしまうので、実行中断時の処理をキチンと入れないとなんだけど入れて無い