この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
はじめに
このblogでも何度かPlay frameworkについて解説してきました。
その中でモジュールについても少し解説しましたが、モジュールは小さなPlay frameworkのアプリケーションであり、 さまざまな機能を提供してくれます。 たとえばPlay frameworkは標準でCRUDモジュールを使用することができます。 これは特定のクラスを継承したコントローラとモデルを作成すれば、そのモデルに対するCRUD機能が使用できるようになるモジュールです。 Play frameworkではコミュニティから提供された便利なモジュールを使用することもできますし、自分でモジュールを作成することもできます。 この記事ではPlay frameworkの便利なモジュールについて紹介していきます。
Play-Scalagen
今回紹介するPlayモジュールは、Play-Scalagen ※1というモジュールです。 このモジュールを使用すると、コマンドを実行してJPAのCRUDモデルをScalaで生成することができるようになります。 生成されるコードがScalaのため、前提としてPlay frameworkをScalaで記述できるようになるplay-scalaモジュール ※2の使用が必須です。
インストール
まずはPlay-Scalagenをインストールします。 なお、本記事での動作確認環境は下記の通りです。
- OS : MacOS X 10.7.1
- Java SE: 1.6.0_26
- Play framework : 1.2.2
- Git: 1.7.4
- mySQL: 5.5
-
Play frameworkはインストールしてパスを通しておいてください。
1.play-scalaのインストール
まずはplay-scalaモジュールのインストールです。 「play install scala」と入力してインストールしてください。
$ play install scala
~ _ _
~ _ __ | | __ _ _ _| |
~ | '_ \| |/ _' | || |_|
~ | __/|_|\____|\__ (_)
~ |_| |__/
~
~ play! 1.2.2, http://www.playframework.org
~
~ Will install scala-0.9.1
~ This module is compatible with: 1.2.2
~ Do you want to install this version (y/n)? y
~ Installing module scala-0.9.1...
~
~ Fetching http://www.playframework.org/modules/scala-0.9.1.zip
~ [--------------------------100%-------------------------] 38259.6 KiB/s
~ Unzipping...
~
~ Module scala-0.9.1 is installed!
~ You can now use it by adding it to the dependencies.yml file:
~
~ require:
~ play -> scala 0.9.1
~
2.Play-Scalagenをclone
gitを使用してPlay-Scalagenをcloneします。 適当なディレクトリを作成して、 https://github.com/asinghal/Play-ScalaGen.git をcloneしましょう。
$ git clone https://github.com/asinghal/Play-ScalaGen.git
Cloning into Play-ScalaGen...
remote: Counting objects: 385, done.
remote: Compressing objects: 100% (237/237), done.
remote: Total 385 (delta 169), reused 280 (delta 64)
Receiving objects: 100% (385/385), 662.74 KiB | 219 KiB/s, done.
Resolving deltas: 100% (169/169), done.
Play-Scalagenをcloneした場所を覚えておいてください。
サンプルプロジェクトを作成
play-scalaのサンプルプロジェクトを作成します。
$ play new myproject --with scala
--with scalaオプションをつけると、play-scalaのプロジェクトとして生成されます。
設定ファイルを修正、依存関係更新
作成したmyprojectの、conf/dependencies.ymlファイルを編集します。 $PLAYSCALAGEN_PATHと書いてあるところは、さきほどplay-scalagenをcloneしたディレクトリを指定してください。
# Application dependencies
require:
- play
- play -> scala 0.9.1
- customModules -> scalagen
repositories:
- playCustomModules:
type: local
artifact: "$PLAYSCALAGEN_PATH"
contains:
- customModules -> *
ファイルを編集したら、依存関係を更新します。 依存関係更新にはplay depsコマンドを使用します。
$ cd myproject
$ play deps
~ _ _
~ _ __ | | __ _ _ _| |
~ | '_ \| |/ _' | || |_|
~ | __/|_|\____|\__ (_)
~ |_| |__/
~
~ play! 1.2.2, http://www.playframework.org
~
Picked up _JAVA_OPTIONS: -Dfile.encoding=UTF-8
~ Resolving dependencies using /yourprojectpath/myproject/conf/dependencies.yml,
~
~ play->scala 0.9.1 (from playLocalModules)
~ customModules->customModules -> (from playCustomModules)
~
~ Installing resolved dependencies,
~
~ modules/scala-0.9.1 -> /yourplaypath/modules/scala-0.9.1
~ modules/dist -> /yoursscalagenpath/Play-ScalaGen
~
~ Done!
~
最後に、モデルを保存するDBを用意します。 mysqlにログインし、「myproject」という名前のデータベースを作成します。 データベースを作成したら、conf/applicaion.confファイルを編集します。 #db=mysql:user:pwd@database_nameとなっている箇所のコメントをはずし、ユーザー名、パスワード、データベース名を指定してください。
・・・・・
# To connect to a local MySQL5 database, use:
db=mysql:<your-user>:<your-password>@myproject
#
# If you need a full JDBC configuration use the following :
・・・・・
これで準備完了です。
使ってみる
では実際に使用してみましょう。 今回は名前とメールアドレスだけを持つUserモデルを作成しました。 コマンドをいくつか実行し、設定ファイルを編集すればすぐに完成します。
1.jQueryファイルの用意
まずは、自動生成したビューが使用するjQueryのファイルを用意するコマンドを実行します。 これはプロジェクトごとに1度おこなっておけば良いコマンドです。
$ play scalagen:jquery
~ _ _
~ _ __ | | __ _ _ _| |
~ | '_ \| |/ _' | || |_|
~ | __/|_|\____|\__ (_)
~ |_| |__/
~
~ play! 1.2.2, http://www.playframework.org
~
~ Warning! /pgdev/play/projects/myproject/app/views/main.scala.html already exists and will be overriden (y/n)? y
~ Copied /pgdev/srcs/Play-ScalaGen/app/views/main.scala.html to /pgdev/play/projects/myproject/app/views/main.scala.html
・・・・・・・・・・・・・
~~~~~ Copied JQuery files
2.コントローラー生成
次に、コントローラーを生成します。
$ play scalagen:generate --scaffold User name:String email:String
Listening for transport dt_socket at address: 8000
10:18:11,263 INFO ~ Starting /yourpath/myproject
・・・・・・
Please add the following entries to the routes file
GET /users/ UsersController.index
GET /users/new UsersController.newValue
GET /users/grid UsersController.grid
* /users/create UsersController.create
GET /users/{id}/edit UsersController.edit
* /users/{id}/update UsersController.update
GET /users/{id}/delete UsersController.delete
GET /users/{id} UsersController.show
play scalagen:generate --scaffoldとすると、コントローラー、ビューファイル、単体テストクラスが生成されます。 その後ろに、User(エンティティ名) name:String email:String(プロパティ名)と記述します。 最後にroutesファイルに追加するように指示されました。 conf/routesファイルにusersのrouteパスを追加しましょう。
# Routes
# This file defines all application routes (Higher priority routes first)
# ~~~~
# Home page
GET / Application.index
# Ignore favicon requests
GET /favicon.ico 404
# Map static resources from the /app/public folder to the /public path
GET /public/ staticDir:public
GET /users/ UsersController.index
GET /users/new UsersController.newValue
GET /users/grid UsersController.grid
* /users/create UsersController.create
GET /users/{id}/edit UsersController.edit
* /users/{id}/update UsersController.update
GET /users/{id}/delete UsersController.delete
GET /users/{id} UsersController.show
# Catch all
#* /{controller}/{action} {controller}.{action}
3.モデル生成
$ play scalagen:generate --model User name:String email:String
・・・・・・
* app/utils/HttpBinder.scala already exists. Skipping.
* app/utils/JQGridHelper.scala already exists. Skipping.
* Created /pgdev/play/projects/myproject/app/models/User.scala
* Created /pgdev/play/projects/myproject/test/tests/User.scala
* Created /pgdev/play/projects/myproject/test/user.yml
最後にモデルの生成をします。 play scalagen:generate --modelコマンドでモデルの生成を行います。 その後ろにはUser(エンティティ名) name:String email:String(プロパティ名)を入力します。
4.動作確認
まずはテストを行ってみましょう。
$ play test
10:28:19,597 WARN ~ You're running Play! in DEV mode
・・・・・・・・・・・・
~ Go to http://localhost:9000/@tests to run the tests
~
play testコマンドで起動し、http://localhost:9000/@testsをブラウザで開きます。 スタートボタンでテストを実行してみてください。すべてのテストが成功するはずです。 では自分で動かしてみましょう。 http://localhost:9000/users/ にアクセスしてみてください。 ユーザー情報の登録、表示、削除など、一通りの機能が使用でき、ページングや検索も使用できます。
まとめ
非常に簡単にplay-scalaでCRUDページの生成ができました。 冒頭で書きましたが、Play frameworkにも標準でCRUDモジュールというモジュールがCRUD機能を提供してくれます。 こういった自動生成生成系のツールをうまく利用して生産性を高めましょう。