Skip to content

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 };
EOF

Step 2: 総合レビューを依頼

bash
claude
auth.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

このコードのレビューを以下の観点で依頼せよ:

  1. セキュリティの脆弱性を特定(何という攻撃が可能か)
  2. 各脆弱性の CVSS スコアレベルの推定
  3. 修正方法の提案

達成条件: 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) { /* バリデーション */ }
}
EOF
god_class.js を SOLID 原則の観点でレビューしてください。
特に Single Responsibility Principle の観点から問題を指摘し、
どう分割すべきか提案してください。

達成条件: SRP 違反が指摘され、責務ごとのクラス分割案が提示されること


自己チェックリスト


次の型

Lesson 9: 簡単なリファクタリング →

Claude Code Dojo