code-review について
開発者向けの構造化されたコードレビュー用スキルです。セキュリティ、正確性、性能、保守性、テストを確認し、レビュー手順や言語別の例、コマンドラインでの検査案を示します。
主な機能
- 01セキュリティと脆弱性の確認
- 02ロジック・性能・リソースの確認
- 03保守性とテストのレビュー
- 04手順と言語別の例
活用シーン
- 01プルリクエストのセキュリティ問題を確認
- 02変更箇所の境界条件やリソース漏れを確認
- 03マージ前にテストと保守性を評価
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ shareai-lab/ learn-claude-code --skill code-reviewインストール後、Claude Code で/code-reviewを入力して読み込まれたか確認します。
詳細
コードレビューのスキル
包括的なコードレビューを実施するための専門知識を身につけました。次の構造化された手順に従ってください。
レビューチェックリスト
1. セキュリティ(重大)
次の点を確認してください。
- インジェクションの脆弱性:SQL、コマンド、XSS、テンプレートインジェクション
- 認証の問題:ハードコードされた認証情報、脆弱な認証
- 認可の欠陥:アクセス制御の欠如、IDOR
- データの漏えい:ログやエラーメッセージに含まれる機密データ
- 暗号化:脆弱なアルゴリズム、不適切な鍵管理
- 依存関係:既知の脆弱性(
npm audit、pip-auditで確認)
# Quick security scans
npm audit # Node.js
pip-audit # Python
cargo audit # Rust
grep -r "password\|secret\|api_key" --include="*.py" --include="*.js"
2. 正確性
次の点を確認してください。
- ロジックエラー:オフバイワンエラー、null の処理、エッジケース
- 競合状態:同期せずに行われる同時アクセス
- リソースリーク:閉じられていないファイルや接続、メモリ
- エラー処理:握りつぶされた例外、エラーパスの欠落
- 型安全性:暗黙的な型変換、any 型
3. パフォーマンス
次の点を確認してください。
- N+1 クエリ:ループ内でのデータベース呼び出し
- メモリの問題:大きなメモリ割り当て、解放されない参照
- ブロッキング処理:非同期コード内の同期 I/O
- 非効率なアルゴリズム:O(n)で実現できる処理におけるO(n^2)
- キャッシュの欠如:高コストな計算の繰り返し
4. 保守性
次の点を確認してください。
- 命名:明確で、一貫性があり、内容をよく表しているか
- 複雑さ:50行を超える関数、3階層を超える深いネスト
- 重複:コピー&ペーストされたコードブロック
- デッドコード:未使用のインポート、到達不能な分岐
- コメント:古い、冗長、または必要な箇所にないコメント
5. テスト
次の点を確認してください。
- カバレッジ:重要なパスがテストされているか
- エッジケース:null、空、境界値
- モック:外部依存関係が分離されているか
- アサーション:意味があり、具体的なチェック
レビュー出力形式
## Code Review: [file/component name]
### Summary
[1-2 sentence overview]
### Critical Issues
1. **[Issue]** (line X): [Description]
- Impact: [What could go wrong]
- Fix: [Suggested solution]
### Improvements
1. **[Suggestion]** (line X): [Description]
### Positive Notes
- [What was done well]
### Verdict
[ ] Ready to merge
[ ] Needs minor changes
[ ] Needs major revision
指摘すべき一般的なパターン
Python
# Bad: SQL injection
cursor.execute(f"SELECT * FROM users WHERE id = {user_id}")
# Good:
cursor.execute("SELECT * FROM users WHERE id = ?", (user_id,))
# Bad: Command injection
os.system(f"ls {user_input}")
# Good:
subprocess.run(["ls", user_input], check=True)
# Bad: Mutable default argument
def append(item, lst=[]): # Bug: shared mutable default
# Good:
def append(item, lst=None):
lst = lst or []
JavaScript/TypeScript
// Bad: Prototype pollution
Object.assign(target, userInput)
// Good:
Object.assign(target, sanitize(userInput))
// Bad: eval usage
eval(userCode)
// Good: Never use eval with user input
// Bad: Callback hell
getData(x => process(x, y => save(y, z => done(z))))
// Good:
const data = await getData();
const processed = await process(data);
await save(processed);
レビューコマンド
# Show recent changes
git diff HEAD~5 --stat
git log --oneline -10
# Find potential issues
grep -rn "TODO\|FIXME\|HACK\|XXX" .
grep -rn "password\|secret\|token" . --include="*.py"
# Check complexity (Python)
pip install radon && radon cc . -a
# Check dependencies
npm outdated # Node
pip list --outdated # Python
レビューワークフロー
- コンテキストを理解する:PR の説明と、リンクされた Issue を読む
- コードを実行する:可能であれば、ビルド、テストを行い、ローカルで実行する
- 上から順に読む:主なエントリーポイントから始める
- テストを確認する:変更はテストされているか。テストは成功するか
- セキュリティスキャンを行う:自動化ツールを実行する
- 手動でレビューする:上記のチェックリストを使う
- フィードバックを書く:具体的に、修正案を提案し、親切に伝える
コメント
Markdown 対応