2009年4月30日木曜日

Grails1.1で認証機能付きアプリを一気に作る 第1回

Plugin関連が結構変わったので、もう一回、バージョン1.1のGrailsで簡単WEBアプリを作るところをまとめてみます。
何回分か分かりませんが、始めてみます。では。。。

<ここで使用するプラグイン>
・Acegiプラグインを使う。0.5.1
・Calenderプラグインを使う。1.1.1
・i18n-templatesプラグインを使う。1.1.0.1
・fckeditorプラグインを使う。0.9

<やってみたいこと>
・カレンダーから日付を入力する
・ユーザロール(Authority)とReqestMapでユーザの機能制限を付ける
・i18nを使ってプロトタイプ作りを楽にする
・byte[]を使ったファイルアップ
・hasManyとかbelongsToを使ってリレーション
・install-templatesでちょっと作業を楽にする

1.新規アプリを作る(前と一緒)
 grails create-app アプリ名

2.プラグインの置き場所を指定する
 前のバージョンでは、install-pluginをして入れてましたが、現バージョンでは、定義しておけば勝手にインストールしてくれます。ちょっと楽になりました。
 conf/BuildConfig.groovyを作成し、プラグインの格納場所を作ります。
中身のサンプルは以下。
 grails.project.plugins.dir="work_tmp/plugins"
 grails.project.work.dir="work_tmp/work"
 ※work_tmpは初回起動時に勝手に作られます。

3.application.propertiesを編集する
 #utf-8
 #Tue Apr 28 02:40:17 JST 2009
 app.version=0.1
 plugins.acegi=0.5.1 ←追加
 app.servlet.version=2.4
 plugins.i18n-templates=1.1.0.1 ←追加
 app.grails.version=1.1
plugins.fckeditor=0.9
 plugins.hibernate=1.1
 plugins.calendar=1.1.1 ←追加
 app.name=アプリケーション名

4.とりあえずRun-appしてみる。
 work_tmpディレクトリに、「3」で指定したPluginが取り込まれます。

5.acegiをセットする。
 初回起動時にAcegiPluginは、インストールされていますので、コンソールから、
 grails create-auth-domains
grails generate-manager
 を叩きます。
 そうすると、Person,Authority,RequestMapのドメインクラスや付随するcontroller、configなどが各ディレクトリに作られます。

6.ドメインクラスを作る
 grails create-domain-class item
 Item.groovyがdomainディレクトリに作られます。
 同時にtest/unitにもテスト記述用のファイルが生成されます。
 以下サンプル
class Item {

static mapping = {
id generator:"org.hibernate.id.enhanced.SequenceStyleGenerator",
params:[sequence_name:'item_id_seq',initial_value:1,increment_size:1]
}

/** 名称 */
String name
/** 備考 */
String note

/** 作成日 */
 Date dateCreated
/** 更新日 */
Date lastUpdated

static constraints = {
name(blank:false)
note(blank:true,nullable:true,maxSize:40000)
dateCreated(display:false)
lastUpdated(display:false)
}
}
point1...
 mappingのところは、入れておくと、IDが1から振られるようになります。
 HSQLとPostgreSQLでIDの挙動が違うので、ここで調整しています。

point2...
dateCreatedは、create、editではいらない(セレクタのビューが出てきて正直鬱陶しい)ので、constraitsにdisplay:falseをつけておきます。

7.コントローラーを作る前にちょっと。。。
 grails create-controller item
 とやると、
class ItemController {
def index = {}
}
というのができるんですが、いっつもscffolod = trueにしてるので、
 最初から出るようにしておきます。1コではあまり意味ないですが、
 結構さっくり作るということは、さくさくドメインクラスを作ってCRUDしたり、ということが連続しますので、先にやっておきます。
 grails install-templates
 とすると、src/templates/artifactsディレクトリが作られます。
 その中にあるController.groovyを下記のように編集します。

class ItemController {
def scaffold = true
}

この状態で、generate-controllerをすると、上記が適用されたファイルが生成されます。
同様に、Domainやcreateなども書き換えられますので、generate-allした後のよくやる作業は、ここでやっておくと便利です。

とりあえず第1回は、準備するところまで。