チェックポイント:コードレビュー実践
ストーリー
「レビューの実践演習お疲れさま。 ここで一度、知識を整理しよう」
松本先輩がクイズを用意してくれた。
「コードスメルの検出、リファクタリングの提案、 レビュー手法の使い分け......全部つながっているからな」
クイズの説明
Step 2 で学んだコードレビュー実践の知識を確認します。
- 全6問
- 合格ライン: 80%(5問正解)
問題
Q1. 以下のコードに含まれるコードスメルとして最も適切なものはどれですか?
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) 神クラス
正解: B
このコードには3つのコードスメルがあります: (1) if 文が3段にネストしている(深いネスト)、(2) 1, 'A', 100, 1.1 がマジックナンバー/マジックストリング、(3) any[] 型の使用でTypeScript の型安全性が失われています。
Q2. 「早期リターン(Guard Clauses)」リファクタリングの主な目的はどれですか?
- A) 関数の実行速度を向上させる
- B) ネストを浅くして可読性を改善する
- C) テストケースの数を減らす
- D) メモリ使用量を削減する
正解: B
早期リターンは、異常ケースを関数の冒頭でチェックしてreturnすることで、正常系のコードのネストを浅く保つリファクタリング手法です。可読性の改善が主目的であり、パフォーマンスへの影響はごくわずかです。
</details>Q3. ペアレビューが最も効果的な場面はどれですか?
- A) 1行のタイポ修正のPR
- B) ドキュメントの誤字修正
- C) 認証モジュールの設計変更を含む200行のPR
- D) CSSのカラー変更
正解: C
ペアレビューは、複雑な変更やセキュリティに関わる変更に最も効果的です。認証モジュールの設計変更はセキュリ ティに直結する重要な変更であり、リアルタイムで議論しながらレビューすることで、設計上の問題を早期に発見できます。A/B/Dは非同期PRレビューで十分です。
</details>Q4. N+1クエリ問題を含むコードに対するレビューコメントのプレフィックスとして最も適切なものはどれですか?
- A)
[Nit] - B)
[FYI] - C)
[Should Fix]または[Must Fix] - D)
[Praise]
正解: C
N+1クエリ問題はパフォーマンスに直接影響する問題です。データ量が少ない開発環境では気づきにくいが、本番環境でデータが増えるとレスポンスタイムの著しい劣化を引き起こします。影響の大きさに応じて [Should Fix] または [Must Fix] を使うべきです。
Q5. 以下のリファクタリング手法と適用シーンの組み合わせとして正しいものはどれですか?
- A) 関数の抽出 → パラメータが多い関数
- B) パラメータオブジェクトの導入 → 引数が8つある関数
- C) 条件式のポリモーフィズム → ネストが深い関数
- D) 早期リターン → switch 文が長い関数
正解: B
パラメータオブジェクトの導入は、引数が多すぎる関数に対して適用します。引数をオブジェクトにまとめることで、関数のインターフェースが改善されます。関数の抽出は長い関数に、条件式のポリモーフィズムは長い switch/if-else チェーンに、早期リターンはネストが深い関数に適用します。
</details>Q6. コードレビューで「自動化すべき」チェック項目はどれですか?
- A) ビジネスロジックの正確性
- B) コードフォーマットとリント警告
- C) 設計パターンの妥当性
- D) テストケースの十分性
正解: B
コードフォーマット(Prettier)やリント(ESLint)はCIで自動化すべきです。人間のレビュアーはスタイルの問題に時間を使うのではなく、ビジネスロジックの正確性、設計の妥当性、テストの十分性など、ツールでは判断できない本質的な問題に集中すべきです。
</details>結果
5問以上正解の場合
合格です。Step 3 に進みましょう。
「良い結果だ。コードレビューの基礎から実践までしっかり身についている。 次はテスト設計の世界に入るぞ」
4問以下の場合
もう少し復習しましょう。
| 問題 | 復習セクション |
|---|---|
| Q1 | Step 2-2 コードスメルの検出 |
| Q2 | Step 2-3 リファクタリングの提案 |
| Q3 | Step 2-4 ペアレビューとモブレビュー |
| Q4 | Step 1-3 建設的なコメントの書き方 |
| Q5 | Step 2-3 リファクタリングの提案 |
| Q6 | Step 1-4 レビューツールの活用 |
次のステップへ
Step 3 からはテスト設計の基本を学びます。コードレビューとテストは品質保証の両輪です。
推定読了時間: 30分