Play 2.0 Javaはじめて&もくもく会 に参加してきた #playbeya #play_ja
- (Play部屋) Play 2.0 Javaはじめて&もくもく会 - 日本Playframeworkユーザー会
- 2013/01/15 Play 2.0 Javaはじめて&もくもく会 #play_ja - Togetter
(写真:会場となった『コワーキングスペース茅場町 Co-Edo(コエド)』のある建物からの風景。前日に降った大雪の名残が...)
現在、仕事ではPlay1.2.x系を触っているものの、2.0系はJava、Scala共に触ったことはありませんでした。
まずは1.2系を一通り網羅し、熟知しよう…と言うのもあって手付かずに居たのですが、この度『2.0でもくもくやるよ』、更には『2.0Scalaも(要望多いようなので)やります』と告知があったので、仕事の都合若干遅れはしたものの勉強会に合流してもくもくして来ました。
ちなみに私のScala力はこんなもんです。皆無に等しいw
- 書籍は買った。ただ軽く目を通しただけ(読んでいるとは言えない...)
- 作者: Martin Odersky,Lex Spoon,Bill Venners,羽生田栄一,水島宏太,長尾高弘
- 出版社/メーカー: インプレス
- 発売日: 2011/09/27
- メディア: 単行本(ソフトカバー)
- 購入: 12人 クリック: 235回
- この商品を含むブログ (46件) を見る
- 作者: 竹添直樹,島本多可子
- 出版社/メーカー: 翔泳社
- 発売日: 2012/07/03
- メディア: 単行本(ソフトカバー)
- 購入: 6人 クリック: 54回
- この商品を含むブログ (14件) を見る
- 環境導入等は行ったがそこから先は止まったまま。
会場はコワーキングスペース茅場町 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...)
- ブラウザ経由で http://localhost:9000/ にアクセス出来る事を確認
- 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用のプラグインがあるらしい!
- Play 2.0 support | IntelliJ Scala plugin blog
- Intellij IDEAのPlay2.0用のコンフィギュレーション - Develop with pleasure!
- Add support for Play!Framework 2 to IDEA (playframework 2) : SCL-4600
- JetBrains Plugin Repository :: Play 2.0 Support
- Support for Play 2.0 conf/routes : SCL-4519
リンク的にはこの辺の内容なのだろうか。もっと分かり易い方法(ページ)があると言うような事は言っておられたような気もするが...
聞く所によると、IntelliJのPlay2.0プラグインは設定ファイルの色分け表示のみならず、設定値の内容についてもエラー検知するなどかなり便利らしい。これはPlay2.0系をやるのであればEclipseでは無くてIntelliJで推すべきなのかもしれないですね。
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のコードについては一部把握し切らずに進めてしまった部分もありました。
本来であれば、チュートリアルから展開されている以下の各種詳細解説ページも眺めつつ理解を深めるべきところだったのでしょう。この辺は今後の課題。
- Documentation: PlayConsole ― Playframework(Play 2.0 コンソールを使う)
- Documentation: ScalaActions ― Playframework(アクション、コントローラ、レスポンス)
- Documentation: ScalaRouting ― Playframework(HTTPルーティング)
- Documentation: ScalaTemplates ― Playframework(テンプレートエンジン)
- Documentation: ScalaFormHelpers ― Playframework(フォームテンプレートヘルパーの利用)
- Documentation: ScalaForms ― Playframework(フォームの送信)
- Documentation: Evolutions ― Playframework(データベース・エボリューション)
- Documentation: ScalaAnorm ― Playframework(Anorm によるシンプルなデータアクセス)
また冒頭に書いたように、私自身はScalaについてはほぼ初心者。なので当然ながらScalaについても学びの時間を持ち、理解を深めていく必要があります。途中オススメの書籍的な会話をなされていた方々はこの辺りの名前を挙げていたような。『コップ本』も名前は挙がってましたがやはりあの書籍はハードルが高いようで...私も持ってますが挫折すらしてない状態ですw
速攻理解!JavaプログラマのためのScalaプログラミング
- 作者: 石黒尚久
- 出版社/メーカー: 秀和システム
- 発売日: 2012/05/23
- メディア: 単行本
- 購入: 1人 クリック: 4回
- この商品を含むブログ (3件) を見る
オブジェクト指向プログラマが次に読む本 ?Scalaで学ぶ関数脳入門
- 作者: 株式会社テクノロジックアート,長瀬嘉秀,町田修一
- 出版社/メーカー: 技術評論社
- 発売日: 2010/11/13
- メディア: 単行本(ソフトカバー)
- 購入: 11人 クリック: 340回
- この商品を含むブログ (32件) を見る
更には、今回はEclipseで臨んでみたのですがPlay2.0/Scalaに関しては現状どうやらIntelliJの方が諸々環境は便利そうな感じ。Scala自体の学習も進めて行きたい気持ちは持っているので、後日の課題としてIntelliJでScala開発環境を整える、またPlay2.0開発環境を整えてScala及びPlay2.0の理解を深めて行く方向に持って行くのもアリかな〜と思った次第です。
一方で、Playについては現状1.2の理解を深めている所でもあるので、直近で言えば以下のような順序でスキルを高めて行ければなぁ…という気もしてます。1と2&3、それぞれバランスと効率を考えて知識を吸収して行きたいところです。
- Play1.2習熟
- Scalaを勉強
- Play2.0Scala習熟
コワーキングスペース茅場町Co-Edo(コエド)様及びご参加の皆様、ありがとうございました!