結論 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を立てて検証してました。
デプロイ
- 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を触るかがもやもやしているので、この辺いい知見がある方がいればシェアいただければ幸いです。