2013年6月26日水曜日

自分用Google ReaderをNode.js+MongoDBで作成。オープンソースだよ。

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク

はじめに


 なんかGoogle Readerが6末に終わるらしいんであー代替ねー。めんどいなー。自分で作るかー。という感じです。完全に俺得です。せっかくなんでNode.jsとか使うかーと。でDB周りはMongoDBでええかーとか適当に。勉強がてら。粛々と。のんびりと。

紹介


 Google Readerの代替という事でどういう名前にしようかと思ったんですけどまぁ"やぎ"だし
Goat Readerでいいやという事にしました。とりあえず触れる環境があるんで、メンドイ方は以下を見て下さい。モバイルにはまだ対応してません。Twitterでログインして使ったりも出来ます。ログインしていない状態でアクセスするとAnonymouseモードとなります。


できること


 繰り返しになりますが適当に作った上自分用なので完全に俺得機能しか乗せる気がありません。更に別に完成してないんでまぁアレです。今のところできることは大体以下です。

  • Twitter認証でのユーザ登録
  • RSSフィードの登録
  • RSSフィードの削除
  • Google Readerのsubscriptions.xmlのインポート
  • 登録したRSSフィードのクロールして未読アイテムを追加
  • 表示モード2つ

今後追加するかなーという機能としては以下です。
  • ふぁぼ、あとで読む機能
  • 未読、既読、すべて表示切り替え
  • 新しい順、古い順の表示
  • TwitterのTLのURL付きツイートをフィード化
  • TwitterのTLからhotを抽出
  • フィードへのカテゴリ設定
  • アイテムへのタグ追加
  • アイテムへのコメント追加
  • モバイル対応
  • Typescript化する
  • gruntを導入する

ソース


 ソースはGithubで公開しています。pullreq歓迎です。色々まだ足りてません。
sys1yagi/Goat-Reader

使う


 単純に使うだけなら簡単です。Twitterでログインして、Settingsにフィード登録してしばーらく待つとアイテムが増えているはずです。Google Readerのsubscriptions.xmlのインポートも概ね出来ます。

導入の手順


 README.mdを参照して下さい->https://github.com/sys1yagi/Goat-Reader

内部的な奴


 チョイスは結構適当なんですが、まぁとりあえずnpmやbowerで持ってこれるヤツを中心に利用しています。とりあえず列挙してみます。

フロントエンド


モジュール 説明
bootstrap.css Twitter社が提供してる良い感じのCSSですね。便利。
jquery 言わずと知れたjQuery。言うまでもないっすね。モバイル向けにはZeptoを使うと思います。
flight Twitter社製のコンポーネントベースのフレームワークです。各DOMの処理はこのFlightのコンポーネントを使って動作させています。
requirejs Flightを使う為に必要なので入れてます。CommonsJSの何かの実装だった気がします。AMDかな?この辺はFirefox OSなどHTML5製アプリを作る上で必須なパラダイムだよねーと。
es5-shim これもFlightを使う為のライブラリです。ECMAScript5の機能の一部を実装しているんだとか。
hogan Twitter社が提供しているライブラリで、scriptタグの中にHTMLテンプレートを記述して、jsからDOM生成に使えるというヤツです。JSPとかPHPに似てるかも。
datejs 日付の文字列フォーマットを良い感じにするライブラリです。DateFormatくらいは標準で欲しいんだけどなぁ・・・

バックエンド


モジュール 説明
Node.js nodeかわいいよnode
MongoDB mongoかわいいよmongo
mongoose Node.jsからMongoDBに良い感じにアクセスする為のモジュールです。JSON形式でテーブルスキーマを定義してモデル作ったり出来ます
express Node.jsのアプリケーションフレームワーク。割と色々やってくれる。助かる。
jade HTMLテンプレエンジン。文法が独特でちょっとつらい。HTML2Jadeとかで変換して使ったりした
fibers 非同期処理系をブロッキングする為のモジュール。Node.jsは非同期コールバックネスト地獄に陥りやすいのよね。
cron Node.js内でクロール処理をさせるのに使った。まんまcron
jquery サーバサイドでも活躍!でもテスト動作させる為にしか使ってないかも?
mocha テスティングフレームワーク。あんまりテスト書いてないけど。ブロッキングの要るテストが書きやすいのでjasmineやめてこちらにした。
passport TwitterのOAuthに使った。これは便利。Facebookとかもあるらしい
passport-twitter これな。
xml2json XMLをjsonに変換してくれる。助かる。
forever Node.jsのプロセス管理ツール。daemon化したりあれこれ

注意点


・スケールとか全く考えてないよ。ユーザ増えると爆死する気がするので自分で鯖立てて個人利用を推奨します。

終わりに


 基本的に"Node.jsでアプリ作りたい"というのがメインの動機です。で、Node.js使った感想は"剥き出しだなぁ"と。Pythonのmod_pythonだとかと同じでリクエストハンドラと云々がアレ程度にしか用意されてないんで上に色々作る必要があるなぁと。Express使ってもJadeと連携とかSession StoreがどうとかFile uploadが便利とかはあるけど、リクエストハンドラ周りとか自分で色々アレしたんでまだまだかなーと。でも多分既にその辺カバーするフレームワーク出てるだろうなーと。いずれその辺に対応していくかもしれないなーと。

 npmやbowerで色々持ってくる仕組みはとてもおもろいと感じた。これってMavenとかGradleにかなり近いはずなんであーMaven使っておけばなぁとか思った。これからはGradleの時代なのでGradleでJava系プロジェクトは扱うようにしていきたいなぁーとか。今回はnpmとbowerを個別で色々触っていたけど次回何かやるならYeomanを使おうかなと思う。

で、

やっぱプログラミングって楽しいなぁ

と思った。忙しくて大変だったけど。

0 件のコメント:

コメントを投稿