この記事の目次
Step8: コードレビューの受け方
セルフチェックが完了したら、いよいよコードレビューを依頼します。ここでは、レビュー依頼の出し方から、指摘への対応方法まで解説します。
なぜコードレビューが必要なのか
初心者あるある: 「動くんだから、そのままマージしてよ...」
flowchart TB
A[レビューなしでマージ] --> B[バグが本番に混入]
A --> C[読みにくいコードが蓄積]
A --> D[チーム内で知識が共有されない]
E[レビューを経てマージ] --> F[バグを事前に発見]
E --> G[コード品質が維持される]
E --> H[チーム全員が変更を把握]
レビューの目的:
- バグを早期に発見する: 本番に出る前に問題を見つける
- コードの品質を向上させる: より良い書き方を教えてもらえる
- 知識を共有する: チーム全員が変更内容を把握できる
- 学びの機会を得る: 経験者の視点を学べる
レビューで見られる観点
| 観点 | 内容 |
|---|---|
| 正しさ | 仕様通りに実装されているか |
| 可読性 | 読みやすいコードか |
| 保守性 | 修正しやすいコードか |
| 一貫性 | 規約に従っているか |
| セキュリティ | セキュリティ上の問題はないか |
| パフォーマンス | 明らかな性能問題はないか |
レビュー依頼までの流れ
flowchart LR
A[最新ソース取得] --> B[ブランチ作成]
B --> C[修正・動作確認]
C --> D[セルフチェック]
D --> E[コミット]
E --> F[プッシュ]
F --> G[レビュー依頼]
Gitの場合
# 1. 最新ソースを取得
git fetch origin
git checkout main
git pull origin main
# 2. ブランチを作成
git checkout -b feature/add-user-validation
# 3. 修正して動作確認(省略)
# 4. コミット
git add .
git commit -m "ユーザー入力のバリデーションを追加"
# 5. プッシュ
git push -u origin feature/add-user-validation
# 6. GitHub/GitLabでプルリクエストを作成
SVNの場合
# 1. 最新化
svn update
# 2. 修正して動作確認(省略)
# 3. コミット
svn commit -m "ユーザー入力のバリデーションを追加"
# 4. メール/チケットでレビュー依頼
# 「リビジョンXXXをレビューお願いします」
プルリクエストの書き方
基本構成
## 概要
〇〇機能を追加しました。
## 変更内容
- 入力バリデーションを追加
- エラーメッセージを追加
## 動作確認
- 正常系:〇〇を確認
- 異常系:△△を確認
## 確認してほしいポイント
- □□の実装方法は適切でしょうか
- ◇◇の命名は分かりやすいでしょうか
## 関連チケット
#123
なぜこれらを書くのか
| 項目 | 理由 |
|---|---|
| 概要 | 何をするPRかすぐ分かる |
| 変更内容 | 差分を見る前に全体像が分かる |
| 動作確認 | 確認済みであることの証明 |
| 確認してほしいポイント | レビュアーが重点的に見る箇所が分かる |
確認してほしいポイントの例
迷った点や自信がない点は明記しておきましょう。
## 確認してほしいポイント
- この実装方法で問題ないでしょうか
- 他に良い方法があれば教えてください
- エラーハンドリングの方法は適切でしょうか
指摘を受けたときの心構え
最も重要なこと
指摘は「コード」に対するもの、「あなた」への攻撃ではない
❌ 悪い捉え方
「自分はダメだと言われた」
「否定された」
✅ 良い捉え方
「より良いコードにするためのフィードバック」
「知らなかったことを教えてもらえた」
「成長のチャンス」
防御的にならない
❌ 良くない反応
「でも仕様書にはこう書いてあったので...」
「これでも動きますけど...」
「前任者がこう書いていたので...」
✅ 良い反応
「なるほど、そういう観点がありますね。修正します」
「確かにその方が読みやすいですね。ありがとうございます」
「勉強になりました。今後気をつけます」
指摘は学びのチャンス
指摘を受けた → 新しい知識を得た → 次は同じ指摘を受けない → 成長
指摘された内容はメモして、同じ指摘を繰り返さないようにしましょう。
指摘への対応方法
パターン1: 理解できた指摘
対応: 修正して「修正しました」と返信
[レビュアーのコメント]
この変数名は userList より activeUsers の方が分かりやすいと思います。
[あなたの返信]
ご指摘ありがとうございます。修正しました。
パターン2: 理解できない指摘
対応: 質問して理解する
[レビュアーのコメント]
ここは早期リターンにした方が良いと思います。
[あなたの返信]
ご指摘ありがとうございます。
「早期リターン」について理解を深めたいのですが、
具体的にどのように変更すれば良いでしょうか?
パターン3: 納得できない指摘
対応: 建設的に議論する
[レビュアーのコメント]
この処理は非同期にすべきだと思います。
[あなたの返信]
ご指摘ありがとうございます。
非同期化については、今回の仕様では〇〇という理由で
同期処理としています。
非同期化した方が良い理由を教えていただけますか?
議論のポイント:
- 感情的にならない
- 自分の考えの根拠を説明する
- 相手の意見も尊重する
- 最終的にはチームの方針に従う
よくある指摘と対策
| 指摘 | 対策 |
|---|---|
| 変数名が分かりにくい | 意味のある具体的な名前をつける |
| マジックナンバーがある | 定数として定義する |
| メソッドが長すぎる | 役割ごとに分割する |
| コメントがない/多すぎる | 「なぜ」を説明するコメントを適切に |
| 規約に従っていない | コーディング規約を確認 |
| テストがない | テストコードを追加 |
| nullチェックがない | 適切なnullチェックを追加 |
例: マジックナンバー
// ❌ 指摘される
if (status == 1) {
// ...
}
// ✅ 改善後
private static final int STATUS_ACTIVE = 1;
if (status == STATUS_ACTIVE) {
// ...
}
レビュー後の対応
1. 修正する
指摘に対応してコードを修正します。
2. コメントで返信
修正したことを伝えます。
- 「修正しました」
- 「〇〇に変更しました」
3. 再レビュー依頼
修正が完了したら、再度レビューを依頼します。
4. 学びをメモする
## レビューで学んだこと
### 2024/01/15
- 変数名は具体的に(user → activeUser)
- nullチェックは早期リターンで
### 2024/01/20
- ループ内でのDBアクセスは避ける(N+1問題)
- トランザクションの範囲を意識する
コードレビューの心得まとめ
レビュー依頼時
- セルフチェックしてから依頼する
- PRには背景と確認ポイントを書く
- 動作確認済みであることを明記する
指摘を受けたとき
- 指摘はコードへのフィードバックと捉える
- 防御的にならず、素直に受け止める
- 分からなければ質問する
- 学びをメモして次に活かす
1年目の心構え
指摘が多い ≠ 能力が低い
指摘が多い = 学ぶことがたくさんある = 成長のチャンス
最初は誰でも指摘される。大切なのは、
同じ指摘を繰り返さないこと。