はじめまして、グッドパッチでサーバーサイドエンジニアをやってる荒木です。
この記事は Goodpatch Advent Calendar 2023 の 24日目の記事になります。
はじめに
現在golangで開発に使ってるフレームワークはginですが、そろそろ切り替えも検討したいので調べてみました。
対象になるフレームワーク
Webアプリ開発に利用できるもので、スターの多いものをピックアップしています。
gin-gonic/gin (⭐️73.2k)
私も業務で利用していますが、一番最初に候補に上がるかと思います。
利用していてポイントとなる部分。
- 高速:他のフレームワークはginよりベンチマークが高かったりしますが、実用性として十分な速度です。
- ミドルウェアサポート:ミドルウェアを使うことで認証系とかはシンプルに作りやすいです。
- JSONバリデーション:普通に利用できます、フィールドが空の場合などの扱いもgoと同様。
- ドキュメントが多言語で用意されている。こちら
また、レンダリング系も組み込まれていますが、私はテンプレートエンジンを別で組み込んでいます。
欠点としてはORMは組み込まれていないことくらいで使いやすいかと思います。
beego (⭐️30.5k)
beegoはREST API、Web アプリ、バックエンドの開発に適していて、PythonのDjangoとよく似ています。
- REST、MVC
- APIドキュメント生成:開発体制によって必要性は変わるけど便利
- ORM:切り替えは問題なし
- APIモード
- CLIツールが用意されてる:好みは分かれると思いますが、LiveReloadは便利です。
大規模な開発ならginよりこちらを選ぶかも?
echo (⭐️27.4k)
定番なマイクロサービスに適したフレームワークで他のフレームワークと組み合わせて利用するのもOK
- RESTFUL APIの最適解
- シンプルなエラーハンドリング
- ginよりベンチマークが良い
- 任意のテンプレートエンジンが使える:逆を言えば。
- Let’s Encryptによる自動TLS
ライブラリとしての更新頻度は低い点が懸念
fiber (⭐️29.7k)
NodeのExpress.js に似たフレームワークです。
FastHTTPエンジン上に構築されているため、最速のGoフレームワークの1つです。
- メモリ使用量が少ない:正直Ginでも別に困ってないです。
- ミドルウェアとNextをサポート
- 静的ファイル
- 9つのテンプレートエンジンサポート
- WebSocketサポート
- トラフィック軽減用のレイトリミッター
- 解りやすいドキュメントが用意されてる
ミニマリズムとUnix哲学、シンプルでモジュール式。
新規ユーザーには利用しやすいので選択肢として十分ありかと思います。
iris (⭐️24.6k)
高速でありながらシンプルで多機能なWebフレームワークです。
ベンチマーク的にはgin、echoより高い数値を出しています。
- ミドルウェアが豊富
- APIのバージョニング
- ngrokサポート
- 対応テンプレートの多さ
- 独自のWebDAVサーバー
ライブラリによるフレームワーク拡張でほんと機能が豊富で大抵のことができます。
個人的には、APIのバージョン管理の自動化は採用してみたいですね。
go-zero (⭐️26.6k)
大量アクセスに対応したWeb、RPCフレームワークです。
- タイムアウト制御、同時実行制御、レート制限、適応型サーキットブレーカー、適応型負荷分散などの機能
- シンプルな API 記述構文とコード生成ツール
- リクストパラメタの自動検証
- データキャッシュの自動化
- コールトレーシング、メトリクス、モニタリング
Githubの序盤の説明はちょっとアレなんですが、確かに機能としてみると高負荷なサービスを構築してると必要になる機能がきっちり含まれています。
マイクロサービスやってると魅力的に感じる部分が多いですが、シンプルなサービス利用だったり初心者は戸惑う部分も多いかも。
kratos (⭐️21.9k)
マイクロサービス向けのフレームワークです。
- 組み込みミドルウェアが必要十分
- Pluginでconsulなどへ接続
- 標準ログインターフェスでサードパーティログライブラリとFluent収集ログの統合
- Swagger APIは自動的に生成され、 Swaggerプラグインを追加することでSwaggerUIエンドポイントを起動可能
- ドキュメントとサンプルが用意されている
マイクロサービスの構築にあたっては魅力的なフレームワークかと思います。
まとめ
今回、いろいろ調べてみましたが規模や利用するサービスによって選びたいものが増えていました。
特にマイクロサービスのフレームワークは実際に構築しているタイミングではあまり無く自力で開発していた部分がフレームワーク化されていて便利になっています。
個人的にはもう少し「iris」を深掘りしてみようかと考えているので、それはまた別の記事で。