Lift2.0から2.2M1までのリリースノート
http://liftweb.net/22_m1
http://liftweb.net/21_ga
http://liftweb.net/20_ga
Lift2.0からたくさんの機能追加がありました。
目立つものにはLiftMapperの後継としてLiftRecordを使って各Key-Valueストアをサポートしたことなどが挙げられますが、ここでは主に、テンプレート周りの変更についてまとめておきます。
Lift2.0からScala2.8とsimple-build-toolが正式サポートされたので、Scala2.7とMavenは捨てる方向で。
-------------------------------------------------------
Lift1.1のころのMavenを使う方法から、sbtプロジェクトテンプレートをダウンロードする方法がメインになりました。
http://liftweb.net/download
「DOWNLOAD and run using SBT」からLift2.2M1のZipをダウンロード。
解凍すると、lift_basic/lift_blank/lift_mvcがありますが、今回はデータ層は使わないので、lift_blankを使って遊んでみます。
> cd lift_blank
> sbt
sbt> update
sbt> jetty-restart
-------------------------------------------------------
LiftWiki:Designer Friendly Templates
従来は、
テンプレート上のliftタグにスニペットで編みこんで出力する、という仕様でしたが、XHTMLのclass属性にSnippet名を指定することで、同様の処理ができるようになった。
これによって、XHTMLのデザインを全く壊すことなく、スニペットの編みこみができるというもの。
スニペット側は変更する必要はありません。
さらに便利なのはCSSセレクタを利用して、探索したタグに編みこむこともできる。
変わった点をまとめると
テンプレート側:
<lift:>を始め、面倒なXMLサフィックスがなくなった。
ブラウザでそのまま表示できるHTMLファイルになった。
Snippet側:
メソッドの戻り値はnet.liftweb.util.CssBindFuncとなった。
bindする文字列をTextなどに変換しなくて良い。
さらに引数は定義しなくて良い。
Helper.bindメソッドの煩わしさがない!
・・など、Programmer Friendlyな結果になっている。
これはLift2.2に乗り換えるしかなくなった!!というくらいの衝撃です。
CSSセレクタとbindできる型のバリエーションなどは、
LiftWiki:Binding via CSS Selectorsを参照。
-------------------------------------------------------
Liftは基本的にViewFirstのアーキテクチャですが、StrutsやRailsのようないわゆるMVCで開発したい人もいるでしょう。そんなに「どうしてもMVC使いたい」なら、こんなオプションあるよ。という機能のようです。
LiftWiki:MVC (if_you_really_want_it)
前述のCssBindFunc採用の副産物っぽい感じです。
正直、MVCベースに開発したいなら無理にLiftを使うより、
Play Framework for Scalaなどを使う方が賢い選択とは思いますが、
「この部分だけはMVCで作ったほうがきれいだ!」みたいなケースもあるかもしれないです。
やってみよう。
まずテンプレートからSnippetの指定を取り除く。
コントローラーを記述する。
こちらのアプローチの方が、条件によるテンプレートの切り替えや使いまわしが簡単にできることがわかる。
コントローラーをBootに登録して実行。
コントローラーが肥大化するようなら、複数に分けてLiftRules.dispatch.appendすれば良いし、以下のようにもできるはず。
思った以上に楽で、Liftがとたんに普通のフレームワークに見えてきましたっ
----------------------------------------------------
Liftのテンプレートエンジンは、XHTMLとSnippetによる独自のもの(LiftView)ですが、Scalateも利用できるようになりました。
Scalateは、数種類のテンプレートエンジンのセットですが、Liftでは、SSPとScamlが利用できるようになってます。いずれもScalaの評価式を直接テンプレートに埋めていくもの。
Mustacheがサポートされないのは残念。Scueryと似たことは前述のDesigner_Friendly_Templatesで実現できます。
LiftViewとScalateの比較記事がありますが、ケースバイケースですね。という結論のようです。
ちょっとしたページ作るのにいちいちSnippetとかやってらんねーという場合は良いと思いますが、JSPに懲りてしまうようなケースでは使わない方がよさそう。と個人的に思います。
使い方
lift_blank/project/build/LiftProject.scalaの
libraryDependenciesに以下を追記
sbt> reload
sbt> update
Boot.scalaに以下を追記。
あとは、*.scamlや*.sspを開発して配置するだけだと思います。(動作確認はしてません)
サンプルは、以下にあります。
helloscalate