コードレビューで最初に確認すべきなのは、「仕様どおりに正しく動くか」と「安全か」です。変数名やインデントなどの見た目は、フォーマッターや静的解析ツールに任せ、人はツールでは判断できない観点に時間を使うのが、効果的なレビューの基本です。

レビューの観点を並べたチェックリストは多くありますが、実務で困るのは「全部見きれない」ことです。この記事では、観点を優先順位つきで整理し、各観点で具体的に何を見ればよいかを示します。あわせて、指摘の伝え方、レビューしやすいプルリクエストの作り方、AIが書いたコードで特に確認したい点まで解説します。

観点の優先順位

優先度 観点 見落としたときの影響
最優先 仕様どおりに動くか(正しさ) 不具合がそのまま本番に出る
最優先 セキュリティ 情報漏えい・不正利用
高 エラー処理・境界値 特定の条件でだけ障害が起きる
高 データの整合性・同時実行 データが壊れる。再現しにくい
高 性能 データが増えてから遅くなる
中 テスト 将来の変更で壊れても気づけない
中 互換性・リリース手順 リリース時に既存の機能が止まる
中 設計・読みやすさ 変更に時間がかかる、不具合が入りやすい
ツールに任せる 書式・命名規則の一部・未使用の変数 ―

時間が限られているときほど、上から順に見るのがポイントです。読みやすさの指摘に時間を使い、境界値の不具合を見落とすのは、レビューで最も避けたいパターンです。

本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。

(記載例)出典:株式会社RJC「コードレビューの観点チェックリスト|優先順位と伝え方」

観点別チェックリスト

1. 仕様どおりに動くか(正しさ)

  • □ チケットや仕様書の要件を、すべて満たしているか
  • □ 仕様にない処理が追加されていないか
  • □ 条件分岐の条件は正しいか(< と <=、&& と ||、否定の向き)
  • □ 画面やAPIの動作を、実際に確認したか(必要なら手元で動かす)

差分だけでなく、変更されていない呼び出し元・呼び出し先も確認すると、影響の見落としを防げます。

2. セキュリティ

  • □ 利用者の入力を、SQL・HTML・コマンドにそのまま埋め込んでいないか(SQLインジェクション・XSS・コマンドインジェクション)
  • □ 権限のチェックがあるか。他人のIDを指定したとき、他人のデータが見えないか
  • □ パスワード・APIキー・トークンをコードに直接書いていないか
  • □ ログやエラーメッセージに、個人情報や秘密情報が出ていないか
  • □ 新しく追加したライブラリは、実在し、信頼できるものか

「ログインしているか」だけでなく、「そのデータを見てよい人か」の確認漏れは、自動テストでも見つかりにくい代表的な脆弱性です。

3. エラー処理・境界値

  • □ null・空文字・空のリスト・0件のときに正しく動くか
  • □ 最小値・最大値・ちょうど境界の値(0、1、上限、上限+1)で正しく動くか
  • □ 例外を握りつぶしていないか(catchして何もしない、ログだけで処理を続ける)
  • □ 外部APIやDBが失敗・タイムアウトしたときの動きは決まっているか
  • □ 日付の境界(月末・年末・うるう年・タイムゾーン)を考慮しているか

4. データの整合性・同時実行

  • □ 複数の更新が、1つのトランザクションにまとまっているか
  • □ 同時に2人が操作したときに、データが上書きされたり重複したりしないか
  • □ リトライや二重送信で、登録や決済が重複しないか(冪等性)
  • □ 途中で失敗したとき、中途半端な状態が残らないか

5. 性能

  • □ ループの中でDBやAPIを呼んでいないか(N+1問題)
  • □ 検索条件の列にインデックスがあるか
  • □ 件数が増えたときに、全件をメモリに読み込んでいないか
  • □ 不要な処理が、繰り返し実行されていないか

開発環境のデータは少ないため、性能の問題は動作確認では見つかりにくい観点です。「本番のデータ量で、この処理は何回・何件になるか」を想像しながら見ます。

6. テスト

  • □ 変更した振る舞いに対するテストがあるか
  • □ 正常系だけでなく、異常系・境界値のテストがあるか
  • □ テストが実装の中身ではなく、振る舞いを検証しているか
  • □ テストが日時・乱数・実行順に依存して、不安定になっていないか

7. 互換性・リリース

  • □ APIの項目の削除や型の変更など、既存の利用者に影響する変更がないか
  • □ DBのマイグレーションは、既存のデータで問題なく実行できるか。大きなテーブルで長時間ロックしないか
  • □ 設定値や環境変数の追加が、リリース手順に反映されているか
  • □ 問題があったときに元に戻せるか

8. 設計・読みやすさ

  • □ 1つのメソッド・クラスが、複数の責任を持ちすぎていないか
  • □ 名前から、何をするものかがわかるか
  • □ 同じ処理が重複していないか。既存の共通処理を使えないか
  • □ コメントは「なぜ」を説明しているか(「何を」はコードでわかるようにする)
  • □ 将来の変更を見越しすぎた、使われない仕組みを作っていないか

ツールに任せる範囲

観点 任せるツールの例
インデント・改行・空白 フォーマッター(Prettier、Black、google-java-formatなど)
未使用の変数・import、よくある誤り 静的解析(ESLint、Ruff、SpotBugs、SonarQubeなど)
型の不一致 型チェック(TypeScript、mypyなど)
既知の脆弱性があるライブラリ 依存関係のスキャン(Dependabotなど)
秘密情報の混入 シークレットスキャン
テストの失敗 CI

ツールで検出できることを、人がレビューで指摘しない仕組みにすると、レビューの時間を重要な観点に集中できます。書式の指摘は、指摘する側・される側のどちらにとっても負担が大きい割に、得られるものが少ないためです。

指摘の伝え方

指摘の重要度を、ラベルで伝える

コメントの先頭に、対応が必須かどうかを示すラベルを付けると、やりとりがスムーズになります。

ラベル 意味 例
[MUST] 修正が必要 [MUST] 他のユーザーの注文も取得できてしまうので、user_idの条件が必要です
[SHOULD] できれば修正してほしい [SHOULD] この処理は既存の共通メソッドを使えそうです
[IMO] 個人的な意見。判断は任せる [IMO] 早期リターンにすると読みやすいかもしれません
[nit] 細かい点。対応しなくてもよい [nit] typoです(recieve → receive)
[Q] 質問。修正の依頼ではない [Q] ここで0件のときはどうなる想定ですか?
[GOOD] よかった点 [GOOD] 境界値のテストがそろっていて安心です

英語圏では、同じ目的で「Conventional Comments」という書式(praise・nitpick・suggestion・issue・question など)も使われています。チームで使うラベルを決めておくことが大切です。

伝わるコメントの書き方

  • 理由を添える — 「修正してください」ではなく、「〜の場合に〜になるため」
  • 具体的な案を示す — 可能なら、修正案のコードを添える
  • 人ではなく、コードについて書く — 「あなたの書き方は」ではなく「この処理は」
  • 質問の形を使う — 意図がわからないときは、決めつけずに「〜の意図でしょうか?」
  • よかった点も伝える — よい書き方はチームに広がり、次の実装の参考になる

完璧を求めすぎない

Googleが公開しているコードレビューのガイドラインでは、「そのプルリクエストが、コードベース全体の状態を確実に良くするなら、完璧でなくても承認してよい」という考え方が示されています。好みの問題で差し戻しを繰り返すより、重要な指摘に絞り、細かな点は[nit]として伝える方が、チーム全体の開発は速くなります。

レビューしやすいプルリクエストの作り方

レビューの質は、レビューされる側の準備でも大きく変わります。

小さく分ける

一度に読む量が多いほど、レビューの精度は下がります。変更は数百行までを目安に、目的ごとにプルリクエストを分けます。

  • リファクタリングと機能追加は、別のプルリクエストにする
  • 大きな機能は、「DBの変更」「APIの追加」「画面」のように段階に分ける
  • 自動生成されたファイルや、機械的な置換は、別のコミットに分けてその旨を書く

説明を書く

  • 何のための変更か(チケットへのリンク)
  • どう変えたか、なぜその方法を選んだか
  • どう確認したか(テスト、画面のスクリーンショット)
  • 特に見てほしい点・不安な点

レビュー依頼前のセルフチェック

  • □ 自分で差分を最初から最後まで読み直したか
  • □ デバッグ用のコード・コメントアウト・不要なファイルが残っていないか
  • □ テストとCIは通っているか
  • □ プルリクエストの説明に、確認方法を書いたか

自分で読み直すだけで見つかる指摘を減らしておくと、レビュアーは本質的な観点に集中できます。

レビューは早めに返す

レビュー待ちの時間が長いと、作成者は別の作業に移り、戻ってきたときに内容を思い出す手間がかかります。Googleのガイドラインでは、遅くとも1営業日以内に最初の反応を返すことが推奨されています。すぐに全部を見られない場合も、「今日の午後に見ます」と一言返すだけで、作成者は予定を立てやすくなります。

AIが書いたコードのレビューで、特に確認したい点

AIのコーディング支援で書かれたコードは、文法的には整っていて、一見正しく見えることが特徴です。そのため、次の点を意識して確認します。

確認したい点 起きやすいこと
仕様との一致 指示していない処理や、仕様と少し違う動作が含まれる
存在しないAPI・ライブラリ 実在しないメソッドや、紛らわしい名前のパッケージを使っている
例外処理 エラーを握りつぶして、処理を続けてしまう
セキュリティ 入力値の検証や権限チェックが抜けている。秘密情報を直接書いている
性能 ループの中でDBやAPIを呼ぶ、素直だが遅い書き方になっている
テストの妥当性 実装に合わせてテストが書かれており、誤った動作を「正しい」と検証している
古い書き方 学習時点の古いAPIや、非推奨の書き方を使っている

特にテストには注意が必要です。AIが実装とテストを両方書いた場合、テストは「実装がしている動作」を確認するだけになりがちです。テストの期待値が、実装ではなく仕様から導かれているかを確認します。

また、AIが書いたコードでも、プルリクエストを出した人が内容を説明できることが前提です。レビュアーは「この部分はどういう意図ですか?」と質問し、作成者が理解しているかを確認するのも有効です。

よくある質問

Q. レビューにどれくらい時間をかけるべきですか? A. 変更の大きさとリスクによりますが、1回のレビューで長時間続けると集中力が落ちます。大きな変更は、プルリクエストを分けてもらうか、時間を区切って複数回に分けて見るのがおすすめです。

Q. 経験の浅いメンバーは、何から見ればいいですか? A. まずは「自分で動かして、仕様どおりか確認する」「わからない部分を質問する」から始めるのがおすすめです。質問はレビューの立派な貢献で、作成者にとっても説明を見直すきっかけになります。

Q. 指摘がたくさんある場合、全部コメントすべきですか? A. 同じ種類の指摘が多い場合は、1か所に代表してコメントし、「他の箇所も同様です」と伝えます。設計から見直す必要がある場合は、細かな指摘を書く前に、直接話して方針をすり合わせる方が効率的です。

Q. レビュアーが見落とした不具合は、レビュアーの責任ですか? A. レビューは不具合をゼロにする仕組みではなく、品質を高めるための共同作業です。見落としがあった場合は、チェックリストやテスト、ツールを改善するきっかけとして振り返るのが建設的です。

まとめ

  • 観点は正しさ・セキュリティ → エラー処理・整合性・性能 → テスト・互換性 → 読みやすさの順に優先する
  • 書式や単純な誤りはツールに任せ、人はツールで判断できない観点に集中する
  • 指摘には [MUST]・[IMO]・[nit]・[Q] などのラベルと理由を添え、よかった点も伝える
  • プルリクエストは小さく分け、説明と確認方法を書き、セルフチェックしてから依頼する
  • AIが書いたコードは、仕様との一致・存在しないAPI・例外の握りつぶし・テストの妥当性を特に確認する

本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。

(記載例)出典:株式会社RJC「コードレビューの観点チェックリスト|優先順位と伝え方」

株式会社RJCでは、コードレビューを「間違いを探す場」ではなく、仲間と一緒に成長する場だと考えています。こうした知識を共有しながら、チームで開発を楽しんでいます。

株式会社RJC ― SI事業・SES事業・AI駆動開発。未経験からエンジニアに育てるのが得意な会社です。

WE ARE HIRING

RJCで一緒に開発しながら、
成長を楽しみませんか?

RJCは、Web・モバイル・AIを活用した開発プロジェクトで、テックリードやPM・PMOも活躍するシステム開発会社です。会社を知る、待遇を確かめる、話を聞いてみる。気になるところ見てみてください!

  • 127日年間休日
  • 12時間平均残業時間
  • 毎日ガチャ遊びココロも大切にする福利厚生。アマギフなどの賞品ラインナップ!

ほかにも、チケットレストラン、書籍読み放題、2年ごとの慰労報奨(休暇 or 金一封)、11期連続の黒字決算。

ABOUT RJC RJCがどんな会社か知る 考え方、研修、働き方、福利厚生、社員の前職まで。RJCのことが丸わかり! RJC丸わかりページへ JOB DESCRIPTION 仕事内容・待遇を見てみる 仕事内容、給与・待遇、選考の流れ。経験者も未経験も!応募前に知りたいこと、まとめました! 募集要項を見る ENTRY エントリーする エントリーは1〜2分・履歴書不要です。まずは話を聞いてみたい、という方でも歓迎です! エントリーフォームへ

RJCで一緒に開発しながら、 成長を楽しみませんか?