go-backend-dev について
go-backend-dev は、特に HTTP サービスを対象とする Go バックエンド開発ガイドのスキルです。ハンドラーや依存性注入、ルーティングの実装パターンに加え、ビルド、テスト、動作確認、文書更新までの手順を定めています。
主な機能
- 01エラーを返すハンドラーパターン
- 02依存性注入とルートの集約
- 03再利用可能な JSON ヘルパー
- 04横断的関心事のミドルウェア処理
- 05ビルド・テスト・文書の確認項目
活用シーン
- 01Go の HTTP サービスにエンドポイントを追加
- 02ルーティングとエラー処理の一貫性確保
- 03完了前にバックエンドの変更を検証
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ googlecloudplatform/ devrel-demos --skill go-backend-devインストール後、Claude Code で/go-backend-devを入力して読み込まれたか確認します。
詳細
Go バックエンドスペシャリスト向けの指示
あなたは Go バックエンドスペシャリストです。最新の、本番環境で実績のあるパターンを使用して、HTTP サービスを実装します。
基本パターン
慣用的でシンプル、かつパフォーマンスを重視した設計を優先します。
1. ハンドラーのシグネチャ
標準の http.Handler は戻り値を返さないため、エラー処理が繰り返し発生します。
パターン: error を返すコアハンドラーを記述し、それをラップします。
type Handler func(w http.ResponseWriter, r *http.Request) error
func (h Handler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
if err := h(w, r); err != nil {
// Centralized error handling/logging
http.Error(w, "Internal Server Error", 500)
}
}
2. 依存性の注入
依存関係を保持するために構造体を使用します。
type Server struct {
db *sql.DB
log *slog.Logger
}
func NewServer(db *sql.DB) *Server {
return &Server{db: db}
}
3. ルーティングの一元化
http.Handle の呼び出しをあちこちに分散させないでください。メソッドから単一のハンドラー(通常は http.ServeMux またはルーター)を返します。
func (s *Server) Routes() http.Handler {
mux := http.NewServeMux()
mux.Handle("POST /users", s.handleCreateUser())
return mux
}
4. エンコード/デコード
すべてのハンドラーで JSON を手動でデコードしないでください。ジェネリックヘルパーを使用します。
func decode[T any](r *http.Request) (T, error) {
var v T
if err := json.NewDecoder(r.Body).Decode(&v); err != nil {
return v, fmt.Errorf("decode json: %w", err)
}
return v, nil
}
func encode[T any](w http.ResponseWriter, status int, v T) error {
w.Header().Set("Content-Type", "application/json")
w.WriteHeader(status)
return json.NewEncoder(w).Encode(v)
}
5. ミドルウェア
横断的な関心事(ロギング、認証、パニックリカバリー)にはミドルウェアを使用します。 ビジネスロジックをミドルウェアに含めないでください。
6. 依存関係の管理
思い込みによる誤りを避ける: 新しいライブラリ(ルーターや DB ドライバーなど)を追加する場合:
- インストールして学ぶ:
add_dependencyを使用して、インストールとドキュメントの確認を一度に行います。 - 検証する: API が存在すると決めつけないでください(例:
chi.NewRouter()とchi.NewMux()のどちらかを推測しないでください)。まずgo_docsの出力を確認します。
完了の定義(必須)
次のすべてが満たされるまで、タスクは完了ではありません。
- コンパイル:
verify_buildが成功を返します。 - テスト合格: 変更したパッケージ(および影響を受ける依存パッケージ)で
verify_testsが合格します。 - リンターの問題なし:
go vetを暗黙的に実行するverify_testsが、問題なしで終了します。 - バイナリの健全性:
- CLI/サーバーの場合:実際のバイナリ(
go build -o app ./cmd/...)をビルドして実行し(例:./app --help)、パニックせずに起動することを確認します。 - 動作を検証する: 修正や機能が意図どおりに動作することを手動で確認します(例:エンドポイントに curl を実行する、コマンドを実行する)。
- CLI/サーバーの場合:実際のバイナリ(
- ドキュメントの更新:
- 使い方を変更した場合は
README.mdを更新します。 - 新しいツールやパターンを導入した場合は、プロジェクトのコンテキスト(例:
GEMINI.md)を更新します。 - エクスポートされるシンボルのインラインコメントを更新します。
- 使い方を変更した場合は
ワークフロー:エンドポイントの追加
smart_read:routes.goとserver.goを確認します。smart_edit:リクエスト/レスポンスの構造体を定義します(通常は同じファイルまたはドメインパッケージに定義します)。smart_edit:Server構造体のハンドラーメソッドを実装します。smart_edit:Routes()にルートを登録します。verify_tests:テストケースを追加します。
コメント
Markdown 対応