398
392

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2014-03-12

#速さは正義!
やはり「最速」という言葉は胸を熱くするものがあります。
使う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。

398
392
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
398
392

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?