Helmaのインストール | JavaScript | プログラミング

以前、檜山研(シンメトリック社内の勉強会)の「JavaScript」チームでRhinoを使っていると紹介しました。その後、Rhinoをどんだけ使い倒したのかというと、そうでもなく・・・。Canvasやイベントハンドラなどブラウザ上で動作するJavaScriptへとテーマが移っていき、FireBugを使ってばかりでした。

ところが、最近になってまたRhinoと再会しました。デスクトップJavaScript処理系としてではなくて、サーバーサイドJavaScriptエンジンとしてのRhinoです。JVM上で動くWebフレームワークHelmaにRhinoが搭載されていた、という事情です。

サーバーサイドもJavaScriptで書けるんだ!

今、JavaScriptチーム内で少し大きな「作品」を作ろうと動いています。今はまだ企画段階。Ajaxを使うことは確定なので、サーバーサイド・プログラミングが必要になります。

そこで、サーバーサイドにHelmaを使ってみることにしました。先述のとおり、HelmaはサーバーサイドJavaScriptのWebフレームワークで、JavaScriptの実装はRhino。サーバーサイドもクライアントサイドもJavaScriptにすれば、JavaScriptチーム内の共通言語ということで誰がどの担当を持ってもよくなりますし、他言語とJavaScriptと使う言語を頭の中で行き来することもなく、いい調子で取り組めそうです。

今はまだ私自身がHelmaを使い始めたばかりですが、今後数回に分けてHelmaの使い方について解説していこうと思います。今回は、Helmaのインストール方法とWindows環境で遭遇したトラブルシューティングについてです。

Helmaのインストール

インストール方法は至って簡単です(Java実行環境は予めインストールしておいてください。Helmaの実行にはバージョン1.4以上が必要です)。

  1. Helma公式サイトからダウンロードしたzipまたはtar.gzファイルを好きな場所に解凍
  2. 解凍したディレクトリのすぐ下にあるstart.batまたはstart.shを実行
  3. http://localhost:8080/にアクセス

Helma付属のWelcomeページが表示されれば成功です。ここからリファレンスサイトなどへ行くこともでき、触りはじめのころは特に有用です。なので後述するように、このwelcomeページは取っておいた方がよいと思います。

Javaをインストールしているのに起動ができない場合は?

もしWindows環境で「指定されたパスが見つかりません。」と出力されコマンドプロンプトが終了してしまう場合があります。これには私もさんざんハマッたのですが、次のことが考えられます。

  • PATHが「%JAVA_HOME%bin」という書き方で追加されている

start.batの中を見てみると最後の行でjavaコマンドを実行する記述があります。このJAVACMDは何ぞや?JAVA_HOMEは?と遡ってみると・・・、最初の方でJAVA_HOMEを””でクリアしてしまっています。このクリア(初期化)処理、「don’t touch this section」とコメントがあるあたり、Helmaにとっては必要なようです。しかしPATHの設定が「%JAVA_HOME%bin」になっていると、このクリアの影響を受けjavaコマンドを実行できなくなってしまうのです。

以下はstart.batから実行されるコマンドですが、試しにstart.batを使わず、コマンドプロンプトから直接以下のコマンドでHelmaを起動してみてください(jarへのパスなどはHelmaをインストールした場所に応じて書き換える)。「Starting Helma 1.6.3 (November 25 2008) on Java 1.5.0_19」といった出力がされ、起動できるはずです。

java -jar "C:helma\launcher.jar" -w 8080 -h "C:helma

%JAVA_HOME%binの代わりに実際のパスをPATHに追加すれば、そのままのstart.batで起動できます。環境変数を変えたくない場合はstart.batを変更します。しかしここにも注意点が1つ。JDK(またはJRE)のインストール先が「Programs Files」の下だと、ディレクトリパスの途中のスペースが厄介です。JAVA_HOMEをセットするところではダブルクォートを付けず、最後のjavaコマンドを実行するところでは「%JAVACMD%」の両端にダブルクォートを付けるようにしてください。「C:jdk_1.5.0_19」のようにスペースを含まないパスならば最後のダブルクォートを付けるところは不要です。

(略)
:: Uncomment to set JAVA_HOME variable
set JAVA_HOME=C:Program FilesJavajdk_1.5.0_19
(略)
:: Invoking the Java virtual machine
"%JAVACMD%" %JAVA_OPTIONS% -jar "%INSTALL_DIR%launcher.jar" %OPTIONS%

もっとサクッといくはずだったのに(愚痴)

このトラブルは、自分のPCと社内のLinuxで難なくHelmaを動かした後、別のWindowsPCに同じ方法でインストールした際に遭遇しました。「パスが見つかりません。」なんていかにもJava環境不備によるもの。でも既にJDKがインストールされているし、「java -version」を打つとしっかりバージョン情報が出力される。Rhinoを起動してみるといつも通り動く・・・。まず、batファイルをダブルクリックで実行しても(すぐに終了するから)何が何やらわからない。なのでコマンドプロンプトから実行するところから始め、どうしてこんなことになるのかの全体がわかるまでに結構な時間を使ってしまいました。

実はbatファイルを修正して動かしたのが先で、檜山さんとJavaScriptメンバーとでbatファイルとにらめっこして解決しました。しかしどうも納得がいかない。お手軽だと思っていたHelmaの起動にこんなにもつまづくものなのかと。そこでもう一度環境を見直した末、先ほどのPATHの記述に原因があることにようやく気がついたのです。すっかりハマりました。

Welcomeページを別のURLパスにする

Welcomeページは有用なので取っておきましょうと書きました。しかしルートへのアクセスがWelcomeページなのはちょっと不都合なので、/welcomeにURLを変更します。

Helmaインストールディレクトリ(以下Helmaホームとします)下の、apps.propertiesを次のように書き換えます。

before

welcome
welcome.mountpoint = /

after

welcome
welcome.mountpoint = /welcome

Helmaの再起動は要らず、そのまま「http://localhost:8080/welcome/」でアクセスができるようになります。Helmaの設定ファイルは編集したら即有効になるので、手間が要らなくていいですね。

起動はできたが・・・停止方法は?

start.batはあってもstop.batのようなものはHelmaホーム下のどこにも見つかりません。Helmaを完全に停止したい場合は起動の際に立ち上がったコマンドプロンプトを閉じてしまうしか・・・。

ローカルで作業するだけならばブチッと切ってしまうのもいいですが、Linuxでサーバーとして稼動させておくには使いにくいです。なのでLinuxではバックグラウンド実行にして立ち上げたままにしておきます。「http://helma-server:8080/manage/」は管理ページで、そこからアプリケーションのrestart/stop/startを操作します。因みにLinuxでHelmaを完全に停止するには、javaプロセスをKILLするしかないようです。

次回予告

今のところ、以下のようなHelmaに関するトピックを予定しています。使いながら「ナルホド」「これはハマッた」といったことがあれば、投稿を増やしてHelmaに関する情報を充実させられればと。

  • 簡単なページを作ってみる(hacファイル、skinファイル)
  • 日本語が化けるんですけど・・・の対処
  • リクエスト(req)、レスポンス(res)を使ったサーバサイドらしいこと