Mehwish

なぜ GoFr を見てみたのか

Go でマイクロサービスを構築したことがあるなら、その手順はよく知っているでしょう。ルーターを選び、設定の読み込みを接続し、ロギングを追加し、トレーシングを組み立て、ヘルスチェックを追加し、サーキットブレーカーロジックを自作する… 初めての「本物の」エンドポイントを書く頃には、実際のビジネスロジックとは無関係な数十のアーキテクチャ決定をすでに済ませていることになります。

GoFr は、Go 向けの意見を持ったマイクロサービスフレームワークで、その負担を取り除くことを目指しています。Kubernetes へのデプロイとオブザーバビリティが、後付けではなく第一級市民として組み込まれています。

印象に残った点

GoFr が注目に値した理由をいくつか挙げます。

  • 観測機能が最初から備わっている — 構造化ログ、分散トレース、メトリクスが、5 つの異なるライブラリから組み立てるのではなく、最初から組み込まれている
  • REST の標準がデフォルトで適用される — 白紙の状態ではなく、最初から合理的な規約が用意されている
  • レジリエンスが最初から備わっている — サーキットブレーカーをサポートした HTTP クライアントにより、サービス呼び出しごとにリトライ/バックオフロジックを手作業で実装する必要がない
  • Pub/Sub と gRPC のサポート — 最も一般的な 2 つのサービス間通信パターンを、追加設定なしでカバーする
  • データベースマイグレーション、cron ジョブ、ヘルスチェック — 「退屈だが必要な」配管がすでに用意されている
  • ログレベルのホット変更 — 再デプロイせずに詳細度を調整できる。これはインシデント対応時に大きな効果を発揮する小さな機能です ## はじめに

セットアップは驚くほど最小限です。まず Go 1.24+ を確認し、パッケージを取得します。

go get -u gofr.dev/pkg/gofr

Enter fullscreen mode Exit fullscreen mode

動作する「Hello World」サービスはわずか数行で書けます。

package main

import "gofr.dev/pkg/gofr"

func main() {
    app := gofr.New()

    app.GET("/greet", func(ctx *gofr.Context) (any, error) {
        return "Hello World!", nil
    })

    app.Run() // listens and serves on localhost:8000
}

Enter fullscreen mode Exit fullscreen mode

次のコマンドで実行します。

go run main.go

Enter fullscreen mode Exit fullscreen mode

その後 localhost:8000/greet にアクセスすれば、ルーター設定や手動の JSON マーシャリングボイラープレート、別個のロギング設定なしで、稼働中の HTTP サービスが手に入ります。

適した用途

GoFr は汎用的な万能ツールキットを目指しているわけではありません。Kubernetes へマイクロサービスをデプロイし、オブザーバビリティとレジリエンスパターンを最初から組み込みたいチーム向けに明確に最適化されています。もしそれがあなたの環境に当てはまるなら、現在使用しているスタック(bare net/http + カスタムミドルウェア構成、または Gin や Echo などのフレームワークに追加ツールを重ねたもの)と比較して評価する価値があります。

プロジェクトは積極的にメンテナンスされており、頻繁なコミット、定期的なリリース、十分な実世界での採用実績があり、CNCF Landscape にも掲載されています。Apache-2.0 ライセンスなので、利用権に関する曖昧さはありません。

自分で試してみる

  • リポジトリ: github.com/gofr-dev/gofr
  • サンプル: 基本的な「Hello World」以外の実行可能なパターンを知るには、リポジトリの examples/ ディレクトリを確認してください
  • ドキュメント: 各機能の詳細については README からリンクされているドキュメントを参照してください Go のマイクロサービスを構築していて、毎回同じインフラストラクチャの問題を解決し直すことに疲れているなら、GoFr を 30 分試してみる価値があります。

本番環境で GoFr を使ったことがありますか? どのように機能したか、ぜひコメントでお聞かせください。