mcpField
C
code-review

code-review

github.com/getsentryテスト・品質1.1k5.5k 回インストール5 日前に更新
リポジトリ

code-review について

Sentry プロジェクト向けのコードレビュー用スキルです。正確性、セキュリティ、性能、設計、テスト範囲、長期的な影響の評価を支援し、具体的で配慮あるフィードバックとリスクに基づく承認を重視します。

主な機能

  1. 01ランタイムエラーと性能リスクの確認
  2. 02副作用と API 互換性のレビュー
  3. 03セキュリティ脆弱性の特定
  4. 04設計とプロジェクト規約の評価
  5. 05テストと境界条件の確認
  6. 06シニアエンジニアのレビューが必要な変更の指摘

活用シーン

  1. 01Sentry のプルリクエストの不具合確認
  2. 02変更に伴うセキュリティと性能リスクの評価
  3. 03テスト範囲と互換性への影響の確認

インストール

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

$npx skills add https://github.com/getsentry/skills --skill code-review

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

詳細

Sentry コードレビュー

Sentry のプロジェクトのコードをレビューする際は、以下のガイドラインに従ってください。

レビューチェックリスト

問題の特定

コード変更で以下の問題がないか確認してください:

  • ランタイムエラー: 例外の発生可能性、null ポインター問題、範囲外アクセス
  • パフォーマンス: 制限のない O(n²) 操作、N+1 クエリ、不要なメモリ割り当て
  • 副作用: 他のコンポーネントに影響する意図しない動作の変更
  • 後方互換性: 移行パスのない破壊的な API 変更
  • ORM クエリ: 予期しないクエリパフォーマンスを引き起こす複雑な Django ORM
  • セキュリティ脆弱性: インジェクション、XSS、アクセス制御の不備、シークレットの漏洩
設計評価
  • コンポーネント間の相互作用は論理的に妥当か?
  • 変更は既存のプロジェクトアーキテクチャと整合しているか?
  • 現在の要件や目標と矛盾はないか?
テストカバレッジ

すべての PR には適切なテストカバレッジが必要です:

  • ビジネスロジックに対する機能テスト
  • コンポーネント間の相互作用に対する統合テスト
  • 重要なユーザーパスに対するエンドツーエンドテスト

テストが実際の要件とエッジケースをカバーしているか確認してください。テストコードでは過度な分岐やループを避けてください。

長期的な影響

以下を含む変更は、シニアエンジニアによるレビューを依頼してください:

  • データベーススキーマの変更
  • API コントラクトの変更
  • 新しいフレームワークやライブラリの採用
  • パフォーマンスが重要なコードパス
  • セキュリティに関わる機能

フィードバックのガイドライン

トーン
  • 丁寧で共感的であること
  • 曖昧な批判ではなく、実行可能な提案を行うこと
  • 確信が持てない場合は質問の形で伝えること: 「...を検討されましたか?」
承認
  • 残っている問題が軽微な場合は承認すること
  • スタイルの好みを理由に PR をブロックしないこと
  • 目標はリスクの低減であり、完璧なコードではないことを忘れないこと

指摘すべき一般的なパターン

Python/Django
# Bad: N+1 query
for user in users:
    print(user.profile.name)  # Separate query per user

# Good: Prefetch related
users = User.objects.prefetch_related('profile')
TypeScript/React
// Bad: Missing dependency in useEffect
useEffect(() => {
  fetchData(userId);
}, []);  // userId not in deps

// Good: Include all dependencies
useEffect(() => {
  fetchData(userId);
}, [userId]);
セキュリティ
# Bad: SQL injection risk
cursor.execute(f"SELECT * FROM users WHERE id = {user_id}")

# Good: Parameterized query
cursor.execute("SELECT * FROM users WHERE id = %s", [user_id])

参考資料

コメント