📖 読了目安 約7分
この記事の目次

Step7: セルフチェック

コードレビューを依頼する前に、自分でチェックできることは自分でチェックします。これにより、レビュアーの負担を減らし、指摘される回数を減らせます。

なぜセルフチェックが重要なのか

初心者あるある: 「とりあえずレビュー出したら、たくさん指摘された...」

セルフチェックを怠ると:

  • レビュアーの時間を奪う: 簡単なミスの指摘に時間を取られる
  • 信頼を失う: 「この人はチェックしないで出してくる」と思われる
  • やり取りが増える: 指摘→修正→再レビューの往復が増える

セルフチェックをすると:

  • レビュアーが本質的な指摘に集中できる
  • 「ちゃんと確認してから出している」と信頼される
  • レビューの往復が減り、早くマージできる

セルフチェックの観点

観点1: 仕様との整合性

チェック内容: 仕様通りに実装できているか

チェックリスト:
□ 要求された機能がすべて実装されているか
□ 画面の表示内容は仕様通りか
□ エラーメッセージは仕様通りか
□ 計算結果は正しいか
□ 仕様にない機能を勝手に追加していないか

やり方:

1. 設計書・仕様書を開く
2. 仕様の各項目を1つずつ確認
3. 「この仕様は、このコードで実現している」と対応づける

観点2: コードの品質

チェック内容: 読みやすく、保守しやすいコードか

チェックリスト:
□ 変数名・メソッド名は意味が分かるか
□ マジックナンバーは定数化されているか
□ 1つのメソッドが長すぎないか(30行目安)
□ ネストが深すぎないか(3階層目安)
□ 重複コードはないか
□ コメントは適切か(必要な箇所にあるか、不要なものはないか)

観点3: 既存コードとの整合性

チェック内容: プロジェクトのルールに従っているか

チェックリスト:
□ 命名規則に従っているか
□ インデント・フォーマットは統一されているか
□ ログ出力の形式は合っているか
□ エラーハンドリングの方法は合っているか
□ 既存の類似処理と同じ書き方をしているか

観点4: エラー処理

チェック内容: 異常系が適切に処理されているか

チェックリスト:
□ nullチェックは適切か
□ 入力値の検証は十分か
□ 例外処理は適切か(握りつぶしていないか)
□ エラー時のログ出力は十分か
□ トランザクションのロールバックは正しいか

観点5: セキュリティ

チェック内容: セキュリティ上の問題がないか

チェックリスト:
□ SQLインジェクション対策(パラメータバインド)
□ クロスサイトスクリプティング対策(エスケープ)
□ 機密情報をログに出力していないか
□ パスワードをハードコードしていないか
□ 不要な情報をレスポンスに含めていないか

観点6: パフォーマンス

チェック内容: 明らかなパフォーマンス問題がないか

チェックリスト:
□ ループ内でDBアクセスしていないか(N+1問題)
□ 不要なデータを取得していないか
□ 大量データを一度にメモリに読み込んでいないか

セルフチェックの実践方法

方法1: 差分を見直す

# コミット前に差分を確認
git diff

# ステージング済みの差分を確認
git diff --staged

ポイント:

  • 追加・変更した行を1行ずつ確認
  • 「なぜこの変更が必要か」を説明できるか

方法2: 時間を置いてから見直す

書いた直後 → 休憩 → 見直す

理由:
- 書いた直後は「正しいはず」というバイアスがかかる
- 時間を置くと客観的に見られる
- 別の視点で見返せる

方法3: 音読する

コードを声に出して読む

効果:
- 変数名の意味が分かるか確認できる
- 処理の流れを追いやすい
- 違和感に気づきやすい

方法4: チェックリストを使う

毎回同じチェックリストを使う

効果:
- 確認漏れを防げる
- チェック品質が安定する
- 慣れてくると自然にできるようになる

セルフチェックリスト(テンプレート)

レビュー依頼前に、以下を確認しましょう:

基本

  • [ ] コンパイルエラー・構文エラーがない
  • [ ] 動作確認を完了している
  • [ ] 不要なデバッグコードを削除した
  • [ ] コメントアウトしたコードを削除した

仕様

  • [ ] 仕様書の要件をすべて満たしている
  • [ ] 仕様にない機能を追加していない
  • [ ] 画面表示・メッセージが仕様通り

コード品質

  • [ ] 命名が分かりやすい
  • [ ] マジックナンバーがない
  • [ ] メソッドが長すぎない(30行目安)
  • [ ] ネストが深すぎない(3階層目安)
  • [ ] 重複コードがない

既存コードとの整合性

  • [ ] 命名規則に従っている
  • [ ] フォーマットが統一されている
  • [ ] 既存の類似処理と同じ書き方

エラー処理

  • [ ] nullチェックが適切
  • [ ] 入力値の検証が十分
  • [ ] 例外処理が適切
  • [ ] エラーログが出力されている

セキュリティ

  • [ ] SQLインジェクション対策済み
  • [ ] XSS対策済み
  • [ ] 機密情報をログに出力していない

テスト

  • [ ] 単体テストを追加/更新した(必要な場合)
  • [ ] 既存のテストがパスする

よくある指摘とその防ぎ方

指摘1: 「デバッグコードが残っている」

// ❌ レビューで指摘される
System.out.println("debug: " + value);  // 消し忘れ
logger.debug("TODO: あとで消す");        // 消し忘れ

// ✅ セルフチェックで削除
// → 「System.out」「TODO」「FIXME」で検索

指摘2: 「コメントアウトが残っている」

// ❌ レビューで指摘される
// int oldValue = calculate();  // 旧実装
int newValue = calculateNew();

// ✅ セルフチェックで削除
// → 不要なコメントアウトは削除
// → 必要ならコミット履歴で追える

指摘3: 「命名が分かりにくい」

// ❌ レビューで指摘される
int d = 30;
String s = getData();

// ✅ セルフチェックで改善
int expirationDays = 30;
String customerName = getData();

指摘4: 「フォーマットが統一されていない」

// ❌ レビューで指摘される
if(condition){    // 既存: if (condition) {
doSomething();    // インデントなし
}

// ✅ セルフチェックで修正
// → IDEの自動フォーマットを使う
// → 既存コードと比較する

指摘5: 「nullチェックがない」

// ❌ レビューで指摘される
order.getItems().size();  // orderやitemsがnullの可能性

// ✅ セルフチェックで追加
if (order != null && order.getItems() != null) {
    order.getItems().size();
}

セルフチェックにかける時間の目安

実装時間に対する目安:
- 実装 1時間 → セルフチェック 10-15分
- 実装 1日  → セルフチェック 30分-1時間

ポイント:
- 時間をかけすぎない(完璧を目指さない)
- 基本的なチェックは必ず行う
- 慣れてくると短時間で済む

次のステップ

セルフチェックが完了したら、コードレビューを依頼します。

Step8: コードレビューの受け方


関連ページ