RingoJS 触ってみた

RingoJSというプロジェクトが個人的に話題になっています。
JavaScriptでWebアプリケーションのサーバー側のプログラムを書くことができるみたいです。

特徴

RingoJSのトップページに書いてたことを泣きながら読んでいますが、上手く読めていません。英語爆発しろ。

Instant reloading

ソースコードを変更したら、ブラウザをリロードするだけで反映されるみたいです。サーバーの再起動をしなくてもよいってことなのかな。

Full web support

Webアプリケーションを構築する上で必要になるほとんどのものが付属しています。フルスタックってやつですね。

Easy debugging

参考になるエラーメッセージとグラフィカルなデバッガが、間違いの修正を容易にしてくれます。ふむふむ。期待。

Pure Java

RingoはJavaで書かれているので、たくさんのJavaライブラリとかを使えるみたいです。

It's fast

Ringoは世界最速のJavaScriptランタイムってわけじゃないけど、平均的なWebアプリケーションを引き裂くきます。(よくわかりません><)

インストール

Getting Startedのページからzipをダウンロードして解凍すればOKです。
gitやantの用意がある人はgithubから持ってきてantでビルドしてもいいみたいです。

git clone git://github.com/ringo/ringojs.git
cd ringojs
ant jar

Ringoシェル

RingoJSには対話式のシェルが付いています。RingoJSをインストールしたディレクトリで以下のコマンドを実行すると、シェルが起動します。

./bin/ringo

シェルが起動したので何か書いてみましょう

alert('Hello World!');
ReferenceError: "alert" is not defined. (<stdin>#1)
	at <stdin>:1

エラーになってしまいました。JavaScriptとはいえWebブラウザで動いているわけではないのでalertは使えないんですね。「window」とか「console」もundefinedでした。

色々試した結果、出力には「print」関数が使えることがわかりました。

['Hello', 'World', '!'].forEach(function(elem){
  print(elem);
});
Hello
World
!
[1,2,3,4,5,6,7,8,9,10].map(function(n) {
  return n * 2;
});
2,4,6,8,10,12,14,16,18,20

Array.map()やArray.forEach()も使えるみたい。素敵だ。

Webアプリケーションを起動してみる

シェルで遊んでいたら30分くらい経過してしまいました。今日の目玉であるWebアプリケーションを起動してみましょう。
Ringoをインストールしたフォルダの「apps」フォルダにデモアプリが入っています。

以下のコマンドを実行するとWebアプリケーションが起動します。

$ ./bin/ringo apps/demo/main.js
0    [main] INFO  ringo.webapp.daemon  - init
1034 [main] INFO  ringo.webapp.daemon  - start
1035 [main] INFO  org.eclipse.jetty.util.log  - jetty-7.1.6.v20100715
1151 [main] INFO  org.eclipse.jetty.util.log  - Started SelectChannelConnector@0.0.0.0:8080

http://localhost:8080/を開くと何かそれっぽいものが表示されました。


ちょっと気になったのでmain.jsの中を見てみました。

// main script to start application
if (require.main == module) {
    require('ringo/webapp').main(module.directory);
}

ほんげー。
なんだかよくわかりません。