##はじめに
今までは、Webアプリの開発というとRails
という感じでした。しかし、今日ではRailsを参考に多くのWeb Frameworkも登場しているので、それらについておすすめのものを検討してみます。
##Ruby on Rails
Rubyでは、RailsというWeb framework(Webフレームワーク)が有名ですね。
しかし、速度が遅いなどと言われているのが少し気になります。
##Elixir on Phoenix
Elixirでは、Phoenixがあります。Phoenix-frameworkは、Rails風なリッチなフレームワークである割にデフォルトでもそこそこ速いらしいです。
これは興味があったので試してみました。Dockerでやる場合は以下。
$ docker run -d -p 80:4000 --name phoenix -t xtity/docker-centos7-elixir-phoenix
それ以外は本体にインストールすることになるけど、以下のような感じです。
$ brew install elixir
$ mix local.hex
$ mix archive.install https://github.com/phoenixframework/phoenix/releases/download/v0.14.0/phoenix_new-0.14.0.ez
使い方はテンプレートを作成し、サーバーを起動。localhost:4000
にアクセスする感じ。
$ mkdir phoenix
$ cd phoenix
$ mix phoenix.new ./hello_phoenix
$ cd hello_phoenix
$ mix phoenix.server
----------------------------
$ curl 127.0.0.1:4000
サンプルとしてチャットアプリのコードが公開されています。
また、デモはHerokuを使用していて、これはWebアプリなどを無料で公開できるサーバーを管理できるサービスという感じのものです。これについては後述します。
##Go on Revel
Goでは、まず、ちょっと重めのRevelを使ってみます。
http://qiita.com/2KB/items/7a743033d8d1a87f1b72
$ go get github.com/revel/revel
$ go get github.com/revel/cmd/revel
$ cd $GOPATH
$ revel help
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.
$ revel new myapp
$ tree myapp
myapp
├── README.md
├── app
│ ├── controllers
│ │ └── app.go
│ ├── init.go
│ ├── routes
│ │ └── routes.go
│ ├── tmp
│ │ └── main.go
│ └── views
│ ├── App
│ │ └── Index.html
│ ├── debug.html
│ ├── errors
│ │ ├── 404.html
│ │ └── 500.html
│ ├── flash.html
│ ├── footer.html
│ └── header.html
├── conf
│ ├── app.conf
│ └── routes
├── messages
│ └── sample.en
├── public
│ ├── css
│ │ └── bootstrap.css
│ ├── img
│ │ ├── favicon.png
│ │ ├── glyphicons-halflings-white.png
│ │ └── glyphicons-halflings.png
│ └── js
│ └── jquery-1.9.1.min.js
└── tests
└── apptest.go
$ revel run myapp
------------------------
$ curl 127.0.0.1:9000
APIとして機能させるために、JSON
を返すようにしてみます。
package controllers
import "github.com/robfig/revel"
type User struct {
Name string
}
type App struct {
*revel.Controller
}
func (c App) Index() revel.Result {
//return c.Render()
return c.RenderJson(User{"go test"})
}
アクセスすると、こんな感じで返します。
$ revel run myapp
------------------------
$ curl localhost:9000
{
"Name": "go test"
}
あと、Golangには、Beego, Martini, Gojiなどがあって、Beego
は中国っぽいのでみんな避けてる感じなのと(中国が嫌いとかではなく、マルウェア的な意味で)、Martini
は軽量で使いやすいということで人気ぽいです。
しかし、Martini
には黒魔術を常用するという問題があり、この問題は根本的なものであるため、現在でも解決されていないと思われます。これは、Go言語のシンプル理念とは相反するものであり、メンテナンスのコストが増大する可能性がありますので、あまり使いたくない感じします。
したがって、個人的には、Gojiを使ってみたい。
##PaaS
Heroku
とは、Webアプリなどを無料(無料で使える料金プランがあるという意味)で公開できるサーバーを管理できるサービスという感じのものです。
こういったサービスは、Heroku, Modulus, DigitalOcean, OpenShiftなんかが有名ですよね。
データベースは、HerokuのPostgreSQLとAmazon RDSのPostgreSQLが有名です。これに関しては、Heroku PostgreSQL vs. Amazon RDS for PostgreSQLを読まれてみても面白いかもしれません。
Herokuは、新しい料金体系が発表されたことから移行先が検討されています。
個人的には、OpenShiftがおすすめかなあと思っています。