演習:レビュー対応シミュレーション
ストーリー
「レビューの基本は学んだね。次は実際のレビューコメントへの対応を練習してみよう」
「シミュレーションですか?」
「そう。架空のレビューコメントを見て、どう対応するか考えてみて」
「やってみます!」
ミッション概要
架空のコードレビューシナリオを通じて、レビュー対応の練習をします。
| Part | 内容 | 目安時間 |
|---|---|---|
| Part 1 | レビューコメントの分類 | 15分 |
| Part 2 | レビューへの返信文を作成 | 25分 |
| Part 3 | 修正後のセルフレビュー | 20分 |
達成条件
- Part 1: レビューコメント5件を正しく分類できた
- Part 2: 適切な返信文を3件以上作成できた
- Part 3: セルフレビューチェックリストを使って確認できた
前提:提出したPRの内容
あなたは「ユーザー検索機能」を実装し、PRを提出しました。 以下のレビューコメントが付きました。
// あなたが提出したコード(user-search.js)
function searchUser(name) {
var result = [];
for (var i = 0; i < users.length; i++) {
if (users[i].name == name) {
result.push(users[i]);
console.log("found user:", users[i]);
}
}
return result;
}
function deleteUser(id) {
// TODO: あとで実装
}Part 1: レビューコメントを分類しよう(15分)
以下の5つのレビューコメントを読み、種類を分類してください。
レビューコメント一覧
コメント1(佐藤さん):
varではなくletまたはconstを使うようにしましょう。チームのコーディング規約に従ってください。
コメント2(田中さん):
console.logがそのまま残っています。本番環境では出力されないようにしてください。
コメント3(山田さん):
users[i].name == nameの部分、厳密等価演算子===を使った方が安全です。型の違いによる予期せぬ動作を防げます。
コメント4(鈴木さん):
この検索処理、
filterメソッドを使うともっと簡潔に書けますよ。参考: MDN Array.filter
コメント5(木村さん):
deleteUser関数のTODOコメント、このPRで実装する予定ですか?それとも別タスクですか?
タスク 1-1: コメントを分類する
以下の表を完成させてく ださい。
| コメント | 種類 | 対応の優先度 |
|---|---|---|
| コメント1 | ||
| コメント2 | ||
| コメント3 | ||
| コメント4 | ||
| コメント5 |
種類の選択肢:
- バグの指摘
- スタイル指摘
- 改善提案
- 質問
- セキュリティ指摘
| コメント | 種類 | 対応の優先度 |
|---|---|---|
| コメント1 | スタイル指摘 | 必須(規約違反) |
| コメント2 | バグの指摘 | 必須(本番に影響) |
| コメント3 | 改善提案 | 推奨(安全性向上) |
| コメント4 | 改善提案 | 任意(可読性向上) |
| コメント5 | 質問 | 回答必須 |
Part 2: レビューへの返信文を作成しよう(25分)
各レビューコメントに対する返信文を作成してください。
タスク 2-1: コメント1への返信
佐藤さんのコメント:
varではなくletまたはconstを使うようにしましょう。チームのコーディング規約に従ってください。
返信文を書いてください:
あなたの返信:
@佐藤さん
ご指摘ありがとうございます。
コーディング規約を確認し、`var` を `const` と `let` に修正しました。
- `result` → `const result`(再代入しないため)
- ループの `i` → `let i`(ループ内で変化するため)
今後はコーディング規約を確認してからコミットするよう心がけます。タスク 2-2: コメント4への返信
鈴木さんのコメント:
この検索処理、
filterメソッドを使うともっと簡潔に書けますよ。
ポイント: この提案を採用する場合と、別の理由で今回は採用しない場合の両方を考えてみましょう。
返信文(採用する場合):
あなたの返信:
返信文(採用しない場合):
あなたの返信:
採用する場合:
@鈴木さん
改善提案ありがとうございます!
MDNのリンクも参考になりました。`filter` を使って以下のように修正しました。
const result = users.filter(user => user.name === name);
とても読みやすくなりました。ありがとうございます!採用しない場合:
@鈴木さん
改善提案ありがとうございます。
`filter` を使う方法も検討したのですが、今回は以下の理由で現在の実装を維持したいと考えています。
理由: この関数は将来的に、検索中にログ出力やカウント処理を追加する予定があり、
ループ内で細かい制御が必要になる可能性があるためです。
この判断で問題ないか、ご意見いただけると助かります。タスク 2-3: コメント5への返信
木村さんのコメント:
deleteUser関数のTODOコメント、このPRで実装する予定ですか?それとも別タスクですか?
返信文を書いてください:
あなたの返信:
@木村さん
ご質問ありがとうございます。
`deleteUser` は別タスク(チケット #456)で実装予定です。
このPRでは検索機能のみをスコープとしているため、TODOコメントを残していました。
ただ、コメントが紛らわしいかもしれないので、以下のように修正しました。
// TODO(#456): deleteUser は別タスクで実装予定
これでスコープが明確になったと思います。ご確認ください。Part 3: 修正後のセルフレビュー(20分)
レビュー指摘を修正した後、再度PRを出す前にセルフレビューを行います。
修正後のコード
// user-search.js(修正後)
function searchUser(name) {
const result = users.filter(user => user.name === name);
return result;
}
// TODO(#456): deleteUser は別タスクで実装予定
function deleteUser(id) {
throw new Error('Not implemented');
}タスク 3-1: セルフレビューチェックリスト
以下のチェックリストを使って、修正後のコードを確認してください。
## セルフレビューチェックリスト
### コーディング規約
- [ ] var を使わず let/const を使っている
- [ ] 厳密等価演算子(===)を使っている
- [ ] console.log が削除されている
### レビュー指摘への対応
- [ ] 指摘1(var → const/let)に対応した
- [ ] 指摘2(console.log削除)に対応した
- [ ] 指摘3(== → ===)に対応した
- [ ] 指摘4(filter使用)に対応した
- [ ] 指摘5(TODOの説明)に対応した
### その他
- [ ] 新しいバグを作り込んでいない
- [ ] テストが通る
- [ ] 不要な変更が含まれていないタスク 3-2: 修正漏れがないか確認
上記のチェックリストを実際にチェックして、修正漏れがないか確認してください。
<details> <summary>解答例</summary>## セルフレビューチェックリスト
### コーディング規約
- [x] var を使わず let/const を使っている → const result を使用
- [x] 厳密等価演算子(===)を使っている → filter内で === を使用
- [x] console.log が削除されている → filter使用により不要に
### レビュー指摘への対応
- [x] 指摘1(var → const/let)に対応した
- [x] 指摘2(console.log削除)に対応した
- [x] 指摘3(== → ===)に対応した
- [x] 指摘4(filter使用)に対応した
- [x] 指摘5(TODOの説明)に対応した
### その他
- [x] 新しいバグを作り込んでいない
- [ ] テストが通る → 要確認
- [x] 不要な変更が含まれていない達成度チェック
以下を確認してください:
- Part 1: レビューコメント5件を正しく分類できた
- Part 2: 適切な返信文を3件以上作成できた
- Part 3: セルフレビューチェックリストを使って確認できた
まとめ
この演習で実践したこと:
| 操作 | 内容 |
|---|---|
| コメント分類 | 指摘の種類を理解し優先度を判断 |
| 返信作成 | 感謝 + 対応内容を明確に伝える |
| セルフレビュー | 修正漏れを防ぐためのチェック |
重要なポイント
- まず感謝を伝える - レビュアーの時間を大切にする
- 対応内容を明確に - 何をどう修正したかを説明する
- 採用しない場合も理由を - 一方的に却下せず、議論する姿勢を見せる
- セルフレビューで漏れ防止 - 再レビューを減らし、効率を上げる
次のステップへ
レビュー対応のシミュレーションは完了しました。
次のセクションでは、Step 4の理解度を確認するチェックポイントに挑戦します。
推定所要時間: 60分