Grails ドメインクラスを作ると、DBテーブルが勝手にできあがる
Grails をお勉強中です。
『Grails 徹底入門』や Grails 日本語ドキュメント(http://grails.jp/doc/2.0.x/)を見ながら試行錯誤しています。
『Grails 徹底入門』は2008年に出版されたもので、Grails 1.0.3 がベースとなっています。現時点での current の Grails 2.0.x とは違っている部分があると感じています。
たとえば、『Grails 徹底入門』の画面遷移で使っている Web Flow は 2.0.x では使っていないように見えます。
詳しくはまだ理解しきれていないので断定はできませんが、進歩している機能は使っていきたいので、調べながら実装しています。
まだ1画面も作りきれていませんが、触っていくなかで驚いたことを今回はあげます。
・ドメインクラスを作ると、勝手に CREATE TABLE される
・DBが組み込まれている
・run-app したら、色々と良きに計らってくれる
・DB の CRUD 処理の実装が恐ろしく簡単
ドメインクラスを作ると、勝手に CREATE TABLE される
> grails create-app sampleApp
まずは create-app でアプリケーションを作成します。
> grails create-domain-class Sample
Sample というドメインクラスを作ります。ドメインクラスはエンティティ、DBテーブルにあたるものです。
class Sample { String sampleId String sampleName Date sampleDate static constraints = { sampleId (maxSize: 2) } }
Sample ドメインクラスの中身を実装しました。3つのプロパティを持っています。
constraints で、各プロパティの制約(必須、サイズ、一意制約など)を実装します。
run-app すると、色々とよきに計らってくれる
> grails run-app
ということで、アプリケーションを起動します。アプリケーションサーバが組み込まれているので、Tomcat の準備とか不要です。
まだ、コントローラを作っていないので画面にアクセスはできません。
ですが、ドメインクラスは作ってあるので、それに対応したDBテーブルが作成されます。つまり、自動的に DB に対して CREATE TABLE 文が発行されています。
DBが組み込まれている
Grails には、H2 という DB が組み込まれています。run-app でアプリケーションを起動すると、H2 データベースも起動します。
「http://localhost:8080/sampleApp/dbconsole」の URL でH2 のコンソールにアクセスできます。
コンソールにアクセスして、DB の中身を見てみると SAMPLE テーブルが作成されていることがわかります。
各カラムのサイズや NOT NULL などはドメインクラスの constraints の設定が反映されるようです。
テーブルの CRUD 処理の実装が恐ろしく簡単
次に、コントローラを作ります。
> grails create-controller Sample
SampleController クラスが作成されます。index という空っぽのアクションが用意されます。
とりあえず、DB アクセスがしたいので Sample インスタンスを作って save() を呼び出してレコード追加します。
class SampleController { def index() { new Sample(sampleId: "01", sampleName: "abc", sampleDate: new Date()).save() } }
MVC やトランザクション制御を考えると、Service を作るべきですが…とりあえずです。
ビューを指定していないので、grails-app/views/sample/index.gsp をビューとして使用し遷移します。
index.gsp ファイルが存在せず、このままだとアクセスするとエラーになるので、ファイル新規作成します。
<html> <head> <title>index ページ </title> <meta name="layout" content="main" /> </head> <body> Hello World. </body> </html>
動的な画面にしたいですが、DB アクセスを実感できればいいので…こんな感じで。
> grails run-app
「http://localhost:8080/sampleApp/sample/index」にアクセスすると、コントローラが実行されて画面表示されます。
この状態で先ほど見たDBコンソールで SAMPLE テーブルを検索していみると、レコードが1件追加されているのがわかります。
勝手にやってくれることをまとめ
DB が組み込まれていて勝手に動き出す、そして接続もできてしまう。
ドメインクラス作ったら勝手に CREATE TABLE されている。
DB(Oracle や MySQL)をインストールして、インスタンス作る。そして、CREATE TABLE の DDL を作って発行する。
毎回やることですが、結構手間ひまかかります。
しかし、ここまでやってしまわないと、動くアプリケーションにはなりません。
そこを一足飛びにやってしまう Grails はすごいなあと感心してしまいました。
わかっている人からすると、当然なんだろうと思いますが。
でも、この辺の当たり前のことは rails に触れたことのない人にとっては天変地異的なことです。
逆に Grails の入門的なサイトをいくつか見ましたが、詳細に書かれていないように感じました。
「DB 用意しなくていい」「勝手にテーブルが作られる」といった、うたい文句が明記されているといいと思います。
Grails わかってくると楽しいですね。最初はちんぷんかんぷんでしたが。