Play 2.0 Javaはじめて&もくもく会 に参加してきた #playbeya #play_ja


(写真:会場となった『コワーキングスペース茅場町 Co-Edo(コエド)』のある建物からの風景。前日に降った大雪の名残が...)



現在、仕事ではPlay1.2.x系を触っているものの、2.0系はJavaScala共に触ったことはありませんでした。

まずは1.2系を一通り網羅し、熟知しよう…と言うのもあって手付かずに居たのですが、この度『2.0でもくもくやるよ』、更には『2.0Scalaも(要望多いようなので)やります』と告知があったので、仕事の都合若干遅れはしたものの勉強会に合流してもくもくして来ました。

ちなみに私のScala力はこんなもんです。皆無に等しいw

  • 書籍は買った。ただ軽く目を通しただけ(読んでいるとは言えない...)

Scalaスケーラブルプログラミング第2版

Scalaスケーラブルプログラミング第2版

Scala逆引きレシピ

Scala逆引きレシピ


会場はコワーキングスペース茅場町 Co-Edo(コエド)@茅場町。 2013年1月7日に開業したばかりの、出来立てホヤホヤなコワーキングスペースです。会場到着は開始から1時間遅れの20:00ちょい過ぎでした。


実践:Play2.0 Java/Scalaチュートリアル

チュートリアルのページは以下。Java/Scalaそれぞれにリファレンス的情報ページがあり、そこに紐付く形でチュートリアルも用意されています。


以下、ざっくり作業の流れをメモ。(Mac OS X/Eclipse3.7/Scala2.9.2)

Scala導入

上記手順でインストールは済んでるので、念の為のバージョン確認のみ。

$ scala -version
Scala code runner version 2.9.2 -- Copyright 2002-2011, LAMP/EPFL
$
環境変数設定(変更)

Play1.2系のも入れてるので、一時的に2.0に変更。

$ sudo vi .bash_profile
-----------
##########################
# add Playframework env.
##########################
#PLAY_HOME=/Applications/play-1.2.5
PLAY_HOME=/Applications/play-2.0.4
export PLAY_HOME
export PATH=$PATH:$PLAY_HOME
-----------
$ source .bash_profile
Eclipse(with Scalaプラグイン)インストール

Scalaプラグインが入るバージョンであれば特に何でも良いのでは。ちょうど以前整えていたEclipse3.7のものがあったのでそれをそのまま使うことに。Scalaプラグインは上記サイトの手順に従ってインストール。

チュートリアル実践
  • プロジェクト作成
$ pwd
/Applications/eclipse3.7scala/workspace
$ play new todolist 【←アプリケーション名を指定】
       _            _ 
 _ __ | | __ _ _  _| |
| '_ \| |/ _' | || |_|
|  __/|_|\____|\__ (_)
|_|            |__/ 
             
play! 2.0.4, http://www.playframework.org

The new application will be created in /Applications/eclipse3.7scala/workspace/todolist

What is the application name? 
> todolist 【←そのままEnter押下】

Which template do you want to use for this new application? 

  1 - Create a simple Scala application
  2 - Create a simple Java application
  3 - Create an empty project

> 1 【←1:Scalaアプリケーション】

OK, application todolist is created.

Have fun!

$ 
  • Playコンソールの使用
$ cd todolist/【←プロジェクト配下に移動】
$ pwd
/Applications/eclipse3.7scala/workspace/todolist
$ play 【←playコマンド実行】
[info] Loading project definition from /Applications/eclipse3.7scala/workspace/todolist/project
[info] Set current project to todolist (in build file:/Applications/eclipse3.7scala/workspace/todolist/)
       _            _ 
 _ __ | | __ _ _  _| |
| '_ \| |/ _' | || |_|
|  __/|_|\____|\__ (_)
|_|            |__/ 
             
play! 2.0.4, http://www.playframework.org

> Type "help play" or "license" for more information.
> Type "exit" or use Ctrl+D to leave this console.

[todolist] $ run 【←run:アプリケーション実行】

[info] Updating {file:/Applications/eclipse3.7scala/workspace/todolist/}todolist...
[info] Done updating.                                                                  
--- (Running the application from SBT, auto-reloading is enabled) ---

[info] play - Listening for HTTP on port 9000...

(Server started, use Ctrl+D to stop and go back to the console...)
  • Eclipseプロジェクト化対応
[todolist] $ eclipsify【←eclipsifyコマンド実行】
[info] About to create Eclipse project files for your project(s).
[info] Successfully created Eclipse project files for project(s):
[info] todolist
[todolist] $ 
  • Eclipse起動、インポートで上記手順にて作成したプロジェクトを指定、取り込み。


以降はチュートリアルに従って手順を進め、会の終了時間22:00ちょい過ぎ(※若干延長されて終了時間は22:30となっていた)にはHerokuにアップロードする手前まで進める事が出来ました。(以下ソースコード)


…と、進める事は出来たのですが、その過程で幾つか気になった事等ありましたのでメモ。またこの辺りは@kohachoriさん、@kara_dさんに適宜アドバイス等を頂く事で新たな発見や気付きとして学ぶ事が出来ました。ありがとうございました!

Memo

Play1.2用のEclipseプラグインはあるが、Play2.0用(Java/Scala)用のEclipseプラグインは無いらしい...

む〜、残念。

しかし、IntelliJならPlay2用のプラグインがあるらしい!

リンク的にはこの辺の内容なのだろうか。もっと分かり易い方法(ページ)があると言うような事は言っておられたような気もするが...

聞く所によると、IntelliJのPlay2.0プラグインは設定ファイルの色分け表示のみならず、設定値の内容についてもエラー検知するなどかなり便利らしい。これはPlay2.0系をやるのであればEclipseでは無くてIntelliJで推すべきなのかもしれないですね。

コーディング中、補完が効かない場合がある

Eclipseチュートリアルを進めていたが、時折遭遇した。結果としてはブラウザリロード時やcompileコマンドで解決。

Import文も上手く補完入力してくれない時がある

例えばこういったコード。

import play.api.db._
import play.api.Play.current

def all(): List[Task] = DB.withConnection { implicit c =>
  SQL("select * from task").as(task *)
}

Scala/Javaの言語の問題なのか?IDEの問題なのか?対応プラグインの問題なのか?これまでJava on Eclipseではdef以降記述の過程で補完アクション実施→その流れでimport文も補完設定され、コードとして整合性が保たれるという感じでこの場合も期待していたのだが、どうやらそこまで上手い事補ってはくれないらしい。(そういう状況もあるらしい。) この場合は予めimport文を記述しておいて、その後に意図したクラスやメソッドを利用する、という流れになる模様。

ふりかえり

今回は時間の都合上(2時間程しか無かった)、途中Scalaのコードについては一部把握し切らずに進めてしまった部分もありました。

本来であれば、チュートリアルから展開されている以下の各種詳細解説ページも眺めつつ理解を深めるべきところだったのでしょう。この辺は今後の課題。


また冒頭に書いたように、私自身はScalaについてはほぼ初心者。なので当然ながらScalaについても学びの時間を持ち、理解を深めていく必要があります。途中オススメの書籍的な会話をなされていた方々はこの辺りの名前を挙げていたような。『コップ本』も名前は挙がってましたがやはりあの書籍はハードルが高いようで...私も持ってますが挫折すらしてない状態ですw

速攻理解!JavaプログラマのためのScalaプログラミング

速攻理解!JavaプログラマのためのScalaプログラミング

オブジェクト指向プログラマが次に読む本 ?Scalaで学ぶ関数脳入門

オブジェクト指向プログラマが次に読む本 ?Scalaで学ぶ関数脳入門

更には、今回はEclipseで臨んでみたのですがPlay2.0/Scalaに関しては現状どうやらIntelliJの方が諸々環境は便利そうな感じ。Scala自体の学習も進めて行きたい気持ちは持っているので、後日の課題としてIntelliJScala開発環境を整える、またPlay2.0開発環境を整えてScala及びPlay2.0の理解を深めて行く方向に持って行くのもアリかな〜と思った次第です。


一方で、Playについては現状1.2の理解を深めている所でもあるので、直近で言えば以下のような順序でスキルを高めて行ければなぁ…という気もしてます。1と2&3、それぞれバランスと効率を考えて知識を吸収して行きたいところです。

  1. Play1.2習熟
  2. Scalaを勉強
  3. Play2.0Scala習熟

コワーキングスペース茅場町Co-Edo(コエド)様及びご参加の皆様、ありがとうございました!