← 記事一覧へ

Go のマイクロサービスフレームワーク

Go のフレームワークから、サービスの構成と選び方を整理します。

フレームワークとは

フレームワークは、開発の足場や標準的なひな型と考えられます。

必要な部品が用意され、繰り返しの作業を減らせます。プロジェクトの書き方やディレクトリ構成もそろうので、読みやすくなります。

社内で共通のフレームワークを使えば、引き継ぎや保守がしやすくなります。脆弱性への対応も共通化できますが、各サービスの依存関係の更新は必要です。ログや監視などの共通処理を部品として用意すれば、開発者は業務の処理に集中でき、配線のためのコードを減らせます。

Java には Spring を中心とする広いエコシステムがあります。多くの問題は先人が経験しており、文書や技術記事も充実しています。この成熟した環境は強みです。

Go 開発で使うフレームワーク

Go は 2009 年に正式公開されました。Spring を中心とする Java と比べてフレームワークの選択肢が分散しており、大企業の独自実装やオープンソースの開発チームによるものがあります。

基盤チームは、自社の業務に合うフレームワークを開発することがあります。他のシステムとの接続、独自プロトコル、使いやすさ、安定性、セキュリティなどを考慮する必要があり、簡単な仕事ではありません。

学ぶときは、API の使い方だけでなく、実装の考え方を理解したいです。車輪を作るところから、車を作れるところへ進みたいと思います。

マイクロサービスの基本的な部品

  • ログ:異なる設定に対応する

  • 設定管理:各サービスを個別に設定せず、集約して管理する

  • データベースへのアクセス

  • メッセージキュー:Kafka、RabbitMQ など

  • メトリクスと監視

  • トレーシング:リクエストの流れ全体を追い、ボトルネックを調べる

  • サービス登録と発見

  • 依存性の注入

  • RPC:リモート呼び出しによるサービス間のデータ交換

  • サーキットブレーカーとレート制限:障害の連鎖を抑える

  • ……

主なオープンソースの選択肢

  • Go-kit

    • 小さな部品を組み合わせてマイクロサービスを実装する Go のツールキットです。
  • Go-micro

    • 初期からある Go のフレームワークです。新しい Go との互換性は、使用するバージョンで確認します。
  • Go-kratos

    • Bilibili が公開したフレームワークで、部品を選んだり独自実装を利用したりできます。
  • Kitex

    • ByteDance が公開したフレームワークです。独自の netpoll を用い、性能を重視していますが、利用には一定の理解が必要です。
  • Go-zero

    • TAL が公開した包括的なマイクロサービスフレームワークです。以前、夕食の時間に同社の前を通ったときは、退勤がわりと早そうに見えました。

参考資料

この記事の日付について

旧日付の 2025-01-16 は公開履歴と一致しません。旧サイトで確認できる最初の公開日、2026-01-18 を採用しています。執筆日は未確認です。