Liftとは
Scalaで書かれたWebアプリケーションフレームワークです。現存の Seaside, Rails, Django, TurboGears, Wicket などのいいとこ取りのフレームワークとされています。
ここでは、http://wiki.liftweb.net/index.php/HowTo_start_a_new_liftwebapp にあるHowTo start a new liftwebapp を参考に、Liftを用いた簡単なWebアプリケーションを作成してみます。
Liftプロジェクトの作成
新しい Lift プロジェクトを作成します。ここでは Apache Maven 2.2.1 を利用します(既にMavenは導入済みとします)。Lift プロジェクト用に Maven の Archetypes が用意されていますので導入は非常に簡単です。
それでは、Mavenを使用してLiftプロジェクトを作成しましょう。以下のコマンドをコマンドプロンプトより入力します。
mvn archetype:generate \ -DarchetypeRepository=http://scala-tools.org/repo-releases \ -DarchetypeGroupId=net.liftweb \ -DarchetypeArtifactId=lift-archetype-basic \ -DarchetypeVersion=1.1-M5 \ -DgroupId=net.liftweb.hello \ -DartifactId=hello-lift \ -Dversion=1.0
ちなみに Windows Power Shell ではなく、コマンドプロンプトで実施しましょう。なお、上記は実際には1行で入力します。
または、以下のようにするとインタラクティブに値を設定できます。
mvn archetype:generate -DarchetypeCatalog=http://scala-tools.org/
新しくプロジェクトが作成されたら、以下のコマンドで実行してみます。
$ cd hello-lift $ mvn jetty:run
初回はいろいろなライブラリをダウンロードするため時間がかかりますが、以下の出力が得られればJettyの起動は完了となります。
・・・ 2009-09-28 15:07:19.684::INFO: Started SelectChannelConnector@0.0.0.0:8080 [INFO] Started Jetty Server [INFO] Starting scanner at interval of 5 seconds.
ブラウザから動作確認してみましょう。
http://localhost:8080/
新しい静的ページの追加
Lift は view-first な Web アプリケーションフレームワークです。ビューの中にsnippetと呼ばれるコード断片を埋め込んでいくことでアプリケーションを構築していきます。ここでは、まず静的なページから開始しましょう。
Lift はリクエストに応じた適切なビューテンプレートを見つけようとします。ビューテンプレートは src/main/webapp/ に配置されます。ここでは、/test でアクセスできる新しいページ、test.htmlを作成します。
<html xmlns="http://www.w3.org/1999/xhtml"> <body> Hello Lift </body> </html>
次にLiftアプリケーションとしてアクセスできるようにプロジェクトの SiteMap を編集します。プロジェクトの SiteMap はデフォルトでBoot.scalaにて定義されています。src/main/scala/bootstrap/liftweb/Boot.scala にあるBoot.scalaを編集します。以下の記述を、
// Build SiteMap val entries = Menu(Loc("Home", List("index"), "Home")) :: Menu(Loc("Static", Link(List("static"), true, "/static/index"), "Static Content")) :: User.sitemap
以下のように編集します。
val entries = Menu(Loc("Home", List("index"), "Home")) :: Menu(Loc("Static", Link(List("static"), true, "/static/index"), "Static Content")) :: Menu(Loc("Test", Link(List("test"), true, "/test"), "Test Page")) :: User.sitemap
編集後、以下のようにJettyを起動して、
$ mvn jetty:run
http://localhost:8080/testにアクセスしてみます。Hello Lift と出力されれば成功です。
ラッパーテンプレート
Liftアプリケーションは、src/main/webapp/templates-hidden/default.html にあるラッパーテンプレートを使用することができます。先ほどのtest.htmlを以下のように修正することで、ラッパーテンプレートが利用されるようになります。
<lift:surround with="default" at="content"> Hello Friends! </lift:surround>
再度http://localhost:8080/testにアクセスしてみると、以下のようにラッパーテンプレートが適用された画面が表示されます。
lift:snippetの利用
これまでのサンプルでは静的なページを表示してきましたが、ここでは動的なページを表示してみます。Liftでは、ページに文字を埋め込むためのsnippetという仕組みが提供されています。
lift:snippet を利用するために、先ほどの test.html を以下のように修正します。
<lift:surround with="default" at="content"> Hello <lift:snippet type="Lift:show" />! </lift:surround>
続いて、src/main/scala/net/liftweb/hello/snippet/Lift.scala というファイルを用意して、以下のように記述します。
package net.liftweb.hello.snippet class Lift { def show = <span>Lift {(new _root_.java.util.Date).toString}</span>; }
再度http://localhost:8080/testにアクセスしてみると、現在日時が動的に生成されていることが分かります。