Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
396
Help us understand the problem. What is going on with this article?
@2KB

「最速」フルスタックWebフレームワーク「revel」の紹介

More than 5 years have passed since last update.

速さは正義!

やはり「最速」という言葉は胸を熱くするものがあります。
使うWebフレームワークのレスポンスが速ければ速いほど、ユーザービリティはよくなる上に、必要なサーバー台数も減らせるなど、いいことづくめです。

ただ、レスポンスの速さだけを追い求めて機能を削ったものは、開発の速度を遅くします。
Web開発に通常必要な機能は全て用意した上で、なお速い、そんな都合のいいフレームワークが求められます。

そこで、最近知った「revel」という「最速」にして「フルスタック」のWebフレームワークについて、調べたことを記載していきます。

20130929131800.jpg

今回は、

  • 速さの計測方法解説
  • revelの概要
  • Go言語の概要
  • revelのインストール・実行までの手順

などについて記載します。

※ ここで言っている「最速」とは、一秒間に何レスポンス返せるか、というような、ベンチマーク的な意味です。
※ ここで言っている「フルスタックWebフレームワーク」とは、テンプレート、データベース補助、ルーティングなど、Web開発に必要になるメジャーな機能を一通り全部そろえたフレームワーク、という意味です。

速さの計測方法

「revel」が最速だとする根拠ですが、TechEmpowerというWeb開発会社が公開しているベンチマークをもとに判断しました。

何種類か計測結果があるのですが、私が主に注目したのは以下の2つのテストです。
どちらも、EC2の m1.large を使っています。

テスト1:Jsonシリアライズ

オブジェクトをJSONにシリアライズして
{"message":"Hello, World!"}
とレスポンスを行う一連の流れを、一秒間に何回出来るか計測しています。
http://www.techempower.com/benchmarks/#section=data-r8&hw=ec2&test=json&c=1

テスト2:DB値の複数行取得とJsonシリアライズ

複数行検索されるSELECTクエリをを実行してデータを取得し、JSONにシリアライズしてレスポンスを行う一連の流れを、一秒間に何回出来るか計測しています。
http://www.techempower.com/benchmarks/#section=data-r8&hw=ec2&test=query&c=1

詳しい計測条件

もっと詳しい条件は以下に記載されています。
http://www.techempower.com/benchmarks/#section=code&hw=ec2&test=json&c=1

計測したフレームワークについては下記に一覧があります。
http://www.techempower.com/benchmarks/#section=environment&hw=i7&test=json

また、計測に使ったソースコードはGithubに公開されています。
https://github.com/TechEmpower/FrameworkBenchmarks

計測結果解説

どちらも実はrevelではなく、「gemini」というWebサーバーが1位になってますが、これは計測を行ったTeckEmpowerさんの社内フレームワークで、公開もされてないらしいので、ノーカンです。

実質、今回紹介する「revel」が現時点の「最速」フルスタックWebフレームワークだと言えるでしょう。

その速さは凄まじく、例えばJSONシリアライズのほうだと、最大で秒間21920回(!?)のレスポンスをさばけ、
他のフレームワークと比べると、例えば

  • Ruby on Railsと比べると約25倍
  • CakePHPだと80倍、
  • コンパイル言語で出来たSpring Frameworkと比べても4倍

という、なかなか衝撃の結果になっています。

revelはどんなフレームワークか

revelは、Go言語で作られたWebフレームワークです。開発もGo言語で行います。

↓本家
http://revel.github.io/

ホットリロードを備えているため、コンパイルのストレスなく開発でき、ルーティング、バリデーション、テンプレートエンジン、DB処理、テスト支援などの他、様々な機能を備えています。

サーバーや、プロジェクトの作成機能なども含めて全てセットになっており、

revel new myapp
revel run myapp

などとするとすぐひな形が作られ、動きます。

ちなみにJava、Scala界隈で最近人気のPlay Frameworkを参考にして作られており、機能も大体同じみたいです。

Go言語とは

Google製の比較的最近できたプログラム言語です。

↓本家
http://golang.org/

  • 非常にシンプルな言語で覚えやすく
  • コンパイルも早く
  • C言語並みの速度を持ち
  • 同期処理が書きやすい

などの特徴があります。
速さと開発のしやすさの両立を目指してできた言語みたいですね。

色々とくせはありますが、確かにシンプルで覚えやすい言語な気はします。
まだ勉強したてですが。

ただ、開発にはEclipseのプラグインなどもありますが、まだまだ整備はされていない印象は受けます。

Go言語のインストール

Macにインストールしました。

brew update
brew install go
brew install mercurial
↑go言語のライブラリで mercurialというのを使っているらしいのでいれる

vi .bash_profile
でエディタを開き

export GOROOT=`go env GOROOT`
export GOPATH=$HOME/go
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin

を記載してパスを通す。
保存して再読み込み。

source .bash_profile

revelのインストール

go get github.com/robfig/revel
↑revel本体のインストール
go get github.com/robfig/revel/revel
↑revelコマンドラインツールのインストール?

revelのサンプルアプリ実行

設定したGOPATH(~/go)に、revelのサンプルアプリがダウンロードされているはずなので、
実行してみます。

cd $GOPATH/src
revel run github.com/robfig/revel/samples/booking

これで
http://localhost:9000/
にアクセスして
「revel framework booking demo」
などと表示されればOK。

revelのアプリ新規作成

どうにも、アプリのソースは
$GOPATH/src
配下にしなければいけないらしいです。

ソースがかぶってしまわないように、適切なディレクトリを切る必要があります。
とりあえずこんな感じで作成して起動してみます。

cd $GOPATH/src
revel new github.com/myname/test/myapp
revel run github.com/myname/test/myapp

http://localhost:9000/
にアクセスして
「It Works」
などと表示されればOK。

396
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
2KB
funds
上場企業に資金を貸し出す形で投資ができる貸付投資のサービス「Funds」を開発・運営するスタートアップ

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
396
Help us understand the problem. What is going on with this article?