go-reviewer について
go-reviewerは、Goプロジェクトのコードを慣用的で保守しやすい形にするためのレビュー用スキルです。インターフェース、並行処理、エラー、命名、複雑さを確認するチェックリストを備えています。
主な機能
- 01インターフェース設計の確認
- 02ゴルーチンとロックの確認
- 03エラー処理の指針
- 04Goの命名とスタイルの確認
- 05複雑さとリフレクションの確認
- 06具体的なレビュー手順
活用シーン
- 01Goの慣習に沿った変更レビュー
- 02ゴルーチン漏れやロック競合の発見
- 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は避けます。
ワークフロー:レビュー
explain_symbol/smart_read:コードを深く理解します。- 分析:上記のルールに照らして確認します。
- 報告:実行可能な改善案を提示します。
- 「このインターフェースは実装側のパッケージで定義されています。利用側に移してください。」
- 「ループ内で
ctxが確認されていないため、このゴルーチンがリークする可能性があります。」
modernize_code:自動で適用できるモダナイゼーションがないか確認します。
コメント
Markdown 対応