Grails

[Grails]Grails3.0でHelloWorld

More than 1 year has passed since last update.

SDKMANでさくっとインストール

SDKMAN

簡単なSDKMANの使い方はコチラにも有ります。

[Groovy]gvmが生まれ変わった。SDKMANでGrvoovyやGrailsをインストール

また、Grailsのチュートリアルも公開中ですのでそちらも合わせてご覧くだし。

Grailsチュートリアル


Grailsアプリケーションの作成

適当なディレクトリで、今までと同じくcreate-appコマンドを実行します。

kkuwana% grails create-app hellograils3

| Application created at /home/k-kuwana/IdeaProjects/hellograils3
kkuwana%

コレでアプリケーションが作成されました。

とりあえずアプリケーションのトップディレクトリに移動して中身を覗いてみます。

kkuwana% pwd

/home/k-kuwana/IdeaProjects/hellograils3
kkuwana% ls -alh
合計 40K
drwxr-xr-x 5 k-kuwana k-kuwana 4.0K 3月 31 16:45 .
drwxr-xr-x 28 k-kuwana k-kuwana 4.0K 3月 31 16:45 ..
-rw-r--r-- 1 k-kuwana k-kuwana 2.0K 3月 31 16:45 build.gradle
drwxr-xr-x 3 k-kuwana k-kuwana 4.0K 3月 31 16:45 gradle
-rw-r--r-- 1 k-kuwana k-kuwana 45 3月 31 16:45 gradle.properties
-rwxr--r-- 1 k-kuwana k-kuwana 5.0K 3月 31 16:45 gradlew
-rw-r--r-- 1 k-kuwana k-kuwana 2.4K 3月 31 16:45 gradlew.bat
drwxr-xr-x 12 k-kuwana k-kuwana 4.0K 3月 31 16:45 grails-app
drwxr-xr-x 5 k-kuwana k-kuwana 4.0K 3月 31 16:45 src
kkuwana%

噂通りGradleが!


コントローラの作成

では早速コントローラを作っていきます。

先ほど作成したディレクトリに移動して、grailsコマンドを実行します。

初回は山ほどライブラリをダウンロードしてくるので気長に待ちます。

コントローラの作成方法も以前のバージョン同様のcreate-controllerで行います。

grails> create-controller helloworld

| Created grails-app/controllers/hellograils3/HelloworldController.groovy
| Created src/test/groovy/hellograils3/HelloworldControllerSpec.groovy
grails>

では早速HelloWorldController.groovyを編集します。

とりあえずはvimで。

vi IdeaProjects/hellograils3/grails-app/controllers/hellograils3/HelloworldController.groovy 


grails-app/controllers/hellograils3/HelloworldController.groovy

package hellograils3

class HelloworldController {

def index() {
render "こんにちわ世界"
}
}


上記のようなコードを書いたら、早速Grailsの起動です。

Grailsのインタラクティブモードの状態で、run-appを実行します。

grails> run-app

:compileJava UP-TO-DATE
:compileGroovy
:processResources
:classes
:findMainClass
:bootRun
Grails application running at http://localhost:8080
> Building 83% > :bootRun

メッセージからGradleに匂いがしますね!

この状態でhttp://localhost:8080にアクセスすれば、Grailsが起動していることが確認できます。

範囲を選択_001.png

それでは早速HelloWorldにアクセスしましょう!

URLはhttp://localhost:8080/helloworldです。

範囲を選択_004.png

問題ありませんね!


viewの作成

ではview(gsp)も作成してみます。

コントローラを作成すると、そのコントローラ用のviewのディレクトリが作成されます。

今回の場合、/home/k-kuwana/IdeaProjects/hellograils3/grails-app/views/helloworldというディレクトリが作成されいます。

このディレクトリ配下にindex.gspを作成します。


grails-app/views/helloworld/index.gsp

<html>

<head>
<title>This is GSP!</title>
</head>
<body>
<h1>Hello World on GSP!</h1>
<g:each in="${(1..5)}" var="i">
<p>GSP! ${i}</p>
</g:each>
</body>
</html>

コントローラは表示処理をviewに任せるので、renderをコメントアウトするか削除しましょう。


grails-app/controllers/hellograils3/HelloworldController.groovy

package hellograils3

class HelloworldController {

def index() {
//render "こんにちわ世界"
}
}


それでは再度HelloWorldにアクセスしてみましょう。

範囲を選択_005.png

大丈夫ですね。


IDE(IntelliJ)を使う

Grails3.0からGradleベースになっているのでインポートもお手軽になっているそうです。

ということでIntelliJにインポートしてみます。

単純にメニューからImport Projectを選択して、作成したGrailsアプリケーションのbuild.gradleを選択するだけです。

範囲を選択_006.png

範囲を選択_007.png

範囲を選択_008.png

コレだけでOK!


現状の問題点

多分自分の環境が原因だと思うけど、run-appを実行すると、gradleがコンソールへの出力を中途半端なところで止めてしまってコマンドが入力できない。

grails> run-app

:compileJava UP-TO-DATE
:compileGroovy UP-TO-DATE
:processResources UP-TO-DATE
:classes UP-TO-DATE
:findMainClass
:bootRun
Grails application running at http://localhost:8080
> Building 83% > :bootRun

上記の用に> Building 83% > :bootRunで出力が止まってしまって、grailsの他のコマンドが実行できない。

Grailsアプリケーションを停止するにはctrl-cを使うしか無い。


追記

コメントで教えていただきました。現状はこれが仕様のようです。

別途コンソールを立ち上げてそこでGrailsのインタラクティブモードに入ってしまえばそちらでcreate-controllerなどのコマンドが実行できます。


その他気づいた点


BootStrap

IntelliJを使う場合、GrailsViewだとBootstrapが見えません。

Projectビューにすると、grails-app/initの下にBootStrapがあります。


本番環境で再起動なしにGSPの編集を反映させる?

なんだかできるっぽい。

7.2.7 Making Changes to a Deployed Application

要調査。


その他起動方法

IntelliJを使っている場合、IntelliJから簡単にGrailsを起動させることができます。

grails-app/init/コントローラ名/Application.groovyを右クリックして、Run 'Application.main()'を実行するだけです。

スクリーンショット 2015-04-01 0.26.33.png

ただし、標準だとGrailsのauto-reload機能が無効になってしまっています。

これを有効にするために、

メニューのrun ---> Edit Configurations...から、ApplicationのVM Optionに、"-Xverify:none"を指定してあげます。

スクリーンショット 2015-04-01 0.31.13.png

これでIntelliJからRun 'Application.main()'を実行してGrailsアプリケーションをauto-reloadが有効な状態で起動することができるようになりました。

ただし、run-appコマンドでGrailsを起動した場合とは少し異なる状態のようです。

run-appで起動した場合

スクリーンショット 2015-04-01 0.35.08.png

IntelliJから起動した場合

スクリーンショット 2015-04-01 0.34.39.png

App versionGrails versionが、IntelliJから起動した場合には省略されていて、特に気なるのがApp profileという値が異なっている点です。

具体的に何が違うのかは今後要調査。


参考

http://d.hatena.ne.jp/mottsnite/20150331/1427797579

https://www.youtube.com/watch?v=aro3_RZqgtU