Agent Skills by ALSEL
Anthropic Claudeその他⭐ リポ 0品質スコア 50/100

golang-grpc

GolangマイクロサービスにおけるgRPCの利用ガイドライン、protobufの構成方法、本番環境向けのパターンを提供します。gRPCサーバー/クライアントの実装・レビュー・デバッグ、protoファイルの作成、インターセプターの設定、ステータスコードを使ったgRPCエラーハンドリング、TLS/mTLSの設定、bufconnを使ったテスト、ストリーミングRPCの実装時に活用してください。

description の原文を見る

Provides gRPC usage guidelines, protobuf organization, and production-ready patterns for Golang microservices. Use when implementing, reviewing, or debugging gRPC servers/clients, writing proto files, setting up interceptors, handling gRPC errors with status codes, configuring TLS/mTLS, testing with bufconn, or working with streaming RPCs.

SKILL.md 本文

Persona: あなたは Go 分散システムエンジニアです。正確性と運用性を備えた gRPC サービスを設計します — 適切なステータスコード、デッドライン、インターセプタ、グレースフルシャットダウンは、ハッピーパスと同じくらい重要です。

モード:

  • ビルドモード — 新しい gRPC サーバーまたはクライアントをゼロから実装する
  • レビューモード — 既存の gRPC コードを正確性、セキュリティ、運用性の問題について監査する

Go gRPC ベストプラクティス

gRPC は純粋なトランスポートレイヤーとして扱ってください — ビジネスロジックから分離してください。公式 Go 実装は google.golang.org/grpc です。

このスキルはすべてを網羅しているわけではありません。詳細についてはライブラリドキュメントとコード例を参照してください。Context7 は検索プラットフォームとして役立ちます。

クイックリファレンス

考慮事項パッケージ / ツール
サービス定義protoc または buf with .proto ファイル
コード生成protoc-gen-go, protoc-gen-go-grpc
エラーハンドリングgoogle.golang.org/grpc/status with codes
リッチなエラー詳細google.golang.org/genproto/googleapis/rpc/errdetails
インターセプタgrpc.ChainUnaryInterceptor, grpc.ChainStreamInterceptor
ミドルウェアエコシステムgithub.com/grpc-ecosystem/go-grpc-middleware
テストgoogle.golang.org/grpc/test/bufconn
TLS / mTLSgoogle.golang.org/grpc/credentials
ヘルスチェックgoogle.golang.org/grpc/health

Proto ファイル構成

ドメインごとにバージョン付きディレクトリ (proto/user/v1/) で整理してください。常に Request/Response ラッパーメッセージを使用してください — string のような裸型は後でフィールドを追加することができません。buf generate または protoc でコード生成してください。

Proto とコード生成リファレンス

サーバー実装

  • ヘルスチェックサービス (grpc_health_v1) を実装してください — Kubernetes プローブは準備状態の判定に必要です
  • ロギング、認証、リカバリーなどのクロスカッティングの懸念事項にはインターセプタを使用してください — ビジネスロジックをクリーンに保ちます
  • GracefulStop() とタイムアウトフォールバック Stop() を使用してください — インフライト RPC をドレインしながらハングアップを防ぎます
  • プロダクションではリフレクションを無効にしてください — API 全体が露出します
srv := grpc.NewServer(
    grpc.ChainUnaryInterceptor(loggingInterceptor, recoveryInterceptor),
)
pb.RegisterUserServiceServer(srv, svc)
healthpb.RegisterHealthServer(srv, health.NewServer())

go srv.Serve(lis)

// On shutdown signal:
stopped := make(chan struct{})
go func() { srv.GracefulStop(); close(stopped) }()
select {
case <-stopped:
case <-time.After(15 * time.Second):
    srv.Stop()
}

インターセプタパターン

func loggingInterceptor(ctx context.Context, req any, info *grpc.UnaryServerInfo, handler grpc.UnaryHandler) (any, error) {
    start := time.Now()
    resp, err := handler(ctx, req)
    log.Printf("method=%s duration=%s code=%s", info.FullMethod, time.Since(start), status.Code(err))
    return resp, err
}

クライアント実装

  • コネクションを再利用してください — gRPC は単一の HTTP/2 コネクション上で RPC を多重化します; リクエスト単位での接続は TCP/TLS ハンドシェイクを浪費します
  • すべてのコールにデッドラインを設定してください (context.WithTimeout) — なければ、遅いアップストリームが goroutine を無期限にハングアップさせます
  • Kubernetes ヘッドレスサービスで round_robindns:/// スキームで使用してください
  • メタデータ (認証トークン、トレース ID) を metadata.NewOutgoingContext で渡してください
conn, err := grpc.NewClient("dns:///user-service:50051",
    grpc.WithTransportCredentials(creds),
    grpc.WithDefaultServiceConfig(`{
        "loadBalancingPolicy": "round_robin",
        "methodConfig": [{
            "name": [{"service": ""}],
            "timeout": "5s",
            "retryPolicy": {
                "maxAttempts": 3,
                "initialBackoff": "0.1s",
                "maxBackoff": "1s",
                "backoffMultiplier": 2,
                "retryableStatusCodes": ["UNAVAILABLE"]
            }
        }]
    }`),
)
client := pb.NewUserServiceClient(conn)

エラーハンドリング

常に status.Error で特定のコードを使用した gRPC エラーを返してください — 生の errorcodes.Unknown になり、クライアントに処置可能な情報を伝えません。クライアントはコードを使用してリトライ vs フェイルファスト vs デグレードを判断します。

コード使用時機
InvalidArgument不正なフォーマットの入力 (フィールド欠落、形式が悪い)
NotFoundエンティティが存在しない
AlreadyExists作成失敗、エンティティが既に存在
PermissionDenied呼び出し元に権限がない
Unauthenticatedトークンが欠落または無効
FailedPreconditionシステムが必要な状態にない
ResourceExhaustedレート制限またはクォータ超過
Unavailable一時的な問題、リトライは安全
Internal予期しないバグ
DeadlineExceededタイムアウト
// ✗ 悪い例 — 呼び出し元は codes.Unknown を取得、リトライすべきか判断できない
return nil, fmt.Errorf("user not found")

// ✓ 良い例 — 特定のコードがクライアントに適切な対応を可能にする
if errors.Is(err, ErrNotFound) {
    return nil, status.Errorf(codes.NotFound, "user %q not found", req.UserId)
}
return nil, status.Errorf(codes.Internal, "lookup failed: %v", err)

フィールドレベルの検証エラーの場合、status.WithDetailserrdetails.BadRequest をアタッチしてください。

ストリーミング

パターンユースケース
サーバーストリーミングサーバーが一連のデータを送信 (ログテイル、結果セット)
クライアントストリーミングクライアントが一連のデータを送信、サーバーが一度に応答 (ファイルアップロード、バッチ)
双方向両者が独立して送信 (チャット、リアルタイム同期)

大きな単一メッセージよりストリーミングを選択してください — メッセージごとのサイズ制限を避け、メモリプレッシャーを低減します。

func (s *server) ListUsers(req *pb.ListUsersRequest, stream pb.UserService_ListUsersServer) error {
    for _, u := range users {
        if err := stream.Send(u); err != nil {
            return err
        }
    }
    return nil
}

テスト

bufconn を使用して、ネットワークオーバーヘッドなしに完全な gRPC スタック (シリアライゼーション、インターセプタ、メタデータ) を演習するメモリ内コネクションを実現してください。常にエラーシナリオが期待される gRPC ステータスコードを返すことをテストしてください。

テストパターンと例

セキュリティ

  • プロダクション環境では TLS を有効化する必要があります — 認証情報はメタデータで送信されます
  • サービス間認証の場合、mTLS を使用するか、サービスメッシュ (Istio, Linkerd) に委譲してください
  • ユーザー認証の場合、credentials.PerRPCCredentials を実装し、認証インターセプタでトークンを検証してください
  • プロダクション環境では API 検出を防ぐためリフレクションを無効にすべきです

パフォーマンス

設定目的典型的な値
keepalive.ServerParameters.Timeアイドルコネクション用のピング間隔30s
keepalive.ServerParameters.Timeoutピング ACK タイムアウト10s
grpc.MaxRecvMsgSize大規模なペイロード用の 4 MB デフォルト上書き16 MB
コネクションプーリング高負荷ストリーミング用の複数コネクション4 接続

ほとんどのサービスはコネクションプーリングが不要です — 複雑性を追加する前にプロファイリングしてください。

よくある間違い

間違い修正方法
生の error を返すcodes.Unknown になり — クライアントはリトライすべきか判断できません。特定のコードで status.Errorf を使用してください
クライアントコールにデッドラインなし遅いアップストリームが無期限にハングします。常に context.WithTimeout を使用してください
リクエストごとに新しいコネクションTCP/TLS ハンドシェイクを浪費します。一度作成し再利用してください — HTTP/2 は RPC を多重化します
プロダクションでリフレクション有効攻撃者がすべてのメソッドを列挙できます。開発/ステージング環境のみで有効化してください
すべてのエラーに codes.Internal を使用間違ったコードはクライアントのリトライロジックを破壊します。Unavailable はリトライをトリガー; InvalidArgument はしません
RPC 引数として裸型を使用string にフィールドを追加できません。ラッパーメッセージは下位互換性のある進化を可能にします
ヘルスチェックサービス欠落Kubernetes が準備状態を判定できず、デプロイ中にポッドを削除します
コンテキストキャンセルを無視長い操作が呼び出し元の放棄後も継続します。ctx.Err() をチェックしてください

相互参照

  • samber/cc-skills-golang@golang-context スキルを参照 (デッドラインとキャンセレーションパターン)
  • samber/cc-skills-golang@golang-error-handling スキルを参照 (gRPC エラーから Go エラーへのマッピング)
  • samber/cc-skills-golang@golang-observability スキルを参照 (gRPC インターセプタ: ロギング、トレース、メトリクス)
  • samber/cc-skills-golang@golang-testing スキルを参照 (bufconn を使用した gRPC テスト)

ライセンス: MIT(寛容ライセンスのため全文を引用しています) · 原本リポジトリ

詳細情報

作者
samber
リポジトリ
samber/cc-skills-golang
ライセンス
MIT
最終更新
不明

Source: https://github.com/samber/cc-skills-golang / ライセンス: MIT

関連スキル

汎用その他⭐ リポ 1,982

superfluid

Superfluidプロトコルおよびそのエコシステムに関するナレッジベースです。Superfluidについて情報を検索する際は、ウェブ検索の前にこちらを参照してください。対応キーワード:Superfluid、CFA、GDA、Super App、Super Token、stream、flow rate、real-time balance、pool(member/distributor)、IDA、sentinels、liquidation、TOGA、@sfpro/sdk、semantic money、yellowpaper、whitepaper

by LeoYeAI
汎用その他⭐ リポ 100

civ-finish-quotes

実質的なタスクが真に完了した際に、文明風の儀式的な引用句を追加します。ユーザーやエージェントが機能追加、リファクタリング、分析、設計ドキュメント、プロセス改善、レポート、執筆タスクといった実際の成果物を完成させるときに、明示的な依頼がなくても使用します。短い返信や小さな修正、未完成の作業には適用しません。

by huxiuhan
汎用その他⭐ リポ 1,110

nookplot

Base(Ethereum L2)上のAIエージェント向け分散型調整ネットワークです。エージェントがオンチェーンアイデンティティを登録する、コンテンツを公開する、他のエージェントにメッセージを送る、マーケットプレイスで専門家を雇う、バウンティを投稿・請求する、レピュテーションを構築する、共有プロジェクトで協業する、リサーチチャレンジを解くことでNOOKをマイニングする、キュレーションされたナレッジを備えたスタンドアロンオンチェーンエージェントをデプロイする、またはアグリーメントとリワードで収益を得る場合に利用できます。エージェントネットワーク、エージェント調整、分散型エージェント、NOOKトークン、マイニングチャレンジ、ナレッジバンドル、エージェントレピュテーション、エージェントマーケットプレイス、ERC-2771メタトランザクション、Prepare-Sign-Relay、AgentFactory、またはNookplotが言及された場合にトリガーされます。

by BankrBot
汎用その他⭐ リポ 59

web3-polymarket

Polygon上でのPolymarket予測市場取引統合です。認証機能(L1 EIP-712、L2 HMAC-SHA256、ビルダーヘッダー)、注文発注(GTC/GTD/FOK/FAK、バッチ、ポストオンリー、ハートビート)、市場データ(Gamma API、Data API、オーダーブック、サブグラフ)、WebSocketストリーミング(市場・ユーザー・スポーツチャネル)、CTF操作(分割、統合、償却、ネガティブリスク)、ブリッジ機能(入金、出金、マルチチェーン)、およびガスレスリレイトランザクションに対応しています。AIエージェント、自動マーケットメーカー、予測市場UI、またはPolygraph上のPolymarketと統合するアプリケーション構築時に活用できます。

by elophanto
汎用その他⭐ リポ 52

ethskills

Ethereum、EVM、またはブロックチェーン関連のリクエストに対応します。スマートコントラクト、dApps、ウォレット、DeFiプロトコルの構築、監査、デプロイ、インタラクションに適用されます。Solidityの開発、コントラクトアドレス、トークン規格(ERC-20、ERC-721、ERC-4626など)、Layer 2ネットワーク(Base、Arbitrum、Optimism、zkSync、Polygon)、Uniswap、Aave、Curveなどのプロトコルとの統合をカバーします。ガスコスト、コントラクトのデシマル設定、オラクルセキュリティ、リエントランシー、MEV、ブリッジング、ウォレット管理、オンチェーンデータの取得、本番環境へのデプロイ、プロトコル進化(EIPライフサイクル、フォーク追跡、今後の変更予定)といったトピックを含みます。

by jiayaoqijia
汎用その他⭐ リポ 44

xxyy-trade

このスキルは、ユーザーが「トークン購入」「トークン売却」「トークンスワップ」「暗号資産取引」「取引ステータス確認」「トランザクション照会」「トークンスキャン」「フィード」「チェーン監視」「トークン照会」「トークン詳細」「トークン安全性確認」「ウォレット一覧表示」「マイウォレット」「AIスキャン」「自動スキャン」「ツイートスキャン」「オンボーディング」「IP確認」「IPホワイトリスト」「トークン発行」「自動売却」「損切り」「利益確定」「トレーリングストップ」「保有者」「トップホルダー」「KOLホルダー」などをリクエストした場合、またはSolana/ETH/BSC/BaseチェーンでXXYYを経由した取引について言及した場合に使用します。XXYY Open APIを通じてオンチェーン取引とデータ照会を実現します。

by Jimmy-Holiday
本サイトは GitHub 上で公開されているオープンソースの SKILL.md ファイルをクロール・インデックス化したものです。 各スキルの著作権は原作者に帰属します。掲載に問題がある場合は info@alsel.co.jp または /takedown フォームよりご連絡ください。
原作者: samber · samber/cc-skills-golang · ライセンス: MIT