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


先週1/15(火)に第1回が開催されたこのシリーズですが、早速翌週となるこの日に第2回が開催されました。小一時間程遅れて会に合流。


会場は前回同様、コワーキングスペース茅場町 Co-Edo(コエド)@茅場町

今回のもくもくテーマ:Play 2.0 WebSocket

この『WebSocket』キーワードとしては聞いた事があるものの、詳細を把握だとか実際にこれを使って何か作ってみた(仕事で/趣味で)、というのは個人的にはございません。

なので、まずはキーワードで幾つかWebサイトをピックアップしてみる。Playは2.x系でも1.x系でもサポートしてるんですねぇ。

方向転換→Play2.0Javaチュートリアル実践

...で、いざ実践!と思ったのですがここで何故か気が変わって、Play2.0ScalaでWebSocketをやらずにPlay2.0Javaでチュートリアルをやろう、と方向転換する事に(笑)

まぁ理由というか状況的に

  • Scalaはほぼ初心者
  • Play2.0も先週触ったのが初めて
  • WebSocket...( ゚д゚)ポカーン

な状態だったもので、さすがに臨むには装備が心許無いとw それなら、

  • JavaでPlay1.2及びPlay2.0の理解を深めよう
  • Scalaはきちんと勉強してScala自体の理解をまずは深めよう
  • Play2.0Scalaに挑むのはそれからにしよう

という心境になりました。なのでここからはPlay2.0Javaで試してみた記録というか過程のメモになります。

Java実行環境導入

導入してなければ、この辺でサクッと。

$ java -version
java version "1.7.0_11"
Java(TM) SE Runtime Environment (build 1.7.0_11-b21)
Java HotSpot(TM) 64-Bit Server VM (build 23.6-b04, mixed mode)
$ 
Play環境変数設定

ここは前回やったScalaと同じ。

$ 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

Playバージョン確認。

$ play help
       _            _ 
 _ __ | | __ _ _  _| |
| '_ \| |/ _' | || |_|
|  __/|_|\____|\__ (_)
|_|            |__/ 
             
play! 2.0.4, http://www.playframework.org

Welcome to Play 2.0!

These commands are available:
-----------------------------
license            Display licensing informations.
new [directory]    Create a new Play application in the specified directory.

You can also browse the complete documentation at http://www.playframework.org.

$ 
IDEについて(→IntelliJを選択)

EclipseのPlayプラグイン、1.2系であれば既存のものがあると思ってるけど、2.0系のプラグインはあるのかな?(どうやら無いっぽい…)


@kara_dさんにこの辺りの点を伺ったところ、やはりPlay2.0JavaでもIntelliJを使ったほうが良いらしい!との事です。ちなみにEcliipseでやる場合はViewをSublime Text2でカバーするのがオススメらしい…。Sublime Text2導入したらその構成も試してみるかな。


なので、IDEIntelliJを使う事にするw Scalaプラグインが入ってると不具合生じるとの事なので、設定で一時的にScalaプラグインを無効にしておく。

チュートリアル

チュートリアルアプリ『todolist』のPlay2.0Java版はこちら。

アプリケーション作成

templateは『2 - Create a simple Java application』を選択。

$ pwd
/Users/Xxxxxx/IdeaProjects
$ 
$ play new todolist
       _            _ 
 _ __ | | __ _ _  _| |
| '_ \| |/ _' | || |_|
|  __/|_|\____|\__ (_)
|_|            |__/ 
             
play! 2.0.4, http://www.playframework.org

The new application will be created in /Users/shinyaa31/IdeaProjects/todolist

What is the application name? 
> todolist

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

> 2

OK, application todolist is created.

Have fun!

$ 
アプリケーション起動

プロジェクト内に移動し、[play]→[run]で起動。

$ cd todolist/
$ play
[info] Loading project definition from /Users/Xxxxxx/IdeaProjects/todolist/project
[info] Set current project to todolist (in build file:/Users/Xxxxxx/IdeaProjects/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

[info] Updating {file:/Users/Xxxxxx/IdeaProjects/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...)

[info] Compiling 4 Scala sources and 2 Java sources to /Users/Xxxxxx/IdeaProjects/todolist/target/scala-2.9.1/classes...
[info] play - Application started (Dev)

ブラウザで http://localhost:9000/ にアクセス。

IDEAにプロジェクト取り込み
  • [idea]コマンドでIDEA化。
[todolist] $ idea
[info] Trying to create an Idea module todolist
[info] Excluding folder target
[info] Created /Users/Xxxxxx/IdeaProjects/todolist/.idea/IdeaProject.iml
[info] Created /Users/Xxxxxx/IdeaProjects/todolist/.idea
[info] Excluding folder /Users/Xxxxxx/IdeaProjects/todolist/target/scala-2.9.1/cache
[info] Excluding folder /Users/Xxxxxx/IdeaProjects/todolist/target/scala-2.9.1/classes
[info] Excluding folder /Users/Xxxxxx/IdeaProjects/todolist/target/scala-2.9.1/classes_managed
[info] Excluding folder /Users/Xxxxxx/IdeaProjects/todolist/target/streams
[info] Created /Users/Xxxxxx/IdeaProjects/todolist/.idea_modules/todolist.iml
[info] Created /Users/Xxxxxx/IdeaProjects/todolist/.idea_modules/todolist-build.iml
[todolist] $ 
  • IDEA起動、[File]→[Open]でプロジェクトを開く。



あとはチュートリアルに従ってもくもく。前回のPlay2.0Scala同様、一通りの実装を終えてHerokuにデプロイする手前の状態まで持って行って時間終了となりました。同じチュートリアル課題『todolist』ですが、こなしていく過程で色々と勉強になる事も多かったです。@kara_dさん、@kohachoriさんはじめアドバイス頂いた皆さん、ありがとうございました!

WebSocketサンプルアプリ

参加前に色々Web漁ってみた『Play2.0でWebSocketのサンプルアプリ』ですが、公式アーカイブファイル内にある samples/java 配下のチャットアプリが学習には良さげのようです。まぁ確かに公式で配布されているものが一番ですよね(笑)

という訳でsamples配下から適当な場所にプロジェクト一式をコピーして動かし、ブラウザ確認するまでの過程を以下にメモ。ソースコード解析等はまた別の機会という事にする。

$ pwd
/Applications/play-2.0.4/samples/java
$ ls
comet-clock	
computer-database
computer-database-jpa
forms
helloworld
websocket-chat
zentasks
$
$ cp -R websocket-chat/ /Users/Xxxxxx/IdeaProjects/websocket-chat
$ cd /Users/Xxxxxx/IdeaProjects/websocket-chat
$ play
[info] Loading project definition from /Users/Xxxxxx/IdeaProjects/websocket-chat/project
[info] Set current project to websocket-chat (in build file:/Users/Xxxxxx/IdeaProjects/websocket-chat/)
       _            _ 
 _ __ | | __ _ _  _| |
| '_ \| |/ _' | || |_|
|  __/|_|\____|\__ (_)
|_|            |__/ 
             
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.

[websocket-chat] $ run

[info] Updating {file:/Users/Xxxxxx/IdeaProjects/websocket-chat/}websocket-chat...
[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...)

やり残した事

本来であれば上記Play2.0Javaのチュートリアルプロジェクト一式をIntelliJ経由でMercurialプラグインを用いてBitBucketにプッシュし、成果として上げようと思っていたのですがIntelliJでのMercurial及びBitbucketリポジトリへの連携に関して、若干時間を取られてしまった部分がありました。(プロジェクト初期登録の段階でプロジェクト一式を Add to VCSする方法が分からなかった、という点)


一式Addする際はコマンドラインでも良いじゃん?とアドバイスも頂いたのですが(笑)何とかしてIDE(IntelliJ)経由でも行けないものかと試行錯誤してみたものの策が見つからない状態でしばし時間が経ってしまったので、この件は一旦途中経過をメモで残しておき、後日何らかの形でエントリとして纏めなおそうと思います。該当の箇所がコマンドラインになったとしても、まぁそれはそれで...


今後のPlay2.0周りのお勉強については、当エントリ途中で書いたように

  • まずはJavaでPlay1.2及びPlay2.0の理解を深めよう
  • Scalaはきちんと勉強してScala自体の理解をまずは深めよう
  • Play2.0Scalaに挑むのはそれからにしよう

という方向で進めて行こうと思います。Scala方面については『逆引きレシピ』辺りをもくもく勉強していく事で進めて行くかな?その後にコップ本か。

Scala逆引きレシピ

Scala逆引きレシピ

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

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

Java方面は1.2と2.0、同時に同じテーマで学んで違いを把握しながら進めるというのも良いかも知れん。この辺は折角なので貪欲に行こう。


@kara_dさん&@kohachoriさん、及び当日参加された皆様、ありがとうございました!