Goのフレームワーク“Revel”を触ってみた

eureka, Inc.
Dec 12, 2017 · 9 min read

この記事はeureka Engineering Advent Calendar 2017 12日目の記事です。
昨日は香取さんSlackでバックオフィスのFAQ対応を自動化した(い)話でした。

はじめに

こんにちは!エウレカwebエンジニア新卒の鈴木康文(こうや)です。
普段はGo言語を書いています。Tech Blogは初めて書きます!
eurekaではginをbaseにした自社マイクロフレームワークを採用しているのですが、個人ではRuby on Railsをつかっていた経験があり、
Goでも似た様なフルスタック型のフレームワークはないかと探していたらRevelというフレームワークを見つけたので、
実際にコードを交えながら紹介してみたいとおもいます。

Revelの特徴

Revelにはwebアプリケーションに必要な機能は大体揃っています。

自動的にコンパイルを実行できたり、devモードの実行で簡単にデバックができたりします。

Revelってどういう意味?

最高ですね。

環境

手順

1.Goのバージョン確認
2.Revelのインストール
3.localhost:9000にアクセス
4.簡単なAPI作成

Goのバージョン確認

Revelが対応しているGoのバージョンは1.6以上なので確認します

$ go version
go version go1.7.5 darwin/amd64

Revelのインストール

$ go get github.com/revel/revel # revel framework を取得
$ go get github.com/revel/cmd/revel # revel command を取得
$ revel help
~
~ revel! http://revel.github.io
~
usage: revel command [arguments]
The commands are:new create a skeleton Revel application
run run a Revel application
build build a Revel application (e.g. for deployment)
package package a Revel application (e.g. for deployment)
clean clean a Revel application's temp files
test run all tests from the command-line
Use "revel help [command]" for more information.

上記の結果になっていればインストールできています。

アプリケーションの作成

$ cd $GOPATH
$ revel new myapp
~
~ revel! http://revel.github.io
~
Your application is ready:
$HOME/Development/Go/src/myapp
You can run it with:
revel run myapp

実行

$ revel run myapp
DEBUG 21:45:06 revel server.go:27: RegisterServerEngine: Registered engine section=server name=go
~
~ revel! http://revel.github.io
~
Trying to build with revel/ (0x0,0x0)
(省略)
istening on.. localhost:51576
INFO 21:45:07 revel harness.go:190: Listening on :9000

http://localhost:9000/にアクセスして

動きました。

Hello World!の出力

app/controlers/app.goを開き
下記の様に変更します。

package controllersimport (
"github.com/revel/revel"
)
type App struct {
*revel.Controller
}
func (c App) Index() revel.Result {
text := "Hello Wordl!"
return c.Render(text)
}

次にapp/views/App/Index.htmlを開き編集します。

{{set . "title" "Home"}}
{{template "header.html" .}}
<header class="jumbotron" style="background-color:#A9F16C">
<div class="container">
<div class="row">
<h1>{{ .text }}<h1>
<p></p>
</div>
</div>
</header>
<div class="container">
<div class="row">
<div class="span6">
{{template "flash.html" .}}
</div>
</div>
</div>
{{template "footer.html" .}}

表示される文字がHello Wordl!に変更されます。

簡単なAPI作成

次に簡単にAPIを作成してみます
・GET(引数なし)
・GET(引数あり)

GET(引数なし)

routeの設定
conf/routesを開き、下記の様に修正します。

# Routes Config
#
# This file defines all application routes (Higher priority routes first)
#
module:testrunner
# module:jobs
GET / App.Index
GET /hoge App.Hoge    //新しく追加
# Ignore favicon requests
GET /favicon.ico 404
# Map static resources from the /app/public folder to the /public path
GET /public/*filepath Static.Serve("public")

Controllerの処理を追記
app/controlers/app.goに処理を追記します

package controllersimport (
"github.com/revel/revel"
)
type App struct {
*revel.Controller
}
func (c App) Index() revel.Result {
text := "Hello World!"
return c.Render(text)
}
func (c App) Hoge() revel.Result {
type Result struct {
Message string `json:"message"`
}
result := Result{
Message: "hogehoge",
}
return c.RenderJSON(result)
}

出力結果

{
"message": "hogehoge"
}

GET(引数あり)

routeの設定

GET     /fuga/:number                            App.Fuga

Controllerの処理を追記

func (c App) Fuga(number int) revel.Result {
type Result struct {
Message string `json:"message"`
Number int `json:"number"`
}
number = number * 10result := Result{
Message: "url/:引数名とすると引数を取れるようになります",
Number: number,
}
return c.RenderJSON(result)
}

出力結果

{
"message": "url/:引数名とすると引数を取れるようになります",
"number": 2000
}

使ってみて

今回はGoのフレームワークであるRevelを使用して簡単なAPIを作成するところまで行いました。

個人的に良かった点

まとめ

RailsのようなgenerateコマンドでController、ViewまたはModelを作成するコマンドが用意されていたらもっと楽なのになと。
RevelはHot Code Reloadというファイルの変更を監視し再コンパイルしてくれる機能を搭載しており、viewの更新が多いwebサービスを開発する際は適しているのかと思いました。
ドキュメントが充実していたので開発が取り掛かりやすいと思います。
普段使わないフレームワークを使い、便利なとこも不便なところも知れました。
今後は他のフレームワークも触り、学習を続けていきたいです。
明日は山内さんです!お楽しみに!

Eureka Engineering

Learn about Eureka’s engineering efforts, product developments and more.

eureka, Inc.

Written by

Learn more about how Eureka technology and engineering

Eureka Engineering

Learn about Eureka’s engineering efforts, product developments and more.

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade