カスタム検索
ラベル scala の投稿を表示しています。 すべての投稿を表示
ラベル scala の投稿を表示しています。 すべての投稿を表示

2009年12月26日土曜日

Lift On!

Scalaに引き続きLiftのテスト

・Mavenが入っていると簡単

mvn archetype:generate -U -DarchetypeGroupId=net.liftweb -DarchetypeArtifactId=lift-archetype-basic -DarchetypeVersion=1.0 -DremoteRepositories=http://Scala-tools.org/repo-releases -DgroupId=demo.helloworld -DartifactId=helloworld -Dversion=1.0

で雛形からなにやらダウンロードしてくれる

・helloworld というフォルダがプロジェクトになっているので、ここへ移動して jetty で起動する

cd helloworld
mvn jetty:run

で、 http://localhost:8080 へアクセスすると、Liftの初期画面が表示される
はじめからユーザ管理とかついているので、sign upでアカウントを作るとユーザ画面が表示される!
速度はなかなかいい感じ
初期はH2Databaseでファイルに保存されてます。

LiftにはMVCでいうControllerの部分が明示的に存在しない
ではどうするのかというと、Viewをメインに考えてSnippetをいうものを使う
Snippetはパーツみたいな感じで、Viewにタグでぺたぺた貼り付けるという感じ、、、であってるかな |-`)

サンプルプロジェクトでは、HelloWorldというSnippetが入っている
src/webapp/index.html内の
<p><lift:helloWorld.howdy /></p>
という部分でスニペットを読んでいる

スニペットの中身は
def howdy = <span>Welcome to helloworld at {new _root_.java.util.Date}</span>

という事なので、画面上には
Welcome to helloworld at Sat Dec 26 16:43:00 JST 2009
と表示されているわけだ!スゲー!

・せっかくなんでスニペットを作ってみる
def sample = <span>日本語テスト 1+1={1+1}</span>

index.htmlへタグを追加
<p><lift:helloWorld.sample /></p>

表示されました!
日本語テスト 1+1=2


ですが、残念な事にSnippetのHotDeployに対応していません・・・
と思ったらやっぱりみんな同じことを考えているようです。

JavaRevelってのとmvn scala:ccを使って実現しています。
・Liftにあるpom.xml(Jettyの設定ファイル)にある scanIntervalSeconds を 0 にする。
・MAVEN_OPTS=“-noverify -javaagent:/path/javarebel.jar” を設定する
・mvn jetty:run して、別のコンソールから同じフォルダで mvn scala:cc する
で、自動的にscalaファイルがコンパイルされて、JavaRebelがリロードしてくれます。

でもやっぱりフレームワークで吸収してほしいなぁ
そこらへんはGrailsの方が便利ですね

Scalaはじめました

勉強会でScalaの紹介があったので、聞きながら試してみた

・Scalaのダウンロード

http://www.scala-lang.org/downloads からMac版をダウンロード
適当な場所に解凍して bin/scala を実行

Welcome to Scala version 2.7.7.final (Java HotSpot(TM) 64-Bit Server VM, Java 1.6.0_17).
Type in expressions to have them evaluated.
Type :help for more information.

scala>

・とりあえずハワロ!

scala> println("Hello World!")
Hello World!

・このままじゃ面白くないので、ファイルにして実行

hello.scala

println("Hello World!")

[yossy@yossy-MacBook]# scala hello.scala
Hello World!

・順調なので、クラスを作ってみる

object HelloWorld {
def main(args: Array[String]) {
if(args.length > 0) {
println("Hello "+args(0)+"!")
} else {
println("usage: HelloWorld {yourname}")
}
}
}

scalac hello.scala
でクラスファイルが出来る(コンパイル遅い気がする)

・クラスファイルを実行

[yossy@yossy-MacBook]# scala -cp . HelloWorld
usage: HelloWorld {yourname}
[yossy@yossy-MacBook]# scala -cp . HelloWorld yossy
Hello yossy!

classファイルだけど、scalaのライブラリが必要なのでそのままjavaで使えるわけではない。この辺はgroovyと同じです。

MVCフレームワークのLiftってのがあるので今度はそれを試してみようかなぁ