Apatna Jaxerとは?
サーバサイドJavaScriptとは,その名の通りサーバ側で実行するJavaScriptのことです。
JavaScriptはクライアントのブラウザ上で実行するもの,というイメージが強いので,サーバ側で実行すると言われても,ピンと来ない方も多いかもしれません。
サーバサイドJavaScriptのエンジンは,いくつかのプロダクトが登場しています。Javaによる実装のRhinoやCによる実装のSpidermonkeyは,その代表格になります。
先日,統合開発環境Aptana Studioで有名なAptana社が,サーバサイドJavaScriptを実現する"Ajaxサーバ"Aptana Jaxer(以下,Jaxer)を発表しました。
Ajaxサーバ,とは耳慣れない言葉ですが,Jaxerの特徴をずばりと言い表すために作った造語だと思います。Jaxerを利用すると,Ajaxアプリケーションをシンプルに作ることができます。
本連載では,Jaxerの特徴から,簡単なサンプルアプリケーションの構築までを解説していきます。
Jaxerのここが素敵
まず手始めに,本家Jaxerのサイトに書かれているJaxerの特徴から,サーバサイドJavaScriptのメリットを挙げていきたいと思います。
1.たった1つのファイルでAjaxのアプリケーションやプレゼンテーションレイヤを全て記述できる
JaxerのコードはHTMLに,以下のように記述します。
<body>
<script runat="server"> ... </script>
<script runat="both"> ... </script>
<script runat="client"> ... </script>
<script runat="server-proxy"> ... </script>
</body>
※html,headタグは割愛しています。
パッと見て分かるように,scriptタグにrunatという属性が拡張されています。このrunat属性は,そのscriptタグ中のコードをサーバとクライアントのどちら側で実行するかを指定するものです。
それぞれの値の意味は以下のようになります。
- server:サーバのみで利用されるコードを記述します。ここに記述した内容は,ページ出力時にカットされ,ユーザは見られないようになっています。
- both:サーバ,クライアントの両方で利用されるコードを記述します。
- client:クライアントのみで利用されるコードを記述します。runat属性を省略した場合は,runat="client"と同じ処理になります。
- server-proxy:クライアントからサーバ側での処理を呼び出したいとき,ここに記述します。ページ出力時にはクライアント側からサーバへ関数をコールする内容に置き換えられます。
runatの値がserverとclientだけなら,PHPとあまり変わらないかも知れませんが,server-proxyという値を利用することにより,ページ表示後にAjaxでサーバ側と非同期通信する部分のコード量/ファイル数が激減します。
例えば,ページ表示後,Ajaxでサーバにアクセスして情報Aを取得しようとしたとき,PHPで実装すると,表示ページと情報Aを返すページの2つのphpファイルが必要になり,JavaScriptの中でもいちいちAjaxのコードを書かなければいけませんが,Jaxerでは情報Aを返すだけのページや,Ajaxのコードを書く必要はなくなります。
2.サーバサイドのJavaScriptでDOMが利用できる
Jaxerでは,サーバサイドでのDOM操作が可能になっています。
つまり,Prototype.jsやjQueryなどのライブラリを,サーバサイドで利用することができるのです。
例えば,値'foo'をid="hoge"のdivタグのテキストノードに指定したい場合,
document.getElementById('hoge').innerHTML = 'foo';
と書くことができます。サーバサイドでjQueryを利用すれば、さらに
$('#hoge').text('foo');
とより簡単に書くことが可能です。
これまでクライアントサイドのJavaScriptで培ってきたテクニックを,そのままサーバサイドのJavaScriptで活かすことができます。
ただし,ライブラリなどは完全にはサポートされていないので注意が必要です。jQueryのサポート状況は,Jaxerに付属しているjQueryのテスト実行ページで確認することができます。

