Play frameworkのいろいろなモジュール1 – Play-ScalaGen
はじめに
この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機能を提供してくれます。 こういった自動生成生成系のツールをうまく利用して生産性を高めましょう。