みずぴー日記

月に行こうという目標があったから、アポロは月に行けた。飛行機を改良した結果、月に行けたわけではない。

Node.jsによるPusherクローン「Keima」をリリースしました #codefirst

f:id:mzp:20120811144303p:plain
http://keima.herokuapp.com/

「えーpolling!? pollingが許されるのは小学生までだよねー、キャハハハ」というわけでpush通知にWebSocketをお使いのみなさま、こんにちは。
しかし、毎回、WebSocketを扱う機能を実装するのは、いくつかの理由で面倒ですよね!

  • WebSocketは様々なバージョンがあるので、すべてに対応するのは面倒。
  • 同様の理由で、個別のアプリで作り込んでしまうと、WebSocketのバージョンアップに追従するのが面倒。
  • WebSocketは大抵別サーバになっているので、設定が面倒。
  • Heroku等のPaaSではWebSocketを使えないことが多い。 (2015/1/23追記: HerokuはWebSocketをサポートするようになりました)

そこで、WebSocketによるpush通知に特化したWebサービス Keima を作成しました!

Keimaの概要

f:id:mzp:20120811144250p:plain

  1. ユーザが何かの操作をすることで、Webアプリの状態が更新される
  2. KeimaのAPIを叩き、更新内容を通知する
  3. Keimaが各種クライアントに更新内容をWebsocket等でリアルタイム通知する

Keimaの特徴

環境に応じてWebSocket, FlashSocket, XHR-Pollingが自動選択されます。*1
APIはREST+Javascriptライブラリなので、簡単に利用できます。またインタフェースは類似サービスであるPusherに合せてあるので、移行も簡単にできます。
Twitterアカウントさえあれば誰でも利用できます。

類似サービスとの比較

Keimaは類似のWebサービスであるPusherのクローンです。 相違点は下記の通りになります。

  • node.js + mongodb + redisというベーシックな構成なのでNode.js用PaaSにデプロイが容易。(Node Ninja, Nodejitsuにて確認しています。)
  • オープンソースなので社内ネットワーク等の閉じた環境でも利用できる。

ソースコードの入手・Node Ninjaへのデプロイ

ソースコードGithubで管理(https://github.com/codefirst/keima)しています。MITライセンスですのでご自由にお使いください。

またNode Ninjaへのデプロイにも対応しています。

$ git clone git://github.com/codefirst/keima.git
$ cd keima
$ git remote add node-ninja node@xxx.xxx.xxx.xxx:repo
$ git push node-ninja master

オマケ: 名前の由来

リアルタイム通知をするWebアプリケーションのハブになりたい → 羽生 → 将棋 → 桂馬 → Keima、って@さんが言ってました。
なおロゴはデザイン将棋の桂馬の駒を参考にしています。

*1:Socket.IOは神