LoginSignup
231
207

More than 3 years have passed since last update.

Golang フレームワーク比較

Last updated at Posted at 2019-01-30
フレームワーク ライセンス アップデート頻度 学習しやすさ 情報の多さ 事例の多さ 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) × ×

結果

  1. Echo
  2. Beego
  3. Martini, Gin, Revel, goa
  4. goMicro
  5. 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
1.png
2.png

参考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
3.png

参考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

GAE/Go 事例紹介

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 スター数の推移

4.png

参考

Go言語おすすめフレームワークまとめ | IT/Web系の起業家・フリーランスに贈る、すべらない起業論

継続的なAPI開発に。Goのマイクロサービスまとめ | NTT Communications Developer Portal

go言語でのマイクロサービスフレームワークの雑な比較メモ - Qiita

マイクロサービスのフレームワークまとめ [不定期更新](2017/02/25更新) - Qiita

実例に学ぶGoのアーキテクチャ - 「開発スピード優先」でGMOペパボが採用したのはMVC

その他

Gunosy - 高速な広告配信サーバの作り方のコツ
ぐるなびにおけるGo言語の活用

231
207
5

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
231
207