Scala

2014年の振り返り的な一人レトロスペクティブ

2014年も、もうすぐ終わるので、一人レトロスペクティブをはじめようと思います。

印象に残っているやったこと

1月

  • Play framework 2 徹底入門発売
    • サポートサイトを作るものの、ちゃんと運用しなかったのでまじでアカン。猛省。
  • 2013/01からはじめたPlayの仕事が丸1周年を迎える。Playを中心にAPIの設計からWEBまでいろいろとこなす
  • Webデザイントレンド in 静岡出演。ゲストに清家順さん。膨大なキャプチャアーカイブから見えてくる、Webデザインの潮流・ビジュアル/UIトレンドと題して。
  • 今年の勉強するぜ言語はClojureにしようと決める

2月

3月

  • はじめての決算書類作成&提出。いろいろ考えた末に自分でやってみる方面でいったため、非常に大変な思いをした(がすごく勉強になった)

4月

  • Webデザイントレンド in 大阪出演。ゲストは、深沢 幸治郎さん。
    • このセッションは再演というわけではなく、再度全キャプチャを取得しなおしているため、2014年のその時点での最新版。新しい発見などもあった。
  • このころ、Playもくもく会を精力的に開催する。結局20回以上開催された
  • キャプチャシステムをPlay 1ベースからPlay 2ベースに再構築をはじめる。結局10月くらいまでかかった。。

5月

  • Play 2 meetup参加。「フロントエンドとバックエンドのビルド構成について」というたぶん僕らしいテーマで話した。
    • パネルディスカッションでは、Play java代表(?)という立ち位置で参戦することに。ネタ的なトークをした。

6月

  • メインPCを、Macbook Pro 15インチRetinaから、Thinkpad x240sへ切り替える。あらゆることをWindowsにシフトチェンジした。
  • 先端味見部にてSwiftをいろいろと試す。
    • Swiftは、Scalaに似てるかもと感じた。Xcodeがすぐおちた。

7月

  • 古い仲間の結婚式があり、めでたやとなる。

8月

  • pyhack 夏山合宿に参加
    • Pythonをほとんどやらないにもかかわらず、この会には毎回参加している。知らない世界なので、聞きなれないことや知らないことが多く、それゆえ勉強になりおいしい。
    • バーベキューうまかった
    • 近所のおばあさんに人生に関するアドバイス的なものをうける
  • このころは、仕事でPlay三昧な日々を送り、私生活でもPlayでキャプチャ&クローラシステムのリニューアルをし、趣味ではClojureに打ち込むという印象しかない。。

9月

  • Scala Matsuri(Scalaのカンファレンス)にグレーティブとして去年に続きスポンサーとして参加
    • 大いに刺激をうける、いつもお世話になっている言語のイベントにスポンサードするのは貢献の一つとしてありだと思ってる。
  • エンプラなCMSをやってたけど独立してWordPressをやってみたというイベントに参加
    • これくらい包括的なCMSの話題を展開してのWordPressの評価みたいなセッションは今までにないのでほんとみんな聞くべきと思った

10月

  • このころ、Play 2化が終わる。Play 2.3.4でリリースし、安定のクローリング&キャプチャシステムとなった。AWSのEC 2とRDS全開なかんじ。
  • サバゲーに参加してみる
    • つかれた…
  • ひたすらサイトリサーチをする日々

11月

  • ひたすらサイトリサーチをする日々
  • 決算準備として、年末調整の説明会や決算説明会などに赴く
  • Clojureをつかったいくつかのコードを実装する
  • Sublime TextからEmacsへの移行を試みた(現在継続中)

12月

  • グレーティブの第2期が終わり、第3期のはじまり
  • Shift 8出演
  • 約2年続けたPlay 2の仕事が一旦終わり
    • 就職していたわけじゃないから退職っていうわけじゃないけど、これくらい一つの案件にぎっしりというケースは個人的にはあまりなく。1月からは全然違う系の仕事をするです。
    • スクラムマスターも終わり
  • Playアドベントカレンダー、あまり盛り上がらず申し訳ないです。

SSC – Start, Stop, Continue

ぐだぐだ書いてもあれなので、3つずつ

Start

  • もう少し法人としての体制を整える(人増やすとかそういう系ではなく、内部実務的に結構ぐだぐだ感あるので)
  • 新しいプロジェクトに参加予定。Clojureつかうかもです。
  • Design Wedge

Stop

  • 紙書籍の購入(最近はKindleにない本のみしか紙の本は買わなくなりつつあるので。こういう方向が進んでいった先にあるものが豊かさなのかそうでないのかを知りたい)
  • iPhoneの利用(Androidかfirefox phoneとかに)
  • Playもくもく会(ちょっと最近できていないし、一旦とめようかと)

Continue

  • ライフワークのデザインクロール&キャプチャ
  • Clojureの学習の継続
  • play-clojureという模索 : 十分に稼働実績があるPlayの仕組みを有効活用できないものかと
Read More

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