スポンサーリンク

Go/RevelでHelloWorldやってみた

はじめに

最近、Goを始めました。
はじめにGinを使ってみて、軽量フレームワークの良さはあったんですが、
規模が大きいものをつくるときには、MVCなフレームワークがいいなあと思いトライしてみます。

環境情報

Goはインストール済みとします。
MacであればHomebrewでインストールしてパスを通すくらいですね。

$ go version
go version go1.13.7 darwin/amd64
$ echo $GOPATH
/Users/yourname/go

インストール

フレームワークをインストールします

go get github.com/revel/revel

次に、コマンドラインでrevelコマンドを使えるようにツールをインストールします。

go get github.com/revel/cmd/revel

完了したらコマンドが実行できるか確認

$ revel version
Revel executing: displays the Revel Framework and Go version
Revel Framework	:	0.21.0	(0.21.0 remote master branch)
Revel Cmd	:	0.21.1	(0.21.1 remote master branch)
Revel Modules	:	0.21.0	(0.21.0 remote master branch)

go version go1.13.7 darwin/amd64

OKですね。

アプリ作成

revelコマンドを使ってアプリを作成します。

cd $GOPATH
revel new revel-sample

コマンドを実行したらこちらのようなログが出たと思います。

$ revel new revel-sample
Revel executing: create a skeleton Revel application
Your application has been created in:
   /Users/yourname/go/src/revel-sample

You can run it with:
   revel run -a  revel-sample

そしたら、実行してみましょう。

revel run -a  revel-sample

起動したら http://localhost:9000/ をブラウザで開くと、It works! と表示されたらOKです。

ファイルを修正

それでは、http://localhost:9000/helloworld を開くとHello World! と表示されるように修正してみましょう。

初期のディレクトリはこのようになっております。

$ tree
├── README.md
├── app
│   ├── controllers
│   │   └── app.go
│   ├── init.go
│   ├── routes
│   │   └── routes.go
│   ├── tmp
│   │   ├── main.go
│   │   └── run
│   │       └── run.go
│   └── views
│       ├── App
│       │   └── Index.html
│       ├── debug.html
│       ├── errors
│       │   ├── 404.html
│       │   └── 500.html
│       ├── flash.html
│       ├── footer.html
│       └── header.html
├── conf
│   ├── app.conf
│   └── routes
├── messages
│   └── sample.en
├── public
│   ├── css
│   │   └── bootstrap-3.3.6.min.css
│   ├── fonts
│   │   ├── glyphicons-halflings-regular.ttf
│   │   ├── glyphicons-halflings-regular.woff
│   │   └── glyphicons-halflings-regular.woff2
│   ├── img
│   │   └── favicon.png
│   └── js
│       ├── bootstrap-3.3.6.min.js
│       └── jquery-2.2.4.min.js
└── tests
    └── apptest.go

16 directories, 24 files

Hello World

まずは、ルーティングを追加します。

conf/routesを開いてください。※app/routes/routes.goではありません。
最初に表示した画面のルートが以下のように設定されていることが確認できます。

GET     /                                       App.Index

ルートを追加してみましょう。
ここでのコントローラ名とメソッド名は先頭が大文字とする仕様のようです。

GET     /helloworld                             Hello.Index

そしたら、次にコントローラと作っていきます。
app/controllers/hello.goを以下のように作ります。

package controllers

import (
	"github.com/revel/revel"
)

// Hello is struct for revel
type Hello struct {
	*revel.Controller
}

// Index of Hello
func (h Hello) Index() revel.Result {
	return h.Render()
}

ビューとコントローラの紐付けはデフォルトで
app/views/コントローラ名/メソッド名 となっているので、
app/views/hello/index.html を作成します。

<h1>Hello World</h1>

これで一通り、ルーティング→コントローラ→ビューまでできたので実行してみましょう。http://localhost:9000/helloworld にアクセスすると
Hello Worldと表示されていることが確認できたかと思います。

Hello, Karaage

次に、コントローラから変数を渡してみましょう。
controllerのhello.goを以下のように修正します。

func (h Hello) Index() revel.Result {
	name := "Karaage"
	return h.Render(name)
}

そして、ビュー側で変数を表示できるように
app/views/hello/index.html を以下のように修正します。

<h1>Hello, {{ .name }}</h1>

そしてページを更新してみると、Hello, Karaageと表示できるようになったことが確認できました。

Json

次に、htmlでなくjsonでレスポンスを返してみましょう。

http://localhost:9000/helloworld/json にGETリクエストを送るとHello Worldを返すようにしてみます。
まずは、conf/routesに以下の設定を追加します。

GET     /helloworld/json                        Hello.GetJSON

ルーティングの設定からわかるように、新たにGetJSONというメソッドを
app/controllers/hello.goに追加します。
また、レスポンス用のstructをResponseとして作ります。

// Response is struct for json response
type Response struct {
	Message string `json:"message"`
}

// GetJSON returns Json of Hello World
func (h Hello) GetJSON() revel.Result {
	data := Response{Message: "Hello World"}
	return h.RenderJSON(data)
}

これで修正は完了です。
curlを使って実行してみましょう。

$ curl http://localhost:9000/helloworld/json
{
  "message": "Hello World"
}

JSONでmessageがHello Worldのレスポンスが返ってきたことが確認できました。

まとめ

Revelのはじめの一歩が踏み出せましたね!
まだまだいろんな機能があるようなので、学びながらまとめていこうと思います!

コメント

タイトルとURLをコピーしました