Lesson 8: コードレビューの依頼
クラス: 初級
所要時間: 約30分
前提知識: 初級 Lesson 1〜7 完了済み
1. 解説
コードレビューの観点
Claude Code に依頼できるレビューの種類:
| 観点 | 内容 | 指示例 |
|---|---|---|
| 正確性 | バグ・論理エラー | 「バグがないか確認せよ」 |
| セキュリティ | 脆弱性・危険なコード | 「セキュリティ観点でレビューせよ」 |
| パフォーマンス | 遅い処理・メモリ | 「パフォーマンスの問題を指摘せよ」 |
| 可読性 | 命名・構造・コメント | 「可読性を改善できる点はありますか?」 |
| SOLID原則 | 設計の良し悪し | 「SOLID原則に照らしてレビューせよ」 |
| テスタビリティ | テストしやすいか | 「テストコードが書きやすい設計か確認せよ」 |
レビュー結果の活用
bash
# レビューをレベル別に整理させる
「重要度を High / Medium / Low に分類してリストアップしてください」
# 修正優先度を決める
「今すぐ修正すべき問題と、後で対応可能な改善点を分けてください」
# 修正を依頼する
「High の問題だけ修正してください。Medium以下は今回は手を付けません」PR(プルリクエスト)レビューの模擬
bash
# git diff を使ったレビュー
「git diff main...feature/login を確認して、
この変更をマージしても安全か判断してください」2. 実践
Step 1: レビュー対象コードを用意
bash
mkdir -p ~/claude-practice/elementary/lesson8
cd ~/claude-practice/elementary/lesson8
cat > auth.js << 'EOF'
const crypto = require('crypto');
const users = {};
function register(username, password) {
if (users[username]) {
return { success: false, error: 'User already exists' };
}
// パスワードを直接保存
users[username] = { password, loginCount: 0 };
return { success: true };
}
function login(username, password) {
const user = users[username];
if (!user) return { success: false, error: 'User not found' };
if (user.password !== password) return { success: false, error: 'Wrong password' };
user.loginCount++;
// セッショントークンを生成
const token = Math.random().toString(36).slice(2);
return { success: true, token };
}
function changePassword(username, oldPassword, newPassword) {
const user = users[username];
if (user.password !== oldPassword) throw new Error('Wrong password');
user.password = newPassword;
return true;
}
function deleteUser(username, password) {
if (users[username].password === password) {
delete users[username];
return true;
}
return false;
}
module.exports = { register, login, changePassword, deleteUser };
EOFStep 2: 総合レビューを依頼
bash
claudeauth.js を読んで、以下の観点でコードレビューをしてください:
1. セキュリティ(最重要)
2. エラーハンドリング
3. コードの堅牢性
4. 改善提案
問題点を重要度 High / Medium / Low で分類してください。Step 3: 優先度の高い問題を修正
レビュー結果を受けて:
High に分類された問題をすべて修正してください。
修正前と修正後のコードを比較して、何が変わったか説明してください。Step 4: セキュリティ特化レビュー
修正後の auth.js に対して、改めてセキュリティ観点のみで
詳細なレビューをしてください。
OWASP Top 10 の観点から問題がないか確認してください。Step 5: レビューコメントの形式化
auth.js の最終版のレビューコメントを GitHub PR のレビュー形式で
まとめてください。各コメントに:
- ファイル名と行番号
- コメント種別(Bug / Suggestion / Nitpick)
- コメント本文
を含めてください。3. 確認課題(Assignment)
課題 8-1: 多角的レビュー
bash
cat > ~/claude-practice/elementary/lesson8/api_handler.js << 'EOF'
const fs = require('fs');
const path = require('path');
function handleRequest(req, res) {
const filename = req.query.file;
const content = fs.readFileSync(path.join('/var/data', filename), 'utf8');
if (req.method === 'POST') {
const body = req.body;
const query = `SELECT * FROM users WHERE name = '${body.name}'`;
// DB に問い合わせ(省略)
res.json({ result: query });
} else {
res.send(content);
}
}
function processUserInput(input) {
return eval(input); // ユーザー入力を評価
}
module.exports = { handleRequest, processUserInput };
EOFこのコードのレビューを以下の観点で依頼せよ:
- セキュリティの脆弱性を特定(何という攻撃が可能か)
- 各脆弱性の CVSS スコアレベルの推定
- 修正方法の提案
達成条件: Path Traversal、SQLインジェクション、コードインジェクションが特定されること
課題 8-2: レビューへの対応
課題 8-1 のレビュー結果を受けて:
指摘されたセキュリティ問題をすべて修正してください。
修正後に再度レビューして、問題が解消されたことを確認してください。達成条件: 修正後のレビューで High 評価の問題がゼロになること
課題 8-3: 設計レビュー
bash
cat > ~/claude-practice/elementary/lesson8/god_class.js << 'EOF'
class Application {
constructor() {
this.users = [];
this.products = [];
this.orders = [];
this.db = null;
}
connectDB(url) { /* DB接続 */ }
disconnectDB() { /* DB切断 */ }
createUser(data) { /* ユーザー作成 */ }
deleteUser(id) { /* ユーザー削除 */ }
createProduct(data) { /* 商品作成 */ }
updateProduct(id, data) { /* 商品更新 */ }
createOrder(userId, items) { /* 注文作成 */ }
cancelOrder(id) { /* 注文キャンセル */ }
sendEmail(to, subject, body) { /* メール送信 */ }
generateReport(type) { /* レポート生成 */ }
validateInput(data, schema) { /* バリデーション */ }
}
EOFgod_class.js を SOLID 原則の観点でレビューしてください。
特に Single Responsibility Principle の観点から問題を指摘し、
どう分割すべきか提案してください。達成条件: SRP 違反が指摘され、責務ごとのクラス分割案が提示されること
