unoh.github.com

JavaScriptだけでWebサイトが構築できるHelma

Fri Oct 12 03:11:00 -0700 2007

初めまして。今月、ウノウに入社しましたNAKAMURAです。今後ともよろしくお願いします。

最近のWebサイトでは、DHTMLの操作やAjaxなど、JavaScriptが欠かせない存在となってきていますが、そんなJavaScriptでサーバーサイドも構築できるHelmaについて取り上げてみたいと思います。

Helmaとは?

HelmaはJetty上で動くJavaで実装されたフレームワークです。サイト構築にはJavaScriptを利用します。Apacheで例えるならmod_javascriptといったところでしょうか(Apacheモジュールとして動くJavaの実装にはmod_gcjというものもあります)。JavaScriptの実装には、Java6に組み込まれているRhinoが利用されています。

サーバーサイドでJavaScriptを利用するという特徴以外にも、一般的に必要とされるようなテンプレートやマクロなどの機能も兼ね備えています。

インストール

さっそくインストールをして動かしてみます。HelmaはWindowsやMacOSXでも動作しますが、ここではOSにLinux(Fedora6)を利用しています。

$ cd ~/
$ wget http://adele.helma.org/download/helma/1.6.0/helma-1.6.0.tar.gz
$ tar zxvf ./helma-1.6.0.tar.gz

適当な場所にダウンロードをして解凍します。インストール作業自体はこれで終了となります(ただし、Javaの1.4以上がインストールされている必要があります)。

それでは、Helmaを起動してみます。

$ cd ./helma-1.6.0
$ ./start.sh

start.shの中でjarを実行しています。デフォルトではポートが8080になっていますので、これで「http://localhost:8080/」にブラウザでアクセスすることができます。

Helma Welcome Page
Helma Welcome Page posted by (C)フォト蔵

アクセスすると、このようなWelcomeページが開きます。このWelcomeページ自体がサンプルアプリケーションのようになっていますので、構成を理解するには、apps/welcome配下を確認すると良さそうです。

Helma入門

ここでは、新規にページを作成して、スキンファイルの読み出しまでをやってみます。

まず、apps.propertiesに以下のように記述します(manageやwelcomeの設定は先頭に#を付けてコメントアウトしています)。

hello
hello.mountpoint = /
hello.repository.0 = apps/hello/code/

次にルートディレクトリを作成します。

$ mkdir -p ./apps/hello/code/Root

呼び出されるコードを配置します。「./apps/hello/code/Root/sample.hac」というファイルを作成して、以下のように記述します。

res.write("Hello World");

これで、「http://localhost:8080/sample」にアクセスして「Hello World」と表示されれば成功です。.hacを取り除いた名前がURIと対応しています。

.hacファイルはJavaScriptで記述します。JavaScriptからの出力ができたところで、テンプレートを呼び出してみます。

「./apps/hello/code/Root/sample.hac」を以下のように変更します。

function plus(a, b) {
  return a + b;
}
this.result = plus(10, 20);
this.renderSkin("sample");

次に、スキン(テンプレート)ファイルを作成します。「./apps/hello/code/Root/sample.skin」というファイルを作成して、以下のように記述します。

<html>
<body>
  <p>Result: <% this.result %></p>
</body>
</html>

「http://localhost:8080/sample」にアクセスして「Result: 30」と表示されれば成功です。このようにスキンファイルを利用することで、JavaScriptのロジックとHTMLの出力を分離することができます。また、ここでは触れていませんが、JavaScript側でリクエストやレスポンスのオブジェクトを参照することもできます。

まとめ

サーバーサイドにJavaScriptが利用できるフレームワーク、Halmaについて紹介しました。設定ファイルによるセッティングやマクロの定義など、一通りは実装されているようです。

国内で採用された例は今のところ聞いたことがないのですが、ご興味の湧いた方は一度触ってみてはいかがでしょうか。

開発に関するドキュメントについては、本家サイトにまとめられています。

また、、日本語の情報としては、以下のエントリが良くまとまっていましたので、参考にさせて頂きました。感謝いたします。