Play Framework

play-clojureその2(ビューでScalaテンプレートを利用する)

Play framework Advent Calendar 2014の20日目です。

昨日のplay-clojure(Play 2アプリをclojureでつくる)その1に続き、play-clojureネタです。
エントリーがないのでそのまま続けてしまっています。

今日はビューテンプレートを表示してみます。
Playのビューは、Scalaテンプレートと呼ばれる仕組みを使っており、Twirlという名前で呼ばれています。

昨日のエントリーでは、単に文字列をResultとして返すだけのアプリケーションでした。ということで、Scalaテンプレートを適用してみましょう。

昨日のプロジェクトをコピーして、play-clojure-example-viewというプロジェクトを作ってみます。

1. ビューテンプレートの用意

まずは、ビューテンプレートを作成します。

app/views/MyControllerというディレクトリを作成し、index.scala.htmlという名前で下記のテンプレートを用意します。

@(message:String)

Clojure view @message is OK.

これは、単に一つの引数を持つだけのシンプルなテンプレートです。

2. コントローラにアクションを追加

続いて、コントローラの拡張です。
app/clojure/controllers/myController.cljを下記のように書き換えてみましょう。

(ns controllers.myController
  (:import (play.mvc Results)
           (views.html.MyController index))
  (:gen-class
    :methods [#^{:static true} [index [] play.mvc.Result]
              #^{:static true} [view  [] play.mvc.Result]]
    :extends play.mvc.Controller))

(defn -index []
  (Results/ok "Hello world from Clojure!!"))

(defn -view []
  (Results/ok (index/render "TEST")))

変更になった点は、ビューテンプレートのクラスをインポートしている下記の部分

(ns controllers.myController
  (:import (play.mvc Results)
           (views.html.MyController index))

と、新しいviewという関数をstaticメソッドとして出力する部分

  (:gen-class
    :methods [#^{:static true} [index [] play.mvc.Result]
              #^{:static true} [view  [] play.mvc.Result]]
    :extends play.mvc.Controller))

それと、実際のアクション定義となります。

(defn -view []
  (Results/ok (index/render "TEST")))

ちなみにJavaでこのアクション定義を書くとこんな感じになります。

public static Result index() {
        return ok(views.html.MyController.index.render("TEST"));
}

ルーティングの定義

続いて、ルーティングも追加します。
conf/routesに下記を追記しましょう。

GET        /clj                 controllers.myController.view()

これで、http://localhost:9000/cljでアクセスすると「Clojure view TEST is OK.」と表示されるようになりました。

…僕の環境では。おそらくリポジトリからクローンして実行するとコンパイルエラーとなるかと思います。
原因は、clojureがコンパイルされる際に、まだビューのコンパイルが終わっていない状態にあり、それで「 java.lang.ClassNotFoundException」が出力されてしまうのです。

うーむ。。sbtでなにかしないといけないのでしょうか。

以下のリポジトリにて、これらのサンプルは公開しています。

karad/play-clojure
https://github.com/karad/play-clojure

Read More

play-clojure(Play 2アプリをclojureでつくる)その1

Play framework Advent Calendar 2014の19日目です。

しばらく間があいてしまってましたね。
ネタ投下します。

ここ1年くらい、新しい言語勉強としてclojureを使うことを心掛けてきました。

もともとPlay Javaを日々使っていたこともあり、これをミックスできないかと思い始め、play-clojureという企画をはじめてみました。

sbtには、sbt-clojure(https://github.com/Geal/sbt-clojure)というプラグインが存在しており、sbtを使ってclojureのコンパイルが可能になっています。

playは、sbt上で動いているのでこれを使うと面白いことができそうだというのがことの発端です。ScalaのパワーにClojureのシンプルさ!というわけです。

超簡単なhello worldを今回はやってみます。Play-Javaでプロジェクトを作成しおえた状態から始めます。

1. ビルド周りの定義

まず、build.sbtに下記を書きます

seq(clojure.settings :_*)

libraryDependencies += "org.clojure" % "clojure" % "1.5.1"

つづいて、project/plugins.sbtに下記を書きます

addSbtPlugin("com.unhandledexpression" % "sbt-clojure" % "0.1")

これでsbt-clojureの導入は終わりです。

2. コントローラの作成

app以下にclojureというディレクトリを用意し、その中にcontrollersというディレクトリを作成します。

そしてその中にmyController.cljというファイルを作成し、下記のように記述します。

(ns controllers.myController
  (:import (play.mvc Results))
  (:gen-class
    :methods [#^{:static true} [index [] play.mvc.Result]]
    :extends play.mvc.Controller))

(defn -index []
  (Results/ok "Hello world from Clojure!!"))

これでコントローラの記述はおわり。

3. routesにルーティングを記述

conf/routesに下記のようにルーティングを定義します。

GET     /                           controllers.myController.index()

以上で、作業は終了です。

$ sbt run

をすると、localhost:9000でアクセスすると、下記のような画面が表示されます!!

こんな感じでClojureでコントローラを書くことができました。

このシリーズのサンプルはここに今後まとめていきます。

karad/play-clojure
https://github.com/karad/play-clojure

Read More

CSS Nite Shift 8いよいよ今週末です!担当のデザイントレンドもいい感じに仕上がってきました。

CSS Nite LP38「Webデザイン行く年来る年(Shift8)」

いよいよ今週末に開催されるCSS Nite LP38 「Webデザイン行く年来る年(Shift8)」

もうデザイントレンドを担当して8年を迎えるというのが驚きですが、今年もベルサール神田のイベントホールにてトリをガッツリとつとめさせていただきます。こういう活動をはじめたのが1998年にメールマガジンを発行したのが最初なのでもう一体何年やっているかわからないくらいになります。

で、肝心のイベント内容は、もう恒例となっているグローバル500社、上場企業3,700社、地方自治体1,700サイトの定点観測をはじめ、海外話題サイト約10,000サイトのキャプチャアーカイブを俯瞰的に一つ一つ見ていく中で、出演陣が気付いたサイトのビジュアル、ユーザーインターフェースの表現の潮流をお届けします。

今年はすごく目新しいものというよりは、味みたいなものをきちんとお伝えできたらなあと考えています。

レギュラーメンバーとして、今年も矢野りんさん、坂本邦夫さんが参加。

ちょっとここだけのこぼれ話をすると、去年末ころにいつも使っているキャプチャシステムの構造的限界を感じてずっと再開発をつづけておりました。これまで自分が不満に感じていた部分をブラッシュアップし、愛用しているWebアプリケーションフレームワークplay 2にてリニューアルをしたのですが、これは日頃の仕事とは別枠で行っていたため、半年近くかかりました。今回リニューアルして、スマホに対応し、随分チェックが楽になりました。

リニューアルに伴い、キャプチャ速度などもろもろ性能が上がり、夏くらいからこれまでキャプチャしてきたサイトなどを再キャプチャしてみることにしました。 こちらはいろいろチェックをしているものの、まったくまだ見きれておらず、とはいえどこかで面白い結果などを皆さんにシェアできたらと考えています。

近年、Shiftで行ったデザイントレンドをアレンジしたかたちで地方で再講演させていただく機会をいただくことがあり、今後もこういった活動は積極的に行っていこうと考えています。ご興味を持たれた方は kazuhiroh{at}gmail.com までご一報ください!

では会場でお会いしましょう!

CSS Nite LP38 「Webデザイン行く年来る年(Shift8)」

Read More