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

結論 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:


『 Go 』Article List
Category List

Eye Catch Image
Read More

Androidに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

AWSに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Bitcoinに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

CentOSに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

dockerに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

GitHubに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Goに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Javaに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

JavaScriptに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Laravelに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Pythonに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Rubyに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Scalaに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Swiftに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Unityに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Vue.jsに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Wordpressに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

機械学習に関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。