ScalaでWeb開発 (2) Lift Blankで開発の流れをつかむ

2010-11-16

ScalaでWeb開発 (2) Lift Blankで開発の流れをつかむ

前回、Liftを導入して、開発用Webサーバで動作させるところまでやった。 今回は、実際にMaven, Scala, Liftでどんな感じで開発を行っていくのか、実際に動かしながら掴んでみる。  

1. Lift Blankプロジェクト作成

  前回作ったのはLift Basic。今回はLift Blankという文字通り空っぽいLiftプロジェクトを作成。

1
2
3
4
5
6
7
8
9
mvn archetype:generate \
-DarchetypeGroupId=net.liftweb \
-DarchetypeArtifactId=lift-archetype-blank_2.8.0 \
-DarchetypeVersion=2.1 \
-DarchetypeRepository=http://scala-tools.org/repo-releases \
-DremoteRepositories=http://scala-tools.org/repo-releases \
-DgroupId=com.company \
-DartifactId=lift_blank \
-Dversion=1.0

※プロジェクトのタイプ指定は上から3行目のarchetypeArtifactId。プロジェクト名は下から2行目のartifactId。 開発用Webサーバのjettyを起動

1
mvn jetty:run

http:localhost:8080にアクセスすると、以下のようなブランクな画面が出る。 [caption id=”attachment_1010” align=”aligncenter” width=”300” caption=”LiftのBlankプロジェクト”]![lift blank](http://cdn.hanhans.net/images/2010/11/lift _blank-e1289836209847-300x142.png)[/caption] で、動いたからと言って、(゜Д゜ )ナニカ? これだけではどうにもならん。  

2. 編集・再コンパイル・ブラウザ確認の1サイクルをやってみる

  まずは、ディレクトリ構成を眺める。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
$ tree
.
├── pom.xml
├── project
│   ├── build
│   │   └── LiftProject.scala
│   └── build.properties
├── src
│   ├── main
│   │   ├── resources
│   │   ├── scala
│   │   │   ├── bootstrap
│   │   │   │   └── liftweb
│   │   │   │   └── Boot.scala
│   │   │   └── com
│   │   │   └── company
│   │   │   ├── comet
│   │   │   ├── model
│   │   │   ├── snippet
│   │   │   │   └── HelloWorld.scala
│   │   │   └── view
│   │   └── webapp
│   │   ├── WEB-INF
│   │   │   └── web.xml
│   │   ├── index.html
│   │   └── templates-hidden
│   │   └── default.html
│   ├── packageLinkDefs.properties
│   └── test
│   ├── resources
│   └── scala
│   ├── LiftConsole.scala
│   ├── RunWebApp.scala
│   └── com
│   └── company
│   └── AppTest.scala
└── target
     └─(この下は割愛)

 

2-1. 編集

ひとまず、(1)サーブレットで値をセット (2)Viewで表示 という簡単なコードを追加してみる。 ・サーブレット編集

1
vi src/main/scala/com/company/snippet/HelloWorld.scala

【変更内容】

1
2
3
4
$ diff HelloWorld.scala HelloWorld.scala~
11,12d10
< def doody(in: NodeSeq): NodeSeq =
< Helpers.bind("i", in, "hanhan" -> "something new string")

  ・Viewを編集

1
vi src/main/webapp/index.html

【変更内容】

1
2
3
4
5
$ diff index.html index.html~
7,9d6
<
<
<

 

2-2. 再コンパイル

自動では再コンパイルされない。なので、jettyをctrl+cで止めて、もう一度起動。

1
mvn jetty:run

※冴えないやり方だ・・・。  

2-3. ブラウザで確認

http:localhost:8080に再アクセス [caption id=”attachment_1050” align=”aligncenter” width=”300” caption=”コンパイルされて変更が反映された。”]lift blank editted[/caption]   上のままのやり方では、効率が悪いけど、とりあえず開発作業のサイクルは出来た。 明日以降は、下のメニューでLiftに触れ合っていく予定。

  • ホットデプロイ
  • git連携
  • 自動テスト
  • hudson連携