概観からGoのWebFrameworkを選ぶ(2016/02)

  • 77
    いいね
  • 1
    コメント
この記事は最終更新日から1年以上が経過しています。

Goでweb作るよ

そう、作るんすよ。
というのも割といい感じだというのがわかったから
iOSエンジニアがGoを使ってみての所感

作るものは?

よくあるログイン機能を持ったCGMのなにがし。

既存の記事

Goフレームワークのパフォーマンス比較
Echo – Go 言語 REST API 開発向け Web Framework の紹
ʕ  ゚皿゚ ʔ GolangのWeb Application Frameworkを色々試してみてもいいかしら?

比較対象

どこを見るの?

  1. Star数、リポジトリ情報
  2. パフォーマンス
  3. 簡単さ
  4. 名前
  5. チームに適しているか?

見ていくよ〜

Star数、リポジトリ情報

Framework Star リポジトリ見ての印象
Revel 6,337 サンプル・モージュール・クーロンもプロモページもあっていい感じ
beego 6,234 Sinatraを参考にしているのでさくっとAPI作るのには良さそう、Auto API documentsが気になる
Gin 5,425 すごく早いらしい、martiniの40倍早いらしい
martini 8,178 一番人気、名前もいいね。唯一日本語ドキュメントがある
goji 2,947 シンプル(小並感)
echo 2,976 Ginよりさらに早い。まだ若い感じする

パフォーマンス

標準になっているgo-http-venchmarkを参考にすると

  1. echo
  2. Gin
  3. Goji
  4. beego
  5. Revel
  6. Martini

ということだ。
Go Web Frameworks 比較を見てみてもMartiniが圧倒的に遅いという報告がある。

Build You Own Web Framework In Go
SinatraっぽいのとRailsっぽいのがあるという分類ができる。Martiniは内部的にリフレクションを使っているから遅いとか黒魔術が入っていたり、依存性の注入という話もややこしいのでちょっと嫌になってきた。

There are two main types of web frameworks. Rails-like frameworks with everything built-in so you can bootstrap your project really quickly. In Go there are some frameworks like this: Beego and Revel.

And there are Sinatra-like frameworks with a router and a few built-in features but you must bring your own ORM and lots of features have to be added. Most Go frameworks have adopted this style: Martini, Goji, Gin, gocraft/web, etc.

martiniとgin
それも一長一短あるかもだけど向かないかも
速度あっても機能がないとか、機能あってもめちゃ重いし難解とかは困るのでほどよいところを使いたい。

簡単さ

これはなんとなくRevelかなという印象。なるべく大変な理解はしたくないのだ・・・
Railsは触ったことあるし、同じような構成で開発できると嬉しいのだ。
Revelのサンプル

名前

これは非常に大事なことだ、愛着に影響する

Framework 意味
Revel 大いに楽しむ、ふける、凝る、酒盛り、お祭り騒ぎ
beego 意味なし
Gin ジン(酒)
martini マティーニ(カクテル)
goji ヒマラヤで取れる赤い実
echo 反響

うん、Revelいいね。

チームに適しているか?

Rails経験者2人、cakePHP経験者3人・・・go未経験者全員という状態で考えれば、なるべく言語以外のフレームワークに対する学習コストは下げたい。

またクライアント、バックエンド、その他開発で分業になるので繋ぎこみのめんどくささも回避したい。
そうなるとライブラリとか管理しやすい方がいい。

あと未経験者ばっかなのでサンプルプロジェクトが充実していると嬉しい。

結論 is Revel

それぞれ中身を見た感じRevelがいいなと感じた。

実際に触ってみるよ

書き途中