最近JavaScriptづいていて、サーバサイドもJavaScriptで書きたいなぁと思っていたところに、AptanaからJAXERなるAjax Serverがリリースされたとのニュースがあったので、渡りに船とばかりに触ってみました。
とりあえず動かしてサンプルを見るまでは超簡単。興味がある人は試してみると良いよ。
ということで遊んでみた内容のメモ。
環境構築
JaxerのホームページのDownloadをクリックして、"Download Jaxer for Windows (.zip)"をダウンロード。
ダウンロード後、解凍して、必要なら任意のディレクトリに移動。
解凍後のルートディレクトリにある"StartServer.bat"を実行すると、http://localhost:8081/aptana/ にアクセスすることができます。※環境によってはセキュリティソフトから、Jaxer やApache がネットワークに接続することを許可しろとか言われます。
これだけでOK。もはや環境構築と呼ぶまでもない簡単さです。
サンプルで遊ぶ
上記URLのページを表示して、左側のSample And Tools をクリックすると、サンプルの一覧が表示されます。
サンプルの内容は見たまんま、メール送信やRSS取得、タスク管理、チャットなんかが扱えます。個人的にはタスク管理やチャットが普通にまんま使えそうかなと思ったり。
各サンプルは、画面の右上に「HTML」マークがあって、そこからソースを見ることができます。
タスク管理やチャット、wikiにユーザ情報等は、付属のSQLiteに保存されます。つまり、サーバ側で、JavaScriptからDBを操作するAPIが提供されています。
一番下のjQuery Compatibilityは、サーバサイドでjQueryのtest suitsを実行した結果が見られます。そこそこ動くようですが、100%ではないようです。↓こんなメッセージが表示されてます。
PLEASE NOTE: The current jQuery test Suite has a number of tests which currently fail. We are working to extend the test coverage to be as complete as possible.
サンプルをちょっと改良して見たいなと思った場合、サンプルの実ファイルは、<Root directory>/jaxer/aptana/samples にあります。
例えばRSS Sample のRSSの取得先を自分のブログにしてみます。
<Root directory>/jaxer/aptana/samples/rss-sample/index.html の
var feed = Jaxer.Web.get("http://www.news.com/2547-1_3-0-20.xml?tag=pre_ft");
のURLを好きなRSSのURLに書き換えて、アクセスすればOKです。※サンプルページに文字コードの指定がないので、文字化けしてしまうこともあります。
自分でアプリを作ってみる
自分でアプリを作る場合は、<Root directory>/public の下にファイルを配置します。
ページ中にJaxerの読み込みがうまくいくと、
<script type="text/javascript">/** Jaxer clientFramework_compressed.js -
こんな行が、ページのソース中(上部)に書き出されます。
動的な部分はJavaScriptで定義していきます。
<script runat="server">と書かれたタグはサーバ側で動作するJavaScript、<script runat="client">と書かれたタグはクライアント側で動作するJavaScript、<script runat="both">と書かれたタグは両方側で動作するJavaScriptとなります。
DBに接続してSQLを発行したりするJavaScriptはサーバ側にしか書けません。そこで定義された関数をクライアント側から呼び出すことができます。
例えば、サーバ側の関数hoge()をクライアント側から呼び出したいときは、
<script type="text/javascript" runat="server">
function hoge(){
}
hoge.proxy = true;
</script>
としておきます。最後のhoge.proxy = ture;がポイントです。これにより、ページが生成されるとき、
<script type="text/javascript">
function hoge() {return Jaxer.remote("hoge", arguments);}
function hogeAsync(callback) {return Jaxer.remote("hoge", arguments, callback);}
</script>
というコードがクライアント側に生成され、クライアント側からサーバ側にアクセスし、結果を受け取るということができます。
注意点としては、クライアント側から呼び出したい(つまりhoge.proxy = trueとしたい)関数は、外部.jsファイルではなく、ページ中に書いてある必要があるようです。(これでちょっとはまりました)
Jaxerのウリ
Jaxerの公式サイトトップページに書いてあることですが、以下の点がポイントになります。
- アプリケーションを.html と.jsファイルで構築できる。
- サーバ側で、htmlのDOMにアクセスするような記述ができる。
- ブラウザとサーバがシームレスにコミュニケーションできる。
- 既存の他の言語で書かれたページにアクセスできる(既存資源を活かせる)。
- Validationコードをブラウザとサーバで共有できる。
- データベースやファイル、ソケット通信がJavaScriptから可能になる。
- 最新のJavaScript標準に則ってる。
個人的にはValidationコードをサーバとクライアントでシェアできるというのが嬉しいですね。Javaでアプリを作っていて、ブラウザ側のチェックとサーバ側のチェックの仕方が微妙に異なり、それがバグにつながるなんてことが結構起こりやすいので。
ただ、サーバ側のJavaScriptファイルがエンドユーザに見えてしまう可能性があるという点がちょっとだけ気になります。SQLとか丸見えだしね。僕が触ったバージョンだと、サーバのJaxerでエラーが発生したとき、クライアント側にサーバ側のJavaScriptソースがまるっと見えちゃって、これはちょっとと思いました。この辺は今後改善されていくのだろうと思います。
というわけで、これを使ってちょっとしたアプリを作ってみようかなと。サンプルを改造するだけでもそこそこのものができそうですし。
興味が沸いた方は、この土日に是非遊んでみてください。
<参考リンク>
コメント (2)
おぉ!サーバーサイドJavaScriptだ!
> ・Validationコードをブラウザとサーバで共有できる
↑個人的にはこれ熱いなぁ
> ・データベースやファイル、ソケット通信がJavaScriptから可能になる。
↑ロックとかトランザクションとかサポートしてくれる
JavaScriptのフレームワークとか出てくるのかねぇ
っていうか、クライアントとサーバーで
同じ言語使えるっていうのは、いいよね~
Posted by: しのはらです。 | 2008年1月26日 21:07
そうなんだよー。
クライアント側のJavaScriptチェックって結構開発者に疎ましく思われがちなので、じゃあいっそサーバ側も、みたいな、ね。
Posted by: Chris | 2008年1月31日 23:37