フレームワーク | ライセンス | アップデート頻度 | 学習しやすさ | 情報の多さ | 事例の多さ | star数 | ドキュメント生成機能 |
---|---|---|---|---|---|---|---|
Beego (GitHub) | Apache-2.0 | ○ | ○ | ○ | × | 21906 | ○ |
Gin (GitHub) | MIT | ○ | ○ | ○ | ○ | 31238 | × |
Martini (GitHub) | MIT | △ | ○ | △ | △ | 10688 | × |
Revel (GitHub) | MIT | ○ | ○ | ○ | × | 10708 | × |
Echo (GitHub) | MIT | ○ | ○ | ○ | ○ | 11322 | × |
Goa (GitHub) | MIT | ○ | ○ | ○ | △ | 3537 | ○ |
Go kit (GitHub) | MIT | ○ | × | × | × | 14795 | × |
micro (GitHub) | Apache-2.0 | ○ | △ | × | × | 6741 | × |
アップデート頻度判断基準→githubのコミットログが直近にあるかどうか
学習のしやすさの判断基準→学習のしやすさ調査
情報の多さの判断基準→ドキュメント充実かどうか、Qiitaなど記事を検索結果の多さ
学習のしやすさ調査:判断基準
- コードがぱっと見分かりやすいかどうか
- 公式ドキュメントが日本語対応か
- 公式ドキュメントが充実しているか
- 情報が多いかどうか
比較表
framework | 分かりやすさ | 公式ドキュメント日本語対応 | 公式ドキュメントが充実しているか | 情報の多さ |
---|---|---|---|---|
Beego(9) | △ | × | ○ | ○ |
Gin(8) | △ | ○ | △ | ○ |
Martini(8) | △ | ○ | △ | △ |
Revel(8) | △ | × | △ | ○ |
Echo(10) | ○ | × | ○ | ○ |
goa(8) | △ | × | △ | ○ |
goKit(5) | △ | × | × | × |
goMicro(6) | △ | × | △ | × |
結果
- Echo
- Beego
- Martini, Gin, Revel, goa
- goMicro
- goKit
特徴、気付いたこと
Beego
フルスタックなWebアプリケーションフレームワーク。ORマッパーまでサポート。RubyのSinatraを元に設計されている。
Gin
比較的軽量なフルスタックWebアプリケーションフレームワーク。マティーニと類似のAPIを提供している。
Martini
モジュール形式のWebアプリケーションサービスフレームワーク。
Revel
JavaのPlay Frameworkを参考に設計されたフルスタックフレームワーク。
Echo
RESTAPI向けのため、RESTの原則に沿った形で設計されたAPIを持っている。Ginを超える程の高速処理。
Goa
デザインコード(goa API Design Language) のファイルを作成するだけで、マイクロサービスのコアとなるファイルを生成してくれる。
Go kit
独自のloadbalancerパッケージが担う、DNSやconsulなど様々なプラグインを追加可能。tracingパッケージを用いて、どの経由のリクエストで出力されたログなのか追いやすいみたい。
micro
マイクロサービスのツールキットとして、各サーバ/サービスツールをそれぞれ分割して別々にパッケージされたもの。中核となるgo-micro、Webサービスを展開するためのgo-web、モニタリングツールのmonitor-web、サービスをトレースするためのtrace-web など、マイクロサービスを構築および運用するためのパッケージが揃っている。
速度比較
参考1
Go Web Frameworks 比較 - Qiita
GitHub - najeira/go-frameworks-benchmark: benchmark for golang web frameworks
参考2
GitHub - julienschmidt/go-http-routing-benchmark: Go HTTP request router and web framework benchmark
参考3
GitHub - smallnest/go-web-framework-benchmark: Go web framework benchmark
参考4
Round 14 results - TechEmpower Framework Benchmarks
GitHub - TechEmpower/FrameworkBenchmarks: Source code for the framework benchmarking project
事例
Gin
GoでJWT認証するAPI Gatewayを作成する - Tech Blog - Recruit Lifestyle Engineer
フレクトのクラウドblog(New): Go言語でトランザクション制御のラッパー関数を作った話
GoでAPIサーバーの開発からデプロイまで - Qiita
Martini
Echo
[VoicyがGoLangとEchoを採択した理由。 - Voicy Tech Blog]
APIにGolangを導入しました - Cluex Developersブログ
mofur x golang (前篇) (フェンリル | デベロッパーズブログ)
かけだし Gopher におくる Golang 製 Web Framework echo の logging について | Goodpatch Blog
goa
アイスタイルにおけるgoa導入事例 / case studies of goa in istyle inc // Speaker Deck
goaを導入した話 // Speaker Deck
フレームワークを使わない
初めてGolangで大規模Microservicesを作り得た教訓
教訓1 フレームワークに拘らない
GoでとあるAPIサーバを実装し直した話 - Mercari Engineering Blog
最初は Revel で書かれていた → フレームワークを使わずに書き直した
GitHub スター数の推移
参考
Go言語おすすめフレームワークまとめ | IT/Web系の起業家・フリーランスに贈る、すべらない起業論
継続的なAPI開発に。Goのマイクロサービスまとめ | NTT Communications Developer Portal
go言語でのマイクロサービスフレームワークの雑な比較メモ - Qiita
マイクロサービスのフレームワークまとめ [不定期更新](2017/02/25更新) - Qiita
[実例に学ぶGoのアーキテクチャ - 「開発スピード優先」でGMOペパボが採用したのはMVC]
(https://employment.en-japan.com/engineerhub/entry/2019/06/20/103000)
その他
[Gunosy - 高速な広告配信サーバの作り方のコツ]
(https://www.slideshare.net/SatoshiSatoshi1/ss-63362495)
[ぐるなびにおけるGo言語の活用]
(https://developers.gnavi.co.jp/entry/golang-batch-tool-server)