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

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

はじめに

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

Revelの特徴

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

  • ルーティング
  • Webテンプレート
  • DBアクセスのためのライブラリ
  • セッション管理

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

Revelってどういう意味?

  • 大いに楽しむ
  • 酒盛り
  • お祭り騒ぎ

最高ですね。

環境

  • mac OS X
  • go 1.7.5 darwin/amd64
  • Revel v0.18.0

手順

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 controllers
import (
"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 controllers
import (
"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 * 10
result := Result{
Message: "url/:引数名とすると引数を取れるようになります",
Number: number,
}
return c.RenderJSON(result)
}
出力結果
{
"message": "url/:引数名とすると引数を取れるようになります",
"number": 2000
}
使ってみて
今回はGoのフレームワークであるRevelを使用して簡単なAPIを作成するところまで行いました。
個人的に良かった点
  • ドキュメントが充実しています
  • デフォルトでi18n対応
  • 充実した debug機能
  • Hot Code Reloadというファイルの変更を監視し再コンパイルしてくれる機能の搭載
まとめ
RailsのようなgenerateコマンドでController、ViewまたはModelを作成するコマンドが用意されていたらもっと楽なのになと。
RevelはHot Code Reloadというファイルの変更を監視し再コンパイルしてくれる機能を搭載しており、viewの更新が多いwebサービスを開発する際は適しているのかと思いました。
ドキュメントが充実していたので開発が取り掛かりやすいと思います。
普段使わないフレームワークを使い、便利なとこも不便なところも知れました。
今後は他のフレームワークも触り、学習を続けていきたいです。
明日は山内さんです!お楽しみに!
One clap, two clap, three clap, forty?

By clapping more or less, you can signal to us which stories really stand out.