LoginSignup
15

More than 5 years have passed since last update.

概観からGoのWebFrameworkを選ぶ(2016/02)から1年半・・・

Posted at

結論 is Revel

Go WebFrameworkでググると一番上に出ちゃいますね、結局続きかけてな記事でお恥ずかしい・・・
概観からGoのWebFrameworkを選ぶ(2016/02)

この記事から2年弱。結局今どういう状況かと、どう変化したかを書きます。

そもそも

小さなwebサービスの開発をGoで書きました。エンジニア3名くらい、週末や空いた時間を使って気軽にやっていました。みんなバックグラウンドが違うしハーフコミットだったので、好きに書いてました。

結論 is Revel is 特に問題ない

良かった点は
- RailsっぽいアーキテクチャとGoの厳しいルールが程よい
- サンプルがわかりやすい
- アップデートが頻繁

正直、そんなパフォーマンス要求されるサイトでもなかったので、ただ書きやすくて誰でもすぐコード書けそうな状況を作れれば良かったので、WebFrameworkの前提知識がメンバー内でそれなりにあって余裕があるならフルスタックなフレームワークで良かったと思います。

それでも紆余曲折はありました。

  • gorm か gorp?
  • structの使い方に悩む
  • パッケージ管理でinstallでよくビルド失敗 gom -> glide -> dep
  • go version管理でデプロイ失敗

- goの環境作るの面倒問題

etc...etc...

見てわかると思うんですが、正直Goじゃなくてそれを取り巻く
開発環境・ツール・インフラに実はツラミがありました。

開発環境

最初
- goenv
- gom
- go ver1.5.3
- revel ver0.15.0


- vagrant
- gvm
- dep
- go ver1.7
- revel ver0.18.0

です。revelが先日の2017-10-30に最新版が出て、As of Revel 0.15.0, Go 1.6+ is required になり、revel自体をパッケージ管理してないと、 go getするたびに最新版が入ってくる(tag/branch/commit指定とかできない)ので、goのバージョンあげないといけないんですよね・・・
revelのパッケージ管理もdepが推奨されるようになっているので、こちらも対応が必要でした。

「Macですぐ環境つくれたほうがいいし、goenvでローカルを汚さないようにしとけばええやろ!」とか甘いこと考えてたんですが、GO言語の1.6.3より前のバージョンを使っている人は MacOS Sierraにアップグレードしないほうがいい話とかあってですね。「そもそもMacでGo書くな」という啓示がありまして、諦めてVagrantで環境を用意しました。
Ansibleで最初デプロイとかをしていたので、これを作ることは容易でした。

revelのバージョンが上がったり、goのバージョンが変わったりで結構面倒なので、その度に別のVMを立てて検証してました。

デプロイ

Revel Deployment

- Build the app locally and copy it to the server.
- On the server, pull the updated code, build it, and run it.
- Use Heroku to manage deployment.

というのが書かれています。うちはさくらのVPSでサーバ管理しているので、特にいい手段もなく最初はAnsibleでデプロイしてました。
よくビルドで(特にgomで)コケていたので、面倒だったので、CircleCIに変更しました。
ただCircleCIでgoの環境作ってビルドすると結構重かったので、ビルド用のサーバ用意してそこでビルド、生成されたバイナリを本番にscpするというので解決してました。冗長だけどいいのです、1バイナリデプロイ(笑)です。

AWSだとBOXFUSEというサービスが、唯一サポートしているようです。
日本じゃあまり聞かないサービスですね。

それで今だとどうなのか?

201602

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よりさらに早い。まだ若い感じする

201712

Framework Star リポジトリ見ての印象
Revel 9,137(+2,800) あんま伸びてないけど、最近もアップデートしたしちゃんとGoの最新機能を使っている印象
beego 13,198(+6,964) 説明ページも動画あったりリッチ、APIサーバを作るには良さげ
Gin 13,361(+7,936) 一番伸びたな、やっぱ一番早いからかな。
martini 9,795(+1,617) あの頃の大人気martiniがあんま伸びてない、2014年から更新されてないしな・・・
goji 3,344(+397) これも更新ない
echo 8,831(+5,855) v3.2.5まで来ているw、issueとプルリクたくさん上がっている。レビューしきれてなさそう
iris 8,361(new) 良さある、ベンチ早い

ということで、そこまでRevel伸びてないし、star数と更新頻度で見ればRevel/beego/Ginのどれかな気がしますね。webアプリケーション作るならRevel、APIサーバ作るならGin、はじめてGo触る人が多ければbeegoがいいかも。
いまだにWebでなんのフレームワーク使ってGoを触るかがもやもやしているので、この辺いい知見がある方がいればシェアいただければ幸いです。 :pray:

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
15