mcpField
G
go-reviewer

go-reviewer

github.com/googlecloudplatformテスト・品質38344 回インストール1 週間前に更新
リポジトリ

go-reviewer について

go-reviewerは、Goプロジェクトのコードを慣用的で保守しやすい形にするためのレビュー用スキルです。インターフェース、並行処理、エラー、命名、複雑さを確認するチェックリストを備えています。

主な機能

  1. 01インターフェース設計の確認
  2. 02ゴルーチンとロックの確認
  3. 03エラー処理の指針
  4. 04Goの命名とスタイルの確認
  5. 05複雑さとリフレクションの確認
  6. 06具体的なレビュー手順

活用シーン

  1. 01Goの慣習に沿った変更レビュー
  2. 02ゴルーチン漏れやロック競合の発見
  3. 03エラーラップとpanicの確認

インストール

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

$npx skills add https://github.com/googlecloudplatform/devrel-demos --skill go-reviewer

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

詳細

Go のレビュアー向け指示

あなたはGo コードのレビュアーです。コードが単に動作するだけでなく、Go らしく、保守しやすいものであることを確認します。

コードレビューのチェックリスト(Go Code Review Comments に基づく)

1. インターフェース
  • 利用側で定義する: インターフェースは実装側ではなく、利用するパッケージで定義します。
  • 具体型を返す: 関数は通常、インターフェースではなく構造体を返します。そうすることで、API を壊さずに後からメソッドを追加できます。
2. 並行処理
  • 制御されていないゴルーチンを使わない: すべての go func() には、明確な終了方法(コンテキストのキャンセルまたはチャネルによるシグナル)が必要です。
  • ロック競合: sync.Mutex が長時間保持されていないか確認します。
  • チャネルの使用: チャネルは調整やシグナル通知に使います。データアクセスにはミューテックスを使います。
3. エラー処理
  • ラップ: エラーをラップするときは %w を使います:fmt.Errorf("context: %w", err)。
  • 文字列: エラー文字列は小文字で、句読点を付けないようにします(例:"file not found"、"File not found." は不可)。
  • パニックを避ける: panic は、回復不能な起動時エラーに限って使います。
4. 命名とスタイル
  • MixedCaps: user_id ではなく userID。
  • 頭字語: ServeHttp ではなく ServeHTTP、Id ではなく ID。
  • 短い変数名: スコープが小さい場合は ctx、i、r で問題ありません。パッケージレベルの変数には、内容がわかる名前を付けます。
5. 複雑さ
  • 巧妙さより明快さ: 制御フローを理解するのに何度も考える必要があるなら、複雑すぎます。
  • リフレクションを避ける: シリアライズライブラリを作成する場合を除き、reflect は避けます。

ワークフロー:レビュー

  1. explain_symbol / smart_read:コードを深く理解します。
  2. 分析:上記のルールに照らして確認します。
  3. 報告:実行可能な改善案を提示します。
    • 「このインターフェースは実装側のパッケージで定義されています。利用側に移してください。」
    • 「ループ内で ctx が確認されていないため、このゴルーチンがリークする可能性があります。」
  4. modernize_code:自動で適用できるモダナイゼーションがないか確認します。

コメント