mcpField
G
go-backend-microservices

go-backend-microservices

github.com/mindrally開発287831 回インストール3 週間前に更新
リポジトリ

go-backend-microservices について

Go のマイクロサービスバックエンド開発者向けスキルです。アーキテクチャ、並行処理、エラー処理、可観測性、セキュリティ、テストの指針を示します。

主な機能

  1. 01レイヤー構造と依存性注入
  2. 02コンテキスト伝播とエラー処理
  3. 03OpenTelemetry によるトレースとメトリクス
  4. 04構造化ログとセキュリティ対策
  5. 05並行処理の制御とグレースフルシャットダウン
  6. 06ユニットテスト、統合テスト、CI

活用シーン

  1. 01Go マイクロサービスのプロジェクト構成の計画
  2. 02可観測なサービス間呼び出しの構築
  3. 03並行タスクとサービス終了の管理
  4. 04API とビジネスロジックのテスト

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/mindrally/skills --skill go-backend-microservices

インストール後、Claude Code で/go-backend-microservicesを入力して読み込まれたか確認します。

詳細

マイクロサービスの Go バックエンド開発

基本原則

  • ハンドラー、サービス、リポジトリ、ドメインモデルを明確に分離し、クリーンアーキテクチャを適用します
  • 明示的な依存性注入を取り入れ、インターフェース主導の開発を優先します
  • 単一の責務を持つ、短く焦点の定まった関数を記述します
  • ゴルーチンを安全に使用し、共有状態をチャネルまたは sync プリミティブで保護します

プロジェクト構成

明確なディレクトリを備えたモジュール型のプロジェクト構成を維持します。

project/
├── cmd/           # Application entry points
├── internal/      # Private application code
├── pkg/           # Public library code
├── api/           # API definitions (OpenAPI, protobuf)
├── configs/       # Configuration files
└── test/          # Additional test utilities

エラー処理

  • エラーを必ず明示的に確認し、処理します
  • トレースできるよう、ラップしたエラーを使用します:fmt.Errorf("context: %w", err)
  • ドメイン固有のエラーには、カスタムエラー型を作成します
  • 適切なコンテキストを付けて、エラーを呼び出しスタックの上位へ返します
  • 十分なコンテキストを含め、適切なレベルでエラーをログに記録します

コンテキストの伝播

  • リクエストスコープの値、期限、キャンセルにはコンテキストの伝播を使用します
  • 関数の最初のパラメーターとしてコンテキストを渡します
  • 長時間実行する処理では、コンテキストのキャンセルを尊重します
  • 外部呼び出しには適切なタイムアウトを設定します

オブザーバビリティ

包括的なオブザーバビリティを実現するために、OpenTelemetry を導入します。

分散トレーシング
  • 重要な処理にスパンを追加します
  • サービス境界を越えてトレースコンテキストを伝播します
  • スパンに関連する属性を含めます
メトリクス
  • ビジネス処理用のカスタムメトリクスを実装します
  • 標準的なメトリクス型(カウンター、ゲージ、ヒストグラム)を使用します
  • メトリクスを Prometheus 形式でエクスポートします
構造化ログ
  • 一貫したフィールド名を使用して構造化ログを記録します
  • ログエントリーにトレース ID を含めます
  • 適切なレベル(debug、info、warn、error)でログを記録します

セキュリティ

  • すべての外部入力に対して、厳格に入力検証を行います
  • JWT トークンと Cookie には、安全なデフォルト値を使用します
  • 適切な認証と認可を実装します
  • 機密情報の漏えいを防ぐため、ログに記録する前にデータをサニタイズします
  • データベースクエリにはプリペアドステートメントを使用します

テスト

単体テスト
  • 十分なカバレッジを確保できるテーブル駆動の単体テストを記述します
  • 安全な場合は、テストを並列実行します
  • インターフェースを使用して外部依存関係をモックします
  • ビジネスロジックのテストに重点を置きます
統合テスト
  • 統合テストを単体テストと分離します
  • データベースやサービスの依存関係にはテストコンテナーを使用します
  • 実際の API エンドポイントとレスポンスをテストします

並行処理

  • 並行処理にはゴルーチンを適切に使用します
  • 共有状態をチャネルまたは sync プリミティブで保護します
  • 適切なグレースフルシャットダウンを実装します
  • 同時実行数を制限するにはワーカープールを使用します

ドキュメント

  • GoDoc 形式のコメントでドキュメントを記述します
  • コードの変更に合わせてコメントを最新の状態に保ちます
  • 公開 API を詳しく文書化します
  • 有用な場合は、ドキュメントに例を含めます

CI/CD 統合

  • リントとテストのための CI 統合を維持します
  • 包括的なリントには golangci-lint を使用します
  • すべてのプルリクエストでテストを実行します
  • コードカバレッジのレポートを含めます

コメント