node.js のホスティングサービスまとめ

色々でてきてるので備忘録。随時更新していきます。

node.jsに最適化されたホスティングサービス

Joyent Node SmartMachine (http://no.de/)

一番有名かつ実績がある。Node.jsを使ったコンテストのNode.js Knockoutでは最も多く使われていた。node.jsの開発者(@ryahや@izs)が働いている会社が運営。サーバOSはSolarisでgitを使ってdeployする。ssh接続も可なのでnpmで自由にパッケージ入れられる。β中なので無料。

Heroku (http://heroku.com/)

いち早くnode.jsへのサポートを表明したサービス。Railsホスティングで有名。node.jsを使いたい場合は使わせてくれってメールしないといけないので日本人にはハードルが高いかもしれない。現在は新規募集休止中。現在はまだβなため、WebSocketがサポートされていなかったり同時接続は64クライアントまでで30秒でタイムアウトされるなど厳しい制限がある。来年以降の新バージョンに期待。

追記)新バージョンのStackでNode.jsを正式にサポートしたとアナウンスされました。が、今のところまだWebSocketは未サポート。

Node Jitsu (http://nodejitsu.com/)

かなり早い段階からアナウンスはあったが、初期にメール登録したのに未だに連絡が来ないので詳細不明。Node.js界隈では有用なライブラリをリリースしたりと結構活発に活動している。忍者好き。多分「Node術」って言いたいんだと思う。

node.js host (http://blog.nodejshost.com/)

かなり早い段階からテスターを募集していたが、なんか余り内容のないブログしかないので応募はしていない。活動が見えない。

ElusiveHippo (http://elusivehippo.com/)

結構早い段階から募集はしている。アカウントを取得した記憶はあるが、現在はログインも新規登録もできなくなっている。多分消える。

webbynode (http://www.webbynode.com/)

基本的には普通のVPSなんだけど、githubから直接deployができたりする便利なとこ。node.jsにも対応した専用のツールを使ってdeployや再起動などができる

NodeSocket (http://www.nodesocket.com/) nodejs Cloudから改名

12/14に行われたNode.js Campに合わせて発表された。多分Joyentのと同じような感じっぽい。応募はしといた。

Duostack (http://www.duostack.com/)

12/14に行われたNode.js Campに合わせて発表された。多分Joyentのと同じような感じっぽい。応募はしといた。 / 招待届いた。Joyentとは違い独自ツールを使う感じなのがちょっと煩わしいが概ね良好。ただし、WebSocket/FlashSocketは使えない。まあそれでも(WebSocketが使えるはずの)nodesterよりリアルタイム性は高い。
追記)WebSocketは使えるようになった
追記)dotCloud買収された

JsApp.US (http://jsapp.us/)

ブラウザ上でnode.jsのコーディングや実行ができ、それをそのままdeployできちゃうというプラットフォーム。サインインすると自分のすきなサブドメインを使える(http://meso.jsapp.us/)。個人の週末プロジェクトなのであまり期待はしていないが結構積極的に活動はしている。

nodester (http://nodester.com/) nodefuから改名

オープンソースホスティングサービス。応募しといた。 / 招待届いた。独自のツールも不要だし(独自ツールもリリースされたのでそっち使ってもよい)、APIの使い勝手は悪くないが、いかんせんサーバが不安定すぎる。WebSocketも使えるけど体感ではno.deに比べるとかなり遅い。んー、Socket.io使ってやってるけどWebSocketじゃなくてXHR-Pollingで通信してるな。

bejes.us (http://bejes.us/)

nodesterのクローン。nodesterはオープンソースなので、こういうクローンサービスは他にもどんどん出てくるかも。

dotCloud (http://www.dotcloud.com)

Node以外にも、Perl/Python/PHP/Javaなどの各種言語や、MySQL/Redis/MongoDBなどの各種データストアも動かせる。deployは独自ツール。フロントがNginxなためWebSocketは通らない。
追記)WebSocketが通るようになったDuostackを買収したので、統合されるとWebSocket通るようになるのかな

CloudFoundry (http://cloudfoundry.com/)

Nodeだけじゃなくて、RailsやらJavaやらも動くVMwareのPaaS。deployは独自ツール。フロントがNginxなためWebSocketは通らない。http://cloudfoundry.org/オープンソースとして公開もしている。

普通のVPS

基本的には普通のVPS借りて自分で環境構築するのもさほどの手間ではないです。僕はさくらLinodeを使ってますがどこでもいいから借りてみてはいかがでしょう。

Amazon EC2

Amazon EC2のmicroインスタンスもいいと思います。http://www.embracingthecloud.com/2010/12/05/InstallingNodejsOnAmazonEC2.aspx の記事がかなり参考になります。記事中でも書かれているとおり、node.jsのコンパイルに時間がかかるのでコンパイルの際だけ性能のいいインスタンスに切り替えるのも手だと思います。
追記)東京に来たのでMicro Instanceにインストールしてみました。d:id:t_43z:20110304:1299222231

java-ja.js#2でLTしてきました

http://atnd.org/events/9721 ですね。

会場提供はいつものとおりGREEさんです。ありがとうございます。GREEさんはそろそろ@ichii386と@takano32と@tsuyoshikawaの給料を上げるべきだと思う。いや、どんぐらい貰ってるとか全くしらないですけども。

で、「夜のnode.js」というタイトルで発表させていただきました。まあ、話としては完全にネタ系なんですけれども、node.jsの使い方としてWebSocketと組み合わせる以外にもこういうのがあるよっていうのを周知したかっただけです。

発表資料はGoogle Docsにあります。

ソースコードは完全なのはありません。っていうのは、ああいう系のサイトってUTF-8じゃないサイトが多くて、っていうかなぜかEUC-JPなサイトばっかでして、node.js的にはUTF-8以外の文字コードを扱うのって標準では非対応なのです。

node-iconvってライブラリ使えばできると思うのですが、ちゃんと動作させることができなかったので、目的のサイトの本文抽出したものを文字化けした状態で取得しそれを元にDOMを生成させようとするとちゃんと生成できないという状態で終わってしまいました。

まあ、それとは別にnude.jsは試してみましたけれども、ええ。

Node.jsの本を書いています

先日のFirefox Developers Conference 2010でもチラっと触れましたが、現在node.jsの本を書いています。

執筆陣は@atsuya, @bad_at_math, @Jxck_, @KOBA789, @koichik, @masahiroh, @meso, @nsyee, @yssk22の9名で@jedschmidtと@t_wadaにもお手伝いをしてもらっています。

世界初のnode.js本とすべく http://developer.yahoo.com/blogs/ydn/posts/2010/11/announcing-a-node-js-book-project/ よりも早く出版できたらいいなって思ってますが、それ以上に内容の濃いものをお届けできるようみんなで努力しています。

楽しみにしていてください。

ちなみに、執筆陣の最年少は現役中学生です。最年長は(禁則事項です

Firefox Developers Conference 2010でnode.jsについてLTしてきました

僕にとっては、立派な会場よりも、John Resigの存在よりも、一緒に発表する他のShibuya.jsのメンバーが本当に凄いJavaScript Ninjaばっかりなので、そんな中に混ざっていいのかという不安が実は一番大きかったです。
でもまあ当日も普通に乗り切れたし、なんとか誤摩化し切れたんじゃないかと思ってます(笑

発表内容は、「Node.jsって聞いたことはあるけどまだ触ったことがない人」向けに興味を持って触ってもらうためのものなので、別に高度に技術的な内容ではありません。
ただ、発表自体がNode.js(+WebSocket)を使ったスライドだったので、そこに結構いい反応を頂けたのが嬉しかったです(無線LANの接続の調子とかでちょっと最初時間をとってしまいましたが)。

というわけで、発表内容はgithubにコミットされています。
http://github.com/meso/fxdevcon2010
node.js v0.2.5で動作確認しています。

 $ npm install express jade less socket.io
 $ git clone git://github.com/meso/fxdevcon2010.git
 $ cd fxdevcon2010
 $ node app.js

で、http://localhost/fxdevcon2010 にアクセスするとスライドの1枚目が表示されます。
このページでは左右キーを押したりしてもページは遷移しません。
http://localhost/fxdevcon2010/himitsu にアクセスすると、同じページが表示されますがこちらは左右キーでページを移動できます。移動すると、前者のhimitsuがないURLを表示しているブラウザ(タブ)も自動的にページが切り替わります。
是非試してみてください。

(追記:アップしました) http://fxdevcon2010.mesolabs.com/

Firefox Developers Conference 2010でnode.jsについてLTします

来る11/20に行われる http://mozilla.jp/events/2010/fxdevcon/ にて、「John Resig feat. Shibuya.js」の枠の中でLTさせていただくことになりました。

僕はnode.jsに対してサーバサイド側からアプローチした人間なので、JavaScriptが得意とは全く言えない状態な上に、ぶっちゃけShibuya.jsの皆さんとはあまり面識がないので(id:amachangid:malaぐらいかなぁ)かなりgkbrな感じなんですが、頑張ります。

チャンスをくれたid:t-wadaありがとうございます!

リアルタイムWebハッカソンでハンズオンしてきました

ATNDはhttp://atnd.org/events/8626ハッシュタグ#riajyuです。
会場提供はGREEさまです。いつもありがとうございます。

今回は、なんか流れでいつの間にかに僕がハンズオンの講師という立場になってました。
で、一応資料としてはnode.jsのインストールからWebSocketを使った簡単なサンプルが動かせるところまでを用意しました。前回までのエントリがそれにあたります。

最終的な成果物はhttp://riajyu.mesolabs.com/のチャットで、これを会場で参加者にも使ってもらいました。
このコードだと、新たな接続が発生する度にファイルを全部読み込む処理が入るのでその辺のパフォーマンスがどうかなーって思ったけど、まあ発言数がまだそんなに多くないのもあって、MAX30人ぐらいの同時接続があったんですけど普通に問題なくさばけてました。

成果物発表は、多人数対戦型の○×ゲーム的なものが面白かったなー。マス目があって一列に自分の色を塗れたら得点が入るっていうやつ。ソースとか公開してないかな?

LTはタイムキーパーがグダグダでした。すみません。最後にあった @jedschmidt の(fab)の話がやっぱり興味深かったしみんな一番食いついてたと思う。id:t-wadaにここまで言わせた!
http://linoit.com/users/meso_/canvases/リアルタイムWebハッカソンKPT に付箋をペタペタ貼ってください。

WebSocketはやっぱりWebユーザの体験を変革するものだし、node.jsはその実行環境としてとても優れています。是非一度触ってみてください。
node.js日本ユーザグループもよろしく!

ExpressとSocket.ioを使ったチャットサンプルを永続化

このエントリはリアルタイムWebハッカソンのハンズオン資料その5です。

今回は、前回のチャットサンプルのチャットログを永続化してみましょう。
node.jsは様々なデータストアと連携することができます。
MySQL, PostgreSQLなどのRDBMSももちろん可能ですが、やはりCouchDB, MongoDB, RedisなどのいわゆるNoSQLと呼ばれるものと連携させるのが人気のようです。
特にJSON形式でそのまま格納することのできるデータストアは、JavaScriptから扱うのに都合がいいというのは言うまでもないと思います。

もちろん、node.js製のデータストアエンジンもいくつかあります。有名なのはnStoreでしょう。
今回はdirtyというライブラリを使います。理由は僕が使ってみたかったからです。

インストールは

$ npm install dirty

で終わり。
……のはずなんだけど、現状(dirty v0.9.0)だと最新のnode v0.2.3で使おうとしたら'constrants'ってモジュールが見つからないよってエラーが出てしまう。
もうパッチはあたっていて、npmにその最新のが登録されていないだけの状態なのでgithubから直接とってくりゃいい。なので

$ cd tmp
$ git clone git://github.com/felixge/node-dirty.git
$ cd node-dirty
$ npm install

でOK

んじゃさっそくdirtyを使ったapp.jsを見てみましょう。変わったのは先頭のrequireの部分

var express = require('express'),
    io = require('socket.io'),
    db = require('dirty')('log.db'),
    json = JSON.stringify;

とsocket.onの引数のfunctionの部分

socket.on('connection', function(client) {
  count++;
  client.broadcast(json({count: count}));
  client.send(json({count: count}));
  db.forEach(function(key, val) {
    client.send(val);
  });

  client.on('message', function(message) {
    // message
    db.set(new Date().getTime(), message);
    client.broadcast(message);
    client.send(message);
  });
  client.on('disconnect', function() {
    // disconnect
    count--;
    client.broadcast(json({count: count}));
  });
});

こんだけです。見ての通り、メッセージを受け取ったらそれを現在時刻のミリ秒をキーにsetしています。
で、新規接続したらそいつに全てのログをforEachで回しながらsendしています。単純ですね。
果たしてこれでどんだけのパフォーマンスが出るかわかりませんが、それはこのチャットを実際に使うハッカソンの会場で判明することでしょう。

リポジトリhttp://github.com/meso/chatsample