sgykfjsm.github.com

scalatraでいろいろやる その1

Set up

Scaltraをインストールする前に以下の4つがインストールされていることを確認する。

  1. JDK
  2. SBT
  3. conscript
  4. giter8

JDK

いつものコマンドで確認。

[sgyk@fujishima] 13-02-21 22:48:43 ~/local/tmp
$ java -version
java version "1.7.0_15"
Java(TM) SE Runtime Environment (build 1.7.0_15-b03)
Java HotSpot(TM) 64-Bit Server VM (build 23.7-b01, mixed mode)

JDKが入ってなければ、Java SE Development Kit 7 Downloadsからダウンロードして入れておく。

SBT

Scalaやってれば入ってるはず。自分の場合は起動してみたらdeprecatedって言われた。

[sgyk@fujishima] 13-02-21 22:34:01 ~
$ sbt
[warn] Alternative project directory .sbt (/Users/sgyk/.sbt) has been deprecated since sbt 0.12.0.
[warn]   Please use the standard location: /Users/sgyk/project
[info] Loading project definition from /Users/sgyk/.sbt
[info] Set current project to default-bf7818 (in build file:/Users/sgyk/)

のでbrewで入れなおした。

sgyk@fujishima] 13-02-21 22:34:44 ~
$ brew uninstall sbt
Uninstalling /usr/local/Cellar/sbt/0.12.1...
[sgyk@fujishima] 13-02-21 22:34:51 ~
$ brew install sbt
==> Downloading http://typesafe.artifactoryonline.com/typesafe/ivy-releases/org.scala-sbt/sbt-launch/0.12.2/sbt-launch.jar
######################################################################## 100.0%
==> Caveats
You can use $SBT_OPTS to pass additional JVM options to SBT.
For convenience, this can specified in `~/.sbtconfig`.

For example:
    SBT_OPTS="-XX:+CMSClassUnloadingEnabled -XX:MaxPermSize=256M"
==> Summary
🍺  /usr/local/Cellar/sbt/0.12.2: 3 files, 1.1M, built in 9 seconds

Conscript

ConscriptはScalaとかその関連ツールをインストールしたりアップデートするツールらしい。

  • Queries a github project for launch configurations
  • Writes these to your local filesystem, with a personalized boot path
  • Creates scripts to execute the launch configurations


で、このあとにインストールするgiter8がこれに依存してるのでインストールする必要がある。

curl https://raw.github.com/n8han/conscript/master/setup.sh | shでインストールすればOK。

giter8

giter8については、ここを読めば、色々書いているけど、要はテンプレートを作ってれるツールらしい。

Giter8 は github 上に公開されたテンプレートからアプリケーションのひな形を作成するコマンドラインツールだ。 Scala で実装されており、 sbt のランチャー を使って起動するが、様々な用途に使える。

とりあえず cs n8han/giter8でインストール。
なんか色々落としてくるので、ちょっと時間がかかる。無事にインストールができたら確認。

[sgyk@fujishima] 13-02-21 22:49:13 ~
$ which g8
/Users/sgyk/bin/g8

first project

そんなこんなセットアップが終わったら、早速Scalatraのプロジェクトを作る。

Build Project

g8 scalatra/scalatra-sbt プロジェクトを作りたいディレクトリ位置で実行する。

[sgyk@fujishima] 13-02-21 22:56:51 ~/local/script/scala
$ g8 scalatra/scalatra-sbt
organization [com.example]: com.sgykfjsm
package [com.example.app]: com.sgykfjsm.app
name [My Scalatra Web App]: Scalatra Test
scalatra_version [2.2.0]:
servlet_name [MyScalatraServlet]: MyFirstScalatraServlet
scala_version [2.10.0]:
version [0.1.0-SNAPSHOT]:

Template applied in ./scalatra-test

色々聞かれるけど適当に答えておけば良い。未入力部分は[]部分のデフォルトが適用されるんだと思う。

出来上がったプロジェクトに入ると以下の様な構成になっている。

[sgyk@fujishima] 13-02-21 22:58:06 ~/local/script/scala
$ cd scalatra-test/
[sgyk@fujishima] 13-02-21 22:58:12 ~/local/script/scala/scalatra-test
$ ls -l
total 48
drwxr-xr-x   7 sgyk  staff    238  2 21 22:57 .
drwxr-xr-x  20 sgyk  staff    680  2 21 22:58 ..
-rw-r--r--   1 sgyk  staff    756  2 21 22:57 .gitignore
-rw-r--r--   1 sgyk  staff    224  2 21 22:57 README.md
drwxr-xr-x   5 sgyk  staff    170  2 21 22:57 project
-rw-r--r--   1 sgyk  staff  14321  2 21 22:57 sbt
drwxr-xr-x   4 sgyk  staff    136  2 21 22:57 src

色々な依存関係を開発前に解決しておきたいので、sbtに実行権限をつけて、sbtを実行しておく。
ここでも時間がちょっとかかるので、しばし待つこと。回線が細いと大変かもしれない。

sbtが無事に起動したら、プロンプトがそのまま生きているので、試しにScalatraを起動してみる。

> container:start
[info] Generating /Users/sgyk/local/script/scala/scalatra-test/target/scala-2.10/resource_managed/main/rebel.xml.
[info] Compiling Templates in Template Directory: /Users/sgyk/local/script/scala/scalatra-test/src/main/webapp/WEB-INF/templates
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
[info] Compiling 5 Scala sources to /Users/sgyk/local/script/scala/scalatra-test/target/scala-2.10/classes...
[info] jetty-8.1.8.v20121106
[info] NO JSP Support for /, did not find org.apache.jasper.servlet.JspServlet
Null identity service, trying login service: null
Finding identity service: null
[info] started o.e.j.w.WebAppContext{/,[file:/Users/sgyk/local/script/scala/scalatra-test/src/main/webapp/]}
[info] started o.e.j.w.WebAppContext{/,[file:/Users/sgyk/local/script/scala/scalatra-test/src/main/webapp/]}
23:11:49.785 [pool-6-thread-5] INFO  o.scalatra.servlet.ScalatraListener - Initializing life cycle class: ScalatraBootstrap
[info] started o.e.j.w.WebAppContext{/,[file:/Users/sgyk/local/script/scala/scalatra-test/src/main/webapp/]}
23:11:50.061 [pool-6-thread-5] INFO  o.f.s.servlet.ServletTemplateEngine - Scalate template engine using working directory: /var/folders/9_/ggs_d8vd48z5ht76s3cwc7qr0000gn/T/scalate-7636222796467281743-workdir
[info] Started SelectChannelConnector@0.0.0.0:8080
[success] Total time: 13 s, completed 2013/02/21 23:11:50

途中になんか失敗してるけど、まぁ気にしない。 http://localhost:8080 にアクセスしてみると、以下の様な画面が表示されるはず。 screen shot

sbt-idea

ここまででも結構時間かかってる…。僕はScalaはいつもIntelliJ IDEAで開発してるので、以下のコードをproject/plugins.sbtに追加して、それ用のプラグインもインストールしておく。

addSbtPlugin("com.github.mpeltonen" % "sbt-idea" % "1.2.0")

で、またsbtを起動してgen-ideaを実行しておく。

締めにgit initでもしとけばいいんじゃないでしょうか。
このあとは簡単なアプリケーションを作ってみる。