QUIZ 30分

チェックポイント:コードレビュー実践

ストーリー

「レビューの実践演習お疲れさま。 ここで一度、知識を整理しよう」

松本先輩がクイズを用意してくれた。

「コードスメルの検出、リファクタリングの提案、 レビュー手法の使い分け......全部つながっているからな」


クイズの説明

Step 2 で学んだコードレビュー実践の知識を確認します。

  • 全6問
  • 合格ライン: 80%(5問正解)

問題

Q1. 以下のコードに含まれるコードスメルとして最も適切なものはどれですか?

typescript
function processData(items: any[]) {
  const results: any[] = [];
  for (let i = 0; i < items.length; i++) {
    if (items[i].status === 1) {
      if (items[i].type === 'A') {
        if (items[i].value > 100) {
          results.push({
            id: items[i].id,
            calculated: items[i].value * 1.1,
          });
        }
      }
    }
  }
  return results;
}
  • A) 重複コード
  • B) 深いネスト + マジックナンバー + any 型の使用
  • C) Feature Envy
  • D) 神クラス
<details> <summary>解答と解説</summary>

正解: B

このコードには3つのコードスメルがあります: (1) if 文が3段にネストしている(深いネスト)、(2) 1, 'A', 100, 1.1 がマジックナンバー/マジックストリング、(3) any[] 型の使用でTypeScript の型安全性が失われています。

</details>

Q2. 「早期リターン(Guard Clauses)」リファクタリングの主な目的はどれですか?

  • A) 関数の実行速度を向上させる
  • B) ネストを浅くして可読性を改善する
  • C) テストケースの数を減らす
  • D) メモリ使用量を削減する
<details> <summary>解答と解説</summary>

正解: B

早期リターンは、異常ケースを関数の冒頭でチェックしてreturnすることで、正常系のコードのネストを浅く保つリファクタリング手法です。可読性の改善が主目的であり、パフォーマンスへの影響はごくわずかです。

</details>

Q3. ペアレビューが最も効果的な場面はどれですか?

  • A) 1行のタイポ修正のPR
  • B) ドキュメントの誤字修正
  • C) 認証モジュールの設計変更を含む200行のPR
  • D) CSSのカラー変更
<details> <summary>解答と解説</summary>

正解: C

ペアレビューは、複雑な変更やセキュリティに関わる変更に最も効果的です。認証モジュールの設計変更はセキュリティに直結する重要な変更であり、リアルタイムで議論しながらレビューすることで、設計上の問題を早期に発見できます。A/B/Dは非同期PRレビューで十分です。

</details>

Q4. N+1クエリ問題を含むコードに対するレビューコメントのプレフィックスとして最も適切なものはどれですか?

  • A) [Nit]
  • B) [FYI]
  • C) [Should Fix] または [Must Fix]
  • D) [Praise]
<details> <summary>解答と解説</summary>

正解: C

N+1クエリ問題はパフォーマンスに直接影響する問題です。データ量が少ない開発環境では気づきにくいが、本番環境でデータが増えるとレスポンスタイムの著しい劣化を引き起こします。影響の大きさに応じて [Should Fix] または [Must Fix] を使うべきです。

</details>

Q5. 以下のリファクタリング手法と適用シーンの組み合わせとして正しいものはどれですか?

  • A) 関数の抽出 → パラメータが多い関数
  • B) パラメータオブジェクトの導入 → 引数が8つある関数
  • C) 条件式のポリモーフィズム → ネストが深い関数
  • D) 早期リターン → switch 文が長い関数
<details> <summary>解答と解説</summary>

正解: B

パラメータオブジェクトの導入は、引数が多すぎる関数に対して適用します。引数をオブジェクトにまとめることで、関数のインターフェースが改善されます。関数の抽出は長い関数に、条件式のポリモーフィズムは長い switch/if-else チェーンに、早期リターンはネストが深い関数に適用します。

</details>

Q6. コードレビューで「自動化すべき」チェック項目はどれですか?

  • A) ビジネスロジックの正確性
  • B) コードフォーマットとリント警告
  • C) 設計パターンの妥当性
  • D) テストケースの十分性
<details> <summary>解答と解説</summary>

正解: B

コードフォーマット(Prettier)やリント(ESLint)はCIで自動化すべきです。人間のレビュアーはスタイルの問題に時間を使うのではなく、ビジネスロジックの正確性、設計の妥当性、テストの十分性など、ツールでは判断できない本質的な問題に集中すべきです。

</details>

結果

5問以上正解の場合

合格です。Step 3 に進みましょう。

「良い結果だ。コードレビューの基礎から実践までしっかり身についている。 次はテスト設計の世界に入るぞ」

4問以下の場合

もう少し復習しましょう。

問題復習セクション
Q1Step 2-2 コードスメルの検出
Q2Step 2-3 リファクタリングの提案
Q3Step 2-4 ペアレビューとモブレビュー
Q4Step 1-3 建設的なコメントの書き方
Q5Step 2-3 リファクタリングの提案
Q6Step 1-4 レビューツールの活用

次のステップへ

Step 3 からはテスト設計の基本を学びます。コードレビューとテストは品質保証の両輪です。


推定読了時間: 30分