はじめまして、運動担当の小泉です。平成生まれです。若いです。彼女います。
週末はフットサル、ランニングしてます。
今は人間ドック予約サイトの開発をしており、主にPHPを使っています。
先日、dots summitに参加し、Go言語の注目度の高さに衝撃を受けました。
PHP以外の言語でもWebサービスを作ってみたいと思っていたタイミングなので、Goで書けるWebフレームワークを探してみたところ、「Revel」に出会いました。今回はほんの入り口のみの情報になりますが、紹介させて頂きます。
Goのフレームワークはほかにも「goji(https://goji.io/)」や「martini(https://github.com/go-martini/martini)」がありますが、どちらも用意されている機能が少なく、扱い辛そうでしたので、Revelを選びました。ちなみに、Gunocyは「kami(https://github.com/guregu/kami)」という独自のフレームワークで書かれていて、kamiはgojiをもとに作っているそうです。
Revelについて
Goで書かれた機能豊富な(いわゆるフルスタック系の)MVCフレームワークで、以下サイトにて、ベンチマークがかなり良いという結果が出ています。
http://www.techempower.com/benchmarks/#section=data-r9&hw=ec2&test=query&c=1
Revel公式サイト
http://revel.github.io/index.html
公式サイトにも
「Revel builds on top of the Go HTTP server, which was recently benchmarked to serve three to ten times as many requests as Rails across a variety of loads.」
とあるように、Railsの3~10倍の負荷を処理できると宣言しています。
Revelサンプルアプリ
意外にもLinux環境での情報が少なかったため、環境はEC2でCentOS7にしました。
環境の構築手順はここでは省略しますが、wgetコマンドがインストールされていることを前提として進みます。
1.Goインストール
$ sudo wget https://golang.org/dl/go1.4.2.linux-amd64.tar.gz $ cd go1.4.2.linux-amd64.tar.gz $ sudo tar -c /usr/local/ -xzf go1.4.2.linux-amd64.tar.gz $ export PATH=$PATH:/usr/local/go/bin ※~/.bash_profileに追記
2.Revelインストール
2-1.GOPATH指定
GOPATHに関しては任意の場所を設定してください。
$ mkdir ~/gocode $ export GOPATH=~/gocode ※~/.bash_profileに追記
2-2.Git&Marcurialインストール
githubからgo getで取ってくるために必要なようです。
$ sudo yum -y install git $ sudo yum -y install '*mercurial*'
2-3.Revel本体インストール
$ go get github.com/revel/revel ※~/gocode以下にインストールされます
2-4.Revelコマンドインストール
$ go get github.com/revel/cmd/revel $ export PATH="$PATH:$GOPATH/bin" ※~/.bash_profileに追記
2-5.確認
revelコマンドが使えるようになっていれば、インストール完了!
$ revel ~ ~ 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.
3.アプリひな形作成&起動
3-1.revel new
$ revel new sampleapp ~ ~ revel! http://revel.github.io ~ Your application is ready: /home/koizumi/gocode/src/sampleapp You can run it with: revel run sampleapp
3-2.revel run
$ revel run sampleapp ~ ~ revel! http://revel.github.io ~ INFO 2015/03/23 21:24:03 revel.go:326: Loaded module testrunner INFO 2015/03/23 21:24:03 revel.go:326: Loaded module static INFO 2015/03/23 21:24:03 run.go:57: Running sampleapp(sampleapp) in dev mode INFO 2015/03/23 21:24:03 harness.go:165: Listening on :9000
4.EC2アクセス&アプリ表示
Revelはデフォルト9000番ポートで動作しますので、アクセス先URLは「EC2 Public DNS:9000」になります。
正常に起動していれば、以下の画面のように「It Works !」と表示されます。 この画面はRailsとかCakePHPでデフォルト表示される画面みたいなものです。
※EC2のSecurity Group設定でinboudにTCP9000番を許可していないとハマります。
HTTPポート80番にアクセスしてアプリを表示するには、$GOPATH/src/sampleapp/conf/app.confに「http.port = 80」と記述し、root権限で動かせば動作しますが、今回は脆弱性対策などもしておらず、root権限で動かすのはセキュリティ上問題があるため、以下のコマンドにより、iptablesでフォワーディングをする方法をとります。
$ sudo iptables -t nat -I PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 9000
これで、「:9000」を記述しなくても、「It Works!」が表示されます。
個人的な感想としては、githubから取ってきたソースの中にSampleアプリが含まれていて、フレームワークの挙動は勉強しやすいと思いました。
速度などはある程度の規模のWebサービス作って運用してみないとわからない部分があり、何ともいえませんので、Revelで何か作ってみようと思います。
今回は以上になります。
[参考サイト]