Playframework 2.0(Scala)でサンプルアプリケーション作成-1.下準備

2012.04.08

はじめに

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でのサンプルアプリケーション作成の下準備を行いました。
次回以降、実際にいろいろな機能を実装していく予定です。

参考サイトなど