Go言語Webフレームワークランキング

Go言語のWebフレームワークをGitHubのスター数が多い順に抽出してランキング化しました。

## 抽出条件

2019/01/06 00:00 時点でスター数1000以上のGo言語のリポジトリを対象に、以下キーワードで検索しHITしたリポジトリをランキング化しました。

検索とソートは[GitHub REST API v3](https://developer.github.com/v3)を利用しました。
手順を以下記事で紹介していますので、様々な条件でランキング作成に活用して頂けますと嬉しいです。
[GitHubリポジトリのスター数でOSSランキング作成](https://qiita.com/loftkun/items/5ea5b9577347505729f6)


検索キーワードは以下です。

カテゴリ | 検索キーワード
--- | ---
Webフレームワーク | "web framework"
RESTフレームワーク | "rest"
router(, multiplexer, mux ) | "router"
マイクロサービス | "micro" or "microservice" (※1)

(※1) "micro"だけで十分そうだが、単語一致でHITするっぽいので"microservice"も追加している

なお、筆者の独断でノイズ(目的に沿わないと判断したリポジトリ)は削っています、予めご了承下さい。

それではランキングの発表です！

## Webフレームワーク

[gin](https://github.com/gin-gonic/gin)が人気です。[beego](https://github.com/astaxie/beego)も後続を引き離しています。
３位から６位まで群雄割拠の様相です。

 rank | repository | stars | description 
| --- | --- | --- | ---
1 🥇 | [gin-gonic/gin](https://github.com/gin-gonic/gin)        | 23406 | Gin is a HTTP web framework written in Go (Golang).<br>It features a Martini-like API with much better performance<br> -- up to 40 times faster.<br>If you need smashing performance, get yourself some Gin.       | 
2 🥈 | [astaxie/beego](https://github.com/astaxie/beego)        | 18465 | beego is an open-source, high-performance web framework<br>for the Go programming language.                                                                                                                 | 
3 🥉 | [kataras/iris](https://github.com/kataras/iris)          | 13285 | The fastest backend community-driven web framework <br>on (THIS) Earth.<br>HTTP/2, MVC and more.<br>Can your favourite web framework do that?<br>👉 http://bit.ly/iriscandothat1 or<br> even http://bit.ly/iriscandothat2 | 
4 | [labstack/echo](https://github.com/labstack/echo)           | 12565 | High performance, minimalist Go web framework                                                                                                                                                            | 
5 | [revel/revel](https://github.com/revel/revel)               | 10638 | A high productivity, full-stack <br>web framework for the Go language.                                                                                                                                       | 
6 | [go-martini/martini](https://github.com/go-martini/martini) | 10411 | Classy web framework for Go                                                                                                                                                                              | 
7 | [gobuffalo/buffalo](https://github.com/gobuffalo/buffalo)   | 3783  | Rapid Web Development w/ Go                                                                                                                                                                              | 
8 | [zenazn/goji](https://github.com/zenazn/goji)               | 3490  | Goji is a minimalistic web framework for Golang <br>that's high in antioxidants.                                                                                                                             | 
9 | [hoisie/web](https://github.com/hoisie/web)                 | 3396  | The easiest way to create web applications with Go                                                                                                                                                       | 
10 | [go-macaron/macaron](https://github.com/go-macaron/macaron) | 2626 | Package macaron is a high productive <br>and modular web framework in Go.                                                                                                                                                                                          | 
11 | [gernest/utron](https://github.com/gernest/utron)           | 2105 | A lightweight MVC framework for Go(Golang)                                                                                                                                                                                                                     | 
12 | [henrylee2cn/faygo](https://github.com/henrylee2cn/faygo)   | 1333 | Faygo is a fast and concise Go Web framework that <br>can be used to develop high-performance <br>web app(especially API) with fewer codes.<br> Just define a struct handler, faygo will automatically bind/verify<br>the request parameters and generate the online API doc. | 

# RESTフレームワーク

REST(ful)に特化しているフレームワークは少ないようですね。

rank | repository | stars | description
--- | --- | --- | ---
1 🥇 | [ant0ine/go-json-rest](https://github.com/ant0ine/go-json-rest) | 3223 | A quick and easy way to setup a RESTful JSON API             | 
2 🥈 | [emicklei/go-restful](https://github.com/emicklei/go-restful)   | 3049 | package for building REST-style Web Services using Google Go | 


## router(, multiplexer, mux )

こちらは思いの外、たくさん抽出されました。
ルーター(URLとコントローラのマッピング機能)を提供するフレームワークです。
気軽に小さく開発を始めるのに良いかもしれません。

rank | repository | stars | description
--- | --- | --- | ---
1 🥇 | [julienschmidt/httprouter](https://github.com/julienschmidt/httprouter) | 8374  | A high performance HTTP request router that scales well                                               | 
2 🥈 | [gorilla/mux](https://github.com/gorilla/mux)                           | 7869  | A powerful URL router and dispatcher for golang.                                                      | 
3 🥉 | [go-chi/chi](https://github.com/go-chi/chi)                             | 4770  | lightweight, idiomatic and composable router for <br>building Go HTTP services                            | 
4 | [gocraft/web](https://github.com/gocraft/web)                             | 1352 | Go Router + Middleware. Your Contexts. | 
5 | [zalando/skipper](https://github.com/zalando/skipper)                     | 1328  | An HTTP router and reverse proxy for <br>service composition, including use cases like Kubernetes Ingress | 
6 | [devopsfaith/krakend](https://github.com/devopsfaith/krakend)             | 1128 | Ultra performant API Gateway with middlewares | 
7 | [go-zoo/bone](https://github.com/go-zoo/bone)                             | 1184 | Lightning Fast HTTP Multiplexer | 

## マイクロサービス

最後に、昨今のトレンドとなっているマイクロサービスです。
[go-kit](https://github.com/go-kit/kit)が圧倒しています。
2016年からリリースが続いている[go-kit](https://github.com/go-kit/kit)や[goa](https://github.com/goadesign/goa)は日本語の紹介記事も散見されますので導入しやすそうです。

[go-micro](https://github.com/micro/go-micro)は英語記事を含めても紹介記事はあまり見当たません、導入のハードルが高いかもしれません。
比較的後発(2017年6月にFirst release)のようですが、スター数が多い理由は正直謎です(詳しい方がいらっしゃましたら教えて頂けると助かります)。

rank | repository | stars | description |
---- | --- | --- | ---
1 🥇 | [go-kit/kit](https://github.com/go-kit/kit)           | 12311 | A standard library for microservices.                                            | 
2 🥈 | [micro/go-micro](https://github.com/micro/go-micro)   | 5004  | A microservice framework                                                         | 
3 🥉 | [goadesign/goa](https://github.com/goadesign/goa)     | 3193  | Design-based APIs and microservices in Go                                        | 
4 | [NYTimes/gizmo](https://github.com/NYTimes/gizmo)        | 2511  | A Microservice Toolkit from The New York Times                                   | 
5 | [koding/kite](https://github.com/koding/kite)            | 2242  | Micro-service framework in Go                                                    | 
6 | [TarsCloud/TarsGo](https://github.com/TarsCloud/TarsGo)  | 1386  | A high performance microservice framework in golang.<br>A linux foundation project. | 
7 | [devfeel/dotweb](https://github.com/devfeel/dotweb)      | 1105 | Simple and easy go web micro framework | 

## まとめ

本記事では、Go言語のWebフレームワークを「スター数」という指標でランキング化してみました。
スター数以外にもコミュニティの活発度、機能性や性能など、選定のための指標は他にもあります、
そんな指標の1つとして本ランキングがお役に立てましたら幸いです。

「こんな抽出条件はどう？」「このOSSが抽出されていない」等のご指摘やアドバイスがありましたら是非コメントして頂けますと幸いです。