Playframework 2.0(Scala)でサンプルアプリケーション作成-1.下準備
はじめに
Playframework2.0の正式版がリリースされてからしばらくたちました。 すでにドキュメントもあり、翻訳作業もすすんでいます。 ドキュメントはPlayframeworkの各種機能やAPIについて解説しており、非常に役に立つのですが、1.2のときにあったような、 チュートリアル形式でアプリケーションを作成するガイド(yabeと呼ばれるblogエンジンをつくるチュートリアル)はいまのところ存在しません。 というわけで、この記事ではyabeライクなblogエンジンぽいものをPlayframework2.0(Scala)を使用して作成していきます。
今回使用した動作環境は以下のとおりです。
- OS : MacOS X 10.7.3
- Java : 1.6.0_26
- Scala : 2.9.1 final
- Playframework : 2.0
ここからplayframework2.0をダウンロードして、PATHを通しておいてください。
プロジェクト作成
まずはプロジェクトをScalaベースで作成します。 このアプリケーションはユーザーが記事を投稿したり参照できるblogエンジンを作成します。
%play new myblog Picked up _JAVA_OPTIONS: -Dfile.encoding=UTF-8 _ _ _ __ | | __ _ _ _| | | '_ \| |/ _' | || |_| | __/|_|\____|\__ (_) |_| |__/ play! 2.0, http://www.playframework.org The new application will be created in /Users/srcs/myblog What is the application name? > myblog 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 OK, application myblog is created. Have fun!
Eclipseを使用したい場合、eclipsifyでEclipseプロジェクト化してimportしましょう。
$ cd myblog $ play >[myblog] $ eclipsify
開発の下準備
projectを作成したので、まずはDBや依存ライブラリの設定などの準備をしましょう。 このprojectではDBはMySQLを使用するのでインストールしておいてください。
DBスキーマを作成
mysqlコンソールでmyblogスキーマを作成します。
$ mysql -u<ユーザー名> -p >create database myblog;
application.confで接続情報を設定
スキーマを作成したので、conf/application.confにDB接続情報を設定します。
db.default.driver=com.mysql.jdbc.Driver db.default.url="jdbc:mysql://localhost/myblog" db.default.user=<ユーザー名> db.default.password=<パスワード>
SBTで依存ライブラリを設定
本アプリケーションではScalaQueryを使用してDBにアクセスします。 ScalaQuery用ライブラリとMySQL用ドライバをSBTで取得します。 project/Build.scalaを下記のように編集します。
import sbt._ import Keys._ import PlayProject._ object ApplicationBuild extends Build { val appName = "myblog" val appVersion = "1.0-SNAPSHOT" val appDependencies = Seq( "org.scalaquery" % "scalaquery_2.9.0-1" % "0.9.5", "mysql" % "mysql-connector-java" % "5.1.18" ) val main = PlayProject(appName, appVersion, appDependencies, mainLang = SCALA).settings( // Add your own project settings here ) }
appDependenciesにScalaQueryとMySQLのJDBCドライバを指定します。 ファイルを編集したらplayコンソールからupdateコマンドを実行してライブラリを取得します。
>[myblog] $ update >[myblog] $ reload >[myblog] $ eclipsify
ライブラリを取得したらeclipsifyで再度eclipse用プロジェクトファイルを更新し、Eclipse上でrefleshとcleanをおこなってください。
evolutionsでテーブル作成
DBの用意ができたので次はテーブルを作成しましょう。 まずはユーザー情報を格納するためのUserテーブルを作成します。 playframeworkではevolutionsを使用してDBの管理をするのが楽です。 evolutionsについてはこのへんを参照してください。 ※2.0になって使用方法が少し変更になっています confディレクトリ下にevolutions/defaultというディレクトリを作成し、その下に1.sqlをいう名前でファイルを作成します。
# myblog schema # --- !Ups CREATE TABLE User ( id int(10) NOT NULL AUTO_INCREMENT, name varchar(50) NOT NULL, email varchar(100) NOT NULL, password varchar(50) NOT NULL, PRIMARY KEY (id), UNIQUE(name), UNIQUE(email) ); # --- !Downs DROP TABLE User;
Controllerとscala.htmlの雛形作成
次にソースファイルを修正します。 ユーザー管理用のコントローラとscalaテンプレートファイルの雛形を作成しましょう。 まずはroutesファイルです。
# User Entry GET /user/entry controllers.UserController.initEntry POST /user/entry controllers.UserController.submitEntry
GETメソッドで登録画面を表示し、POSTメソッドで登録処理を実行します。
次にコントローラです。デフォルトで生成されるコントローラは削除し、UserControllerを作成します。
package controllers import play.api._ import play.api.mvc._ object UserController extends Controller { /** * ユーザー登録初期処理. */ def initEntry = Action { Ok(views.html.entry("User entry.")) } /** * ユーザー登録処理. */ def submitEntry = TODO }
submitEntryに指定しているTODOとはplayframeworkがデフォルトで用意しているアクションで、 まだ処理を実装していない場合にとりあえず指定しておくことができます。 あとはvirewディレクトリにindex.scala.htmlを削除し、entry.scala.htmlを作成します。 とりあえず下記のようにしておきます。
@(title: String) @main(title) { This is UserEntry. }
動作確認
アプリケーションを起動し、localhost:9000/user/entryにアクセスします。 初回はevolutionsのエラーになり、SQLを実行するように言われるので実行しましょう。 その後アクセスすると、entry.scala.htmlが表示されます。
>[myblog] $ run
まとめ
今回はplayframework 2.0でのサンプルアプリケーション作成の下準備を行いました。 次回以降、実際にいろいろな機能を実装していく予定です。
参考サイトなど
- 公式のPalyドキュメント: http://www.playframework.org/documentation/2.0/Home
- Palyドキュメントの翻訳版: https://github.com/playframework-ja/Play20/wiki