Goのフレームワーク“Revel”を触ってみた
この記事はeureka Engineering Advent Calendar 2017 12日目の記事です。
昨日は香取さんのSlackでバックオフィスのFAQ対応を自動化した(い)話でした。
はじめに
こんにちは!エウレカwebエンジニア新卒の鈴木康文(こうや)です。
普段はGo言語を書いています。Tech Blogは初めて書きます!
eurekaではginをbaseにした自社マイクロフレームワークを採用しているのですが、個人ではRuby on Railsをつかっていた経験があり、
Goでも似た様なフルスタック型のフレームワークはないかと探していたらRevelというフレームワークを見つけたので、
実際にコードを交えながら紹介してみたいとおもいます。
Revelの特徴

https://github.com/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以上なので確認します
12 $ go version
go version go1.7.5 darwin
/amd64
Revelのインストール
12 $ go get github.com/revel/revel # revel framework を取得
$ go get github.com/revel/cmd/revel # revel command を取得
12345678910111213141516 $ 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.
上記の結果になっていればインストールできています。
アプリケーションの作成
12345678910 $
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
実行
123456789 $ 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
を開き
下記の様に変更します。
1234567891011121314 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
を開き編集します。
123456789101112131415161718192021 {{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
を開き、下記の様に修正します。
1234567891011121314151617 # 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
に処理を追記します
1234567891011121314151617181920212223242526 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)
}
出力結果
123 {
"message": "hogehoge"
}
GET(引数あり)
routeの設定
1 GET /fuga/:number App.Fuga
Controllerの処理を追記
123456789101112131415 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)
}
出力結果
1234 {
"message": "url/:引数名とすると引数を取れるようになります",
"number": 2000
}
使ってみて
今回はGoのフレームワークであるRevelを使用して簡単なAPIを作成するところまで行いました。
個人的に良かった点
- ドキュメントが充実しています
- デフォルトでi18n対応
- 充実した debug機能
- Hot Code Reloadというファイルの変更を監視し再コンパイルしてくれる機能の搭載
まとめ
RailsのようなgenerateコマンドでController、ViewまたはModelを作成するコマンドが用意されていたらもっと楽なのになと。
RevelはHot Code Reloadというファイルの変更を監視し再コンパイルしてくれる機能を搭載しており、viewの更新が多いwebサービスを開発する際は適しているのかと思いました。
ドキュメントが充実していたので開発が取り掛かりやすいと思います。
普段使わないフレームワークを使い、便利なとこも不便なところも知れました。
今後は他のフレームワークも触り、学習を続けていきたいです。
明日は山内さんです!お楽しみに!
エウレカでは、一緒に働いていただける方を絶賛募集中です。募集中の職種はこちらからご確認ください!皆様のエントリーをお待ちしております!
この記事はeureka Engineering Advent Calendar 2017 12日目の記事です。
昨日は香取さんのSlackでバックオフィスのFAQ対応を自動化した(い)話でした。
はじめに
こんにちは!エウレカwebエンジニア新卒の鈴木康文(こうや)です。
普段はGo言語を書いています。Tech Blogは初めて書きます!
eurekaではginをbaseにした自社マイクロフレームワークを採用しているのですが、個人ではRuby on Railsをつかっていた経験があり、
Goでも似た様なフルスタック型のフレームワークはないかと探していたらRevelというフレームワークを見つけたので、
実際にコードを交えながら紹介してみたいとおもいます。
Revelの特徴
https://github.com/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以上なので確認します
1 2 | $ go version go version go1.7.5 darwin /amd64 |
Revelのインストール
1 2 | $ go get github.com/revel/revel # revel framework を取得 $ go get github.com/revel/cmd/revel # revel command を取得 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | $ 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. |
上記の結果になっていればインストールできています。
アプリケーションの作成
1 2 3 4 5 6 7 8 9 10 | $ 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 |
実行
1 2 3 4 5 6 7 8 9 | $ 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
を開き
下記の様に変更します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | 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
を開き編集します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | {{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
を開き、下記の様に修正します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | # 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
に処理を追記します
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | 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) } |
出力結果
1 2 3 | { "message": "hogehoge" } |
GET(引数あり)
routeの設定
1 | GET /fuga/:number App.Fuga |
Controllerの処理を追記
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | 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) } |
出力結果
1 2 3 4 | { "message": "url/:引数名とすると引数を取れるようになります", "number": 2000 } |
使ってみて
今回はGoのフレームワークであるRevelを使用して簡単なAPIを作成するところまで行いました。
個人的に良かった点
- ドキュメントが充実しています
- デフォルトでi18n対応
- 充実した debug機能
- Hot Code Reloadというファイルの変更を監視し再コンパイルしてくれる機能の搭載
まとめ
RailsのようなgenerateコマンドでController、ViewまたはModelを作成するコマンドが用意されていたらもっと楽なのになと。
RevelはHot Code Reloadというファイルの変更を監視し再コンパイルしてくれる機能を搭載しており、viewの更新が多いwebサービスを開発する際は適しているのかと思いました。
ドキュメントが充実していたので開発が取り掛かりやすいと思います。
普段使わないフレームワークを使い、便利なとこも不便なところも知れました。
今後は他のフレームワークも触り、学習を続けていきたいです。
明日は山内さんです!お楽しみに!
エウレカでは、一緒に働いていただける方を絶賛募集中です。募集中の職種はこちらからご確認ください!皆様のエントリーをお待ちしております!
Recommend
いますぐ始める高負荷対策
Go+App Engine+Cloud SQLで始めるGo言語Webアプリケーション開発
- 2016.01.29
- Tech
- by Shintaro Kaneko