LoginSignup
22
21

More than 5 years have passed since last update.

Web Frameworkとして検討する言語とフレームワーク

Last updated at Posted at 2015-07-19

はじめに

今までは、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

サンプルとしてチャットアプリのコードが公開されています。

Demo

また、デモは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を返すようにしてみます。

$GOPATH/src/myapp/app/controllers/app.go
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がおすすめかなあと思っています。

22
21
5

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
22
21