

伊藤淳一
1977年生まれ、大阪府豊中市出身。株式会社ソニックガーデンのRailsプログラマ、およびプログラミングスクール「フィヨルドブートキャンプ」のメンター。ブログやQiitaなどでプログラミング関連の記事を多数公開している。将来の夢はプログラマーをみんなの憧れの職業にすること。主な著書に「プロを目指す人のためのRuby入門 改訂2版 言語仕様からテスト駆動開発・デバッグ技法まで」(技術評論社)などがある。
はじめに
みなさん、コードレビューしていますか?
やってます! という人の中でも「わざわざ誰かからコードレビューのやり方を細かくレクチャーされたことがある人」は、少ないのではないでしょうか? 「なんとなく見よう見まねでやって、ここまで来た」なんていう人も、きっと多いと思います。まあ、筆者もその一人なんですけどね(苦笑)。
というわけで、この記事では、「コードレビューってどうやるの?」「コードレビューするときは、どんな点に着目すればいいの?」といったポイントを解説していきます。
本記事の対象読者
この記事は以下のような読者を想定して書かれています。
- コードレビューされる側から、コードレビューする側に最近回った1〜2年目の新人エンジニア
つまり、これまでコードレビューを受けることは何度かあったけど、コードレビューする側に回るのは初めてで、どうコードレビューすればいいか迷っている、という若手を対象にしています。
また、開発チームで新人エンジニアを指導しているリードエンジニアのみなさんも、チーム内で「コードレビューの手順や観点」を議論するための叩き台として本記事の内容をご活用ください。
本記事で説明することと、しないこと
この記事では前編と後編に分けて、以下のような内容を解説します。
前編
- コードレビューの目的
- コードレビューの進め方
後編
- コードレビュー時に着目すべきポイント
- コードレビュー時に役立つテクニックや考え方
注意してほしいのは、この記事では「コードの良し悪しをどう評価するか」というテクニカルな側面にフォーカスしている点です。「相手を怒らせない、うまいコメントの書き方」といったコミュニケーション面のテクニックについては、すでに『伝わるコードレビュー』のような良書があることから、本記事では対象外としています。
鋭い人「コードレビューはAIにやらせればいいんじゃないの?」
近年では「コードレビューはAIにやらせているよ」という現場も増えてきていると思います。もちろん、それ自体は問題ありません。
ただし、ITエンジニアがコードレビューのやり方をよく理解しないままでよいのか、という疑問は残ります。少なくとも、AIが出してきたレビューコメントを読んで、
「うん、適切だね」
「ここはちょっと的外れだな」
「あれっ、この問題が見落とされているぞ?」
というように、その妥当性を評価できるスキルは身につけておくべきではないでしょうか。
そのためにも若手エンジニアはまず、自分でコードレビューする経験をある程度積んでおく必要があります。だからこそ筆者は、この記事を通じて若手エンジニアが自分の頭でコードレビューできるようになるための考え方や観点を伝えたいと考えています。
この記事を読んで基本を学び、コードレビューの経験を積み、自分の中に確固たる「物差し」をつくりましょう。
さて、前置きはこれぐらいにして、いよいよ本編に入りたいと思います。
コードレビューは何のため?
最初にコードレビューの目的を確認しておきましょう。
コードレビューをするのは、ひとことで言うと「良いコードにするため」です。
では「良いコードとはどんなコードなのか?」というと、これはひとことでまとめるのが難しいですね。コードの良し悪しにはいくつかの観点があります。
- 可読性=人間にとって読みやすいコードになっていること
- 保守性=変更したり、機能追加したりしやすいコードになっていること
- 堅牢性=壊れにくいコード、不具合を起こしにくいコードになっていること
- 正しさの確認=仕様通りに動作し、不具合を起こさないこと
- セキュリティ=セキュリティ上の脆弱性がないこと
- パフォーマンス=十分な処理速度が出せること
最初の3つは長期的な観点と言えます。つまり、今後も継続して開発しやすいコードが「良いコード」になります。
後半の3つは短期的な観点です。つまり、そのコードをリリースしたときに問題を起こさないコードが「良いコード」になります。
これら6つの観点に、優先順位は付けられるのでしょうか?―――いえ、付けられません。いずれも重要です。
ですが、現実的にはコードレビューでは最初の3つ(可読性、保守性、堅牢性)が自ずと重視されるのかな、と思います。
可読性、保守性、堅牢性を重視する理由
なぜ可読性、保守性、堅牢性がコードレビューで重視されるのかというと、コードレビューは文字通り「コード」のレビューであり、動作確認ではないからです。
もちろん、レビューの一環として「実際に動かしてみる」という作業を加えることはありますが、それはオプションです。「レビュアーが必ずやらなければいけないこと」には含まれていません(少なくとも筆者の現場ではそうです)。
- 不具合がないか
- 悪意ある攻撃に耐えられるか
- 十分な速度が出るか
というのは、コードからある程度は読み解けるものの、これらは動かして確認するのが一番確実です。
一方、
- 読みやすいコードか
- 変更しやすいコードか
- 壊れにくいコードか
というのは、まさに目の前にある「コード」に対する評価です。そして、それらはコードを読める人にしか判断できません。
というわけで、「可読性、保守性、堅牢性、正しさ、セキュリティ、パフォーマンス」は、いずれもコードレビューする際には確認すべき観点ですが、後半の3つについては「コードレビューを最後の砦」にするのは危険です。そうではなく、コードレビューとは別に「実際に動かして検証する作業(品質保証、QA)」を設けましょう。
逆に言えば、可読性、保守性、堅牢性に関しては「コードレビューが最後の砦」になるので、レビュアーが責任を持ってその妥当性を判断する必要があります。
コードレビューの進め方
コードレビューの目的を理解したら、次は「どんなふうにコードレビューを進めればいいのか」を見ていきましょう。
コードレビューのやり方や進め方は人それぞれだと思いますが、そもそも他のエンジニアがどんなふうにコードレビューしているのか、実際に見たり聞いたりしたことがある人は少ないのではないでしょうか。
プルリクエストを開く
コードレビューのトリガーはプルリクエスト(以下PR)です。筆者の現場ではこんな感じでコードレビューが始まります。
- PRがレビュー可能な状態になったら、開発チーム内の掲示板(Slackのようなもの)に通知される
- 自分の手が空いていてまだ誰もレビューに着手していなければ、「私がレビューします」と宣言してレビューを開始する
なお、場合によっては「伊藤さん、コードレビューお願いします」とバイネームでレビュアーが指定されることもあります(筆者がレビュアーとして最適と判断された場合など)。
diffの大きさを確認する
筆者はPRの規模を確認するために、まずdiffの量に注目します。具体的には以下の画像の緑枠部分です。
ここのプラス(+)の値を見て、なんとなくPRの規模感を測ります。この数字を見たときの筆者の感触は以下の通りです。
- 100未満=おっ、これならすぐ終わりそう 😄
- 100〜500=まあそんなもんでしょ😐
- 500〜1000=むむ、ちょっと多いな🤨
- 1000超=多すぎ! なんで分割してくれないんだ!!😫
もちろん、これはあくまで目安でしかありません。コードとは直接関係のない設定ファイルやテキストファイルが大量に更新されてdiffが増えることもありますし、diffが少なくても予想以上にややこしい修正でレビューに苦労するケースもあります。とはいえ、ざっくりとPRの規模感をつかむには、とりあえずこれで十分です。
descriptionなどからどんな変更が入ったのかを予想する
次に、PRのdescriptionやコミットメッセージを眺めて、このPRがどんなPRなのか(不具合修正なのか、機能追加なのか、単なる設定変更なのか、etc.)を把握します。
そして、descriptionの内容やdiffの大きさなどから、「たぶん、こんな変更が入ってるんだろうな」というふうに、変更内容を予想します。
変更内容を予想するのは、実際にコードをレビューする際に次のような判断をするためです。
- ・予想と実際の変更内容が一致
- → 認識が合っているのでそのままapproveできそう
- ・予想と実際の変更内容が異なる
- → 差分を確認し、必要があれば修正を依頼する
実際に変更されたファイルの一覧を確認する
次に“Files changed”のタブを開きます。
タブを開いたらそのままコードレビューに進んでもいいのですが、diffが大きい場合はいったん左側に表示されるファイルリストを確認します。

ファイルリストを確認するのは、どのファイルに手が加えられたのかを事前にざっくり把握するためです。
実際にコードをレビューしていく
さて、ここまできたら、いよいよコードレビューのスタートです。
筆者は基本的に上から下へ順番にコードを見ていきます。Ruby on Railsの場合、アルファベット順に、
- controllers
- models
- views
- tests または spec
とファイルが並ぶため、上から下にレビューしていくと、以下のような手順でレビューできます。
- controllerの変更点から、modelとviewに入っているであろう変更点を予想する
- そのままmodelをレビュー
- 続けてviewをレビュー
- 最後に、ここまで見た変更点を網羅するようなテストコードが書かれているかレビュー
場合によっては順番を変えることもある
ただし、diffの内容によっては上から下に見ていく方式だと、修正内容が複雑すぎて「何をやっているのか、さっぱりわからん」と思うときもあります。このあたりはケースバイケースで、その都度コードレビューしやすい順番でコードを読んでいきます。
先にテストコードを確認して、「今回はどういう仕様変更が入ったのか」をテストコードから把握することもあります。また、先に上から下まで、ざーっとコードを眺めて、「どこにどんな変更が入ったのか」をざっくり頭に叩き込んでから、あらためて最初からコードをじっくりレビューしていくこともあります。
気になった部分にコメントを入れていく
コードを読みながら気になった部分や、改善できそうな点をコメントしていきます。
観点としては、前述の通り「可読性、保守性、堅牢性、正しさ、セキュリティ、パフォーマンス」の6つです。これらの観点でコードを見ていったときに、「ん?」と思う点があればコメントを入れます。
なお、具体的にどんなコードにどんなコメントを入れたらいいのか、といったポイントは、後編の記事で紹介する予定です。
CIのテストがパスしているかどうかを確認する
もしテストが落ちている場合は「テストが落ちてるけど、大丈夫?」とコメントします。どこでどんな理由で落ちているのかまでは確認しません。それはPRを出した人に確認してもらいます。
このとき、CIのテストがフレーキー(不安定でたまに落ちる状態)だと、しょっちゅう「大丈夫?」というコメントを入れることになってしまいます。この記事のテーマからは逸れてしまいますが、CIのテストを安定化させることも非常に大事です。
レビューが終わったことを連絡する

その後、必要に応じて掲示板などで、レビューが終わったことをPRの作成者に連絡します。
もちろん、致命的な問題がないなら1回目のレビューでapproveすることもあります。
以上が筆者のコードレビューの進め方です。
コードレビューは、する側の努力だけでなく、される側の協力も必要不可欠です。PRの作成者はレビュアーの負担を減らすために、下のような点に配慮しましょう。
大きすぎるPRは小口化する
先ほど筆者は、1000行を超えるPRを見ると「多すぎ!なんで分割してくれないんだ!!😫」と感じる、と書きました。
開発をしている本人はコードを書きながら、PRのサイズがだいたいどれくらいになりそうか想像が付くはずです。「これは軽く1000行を超えてきそうだな」と思ったら、PRを複数回に分けること(PRの小口化)を検討してください。
小口化の具体的なアプローチは、筆者が以前執筆した以下の記事で詳しく説明しています。
調査をサクサク進めるために。伊藤淳一が考える「良いプルリクエスト、悪いプルリクエスト」 | レバテックラボ(レバテックLAB)

descriptionは丁寧に書く
descriptionはPRの概要をつかむための重要な手がかりです。どんな目的で、どんな変更が入ったのか、という概要を箇条書きでまとめましょう。
UIにも大きく手が入った場合は、スクショや動画を使って説明しましょう。
開発チケットがある場合は、そのURLを載せることも忘れずに。仕様変更や機能追加の背景を詳しく知りたい場合、レビュアーはそこから詳細を確認できます。
なお、最近ではAIにdescriptionの作成をお願いすることもできますが、筆者の経験ではAIの説明は、冗長・饒舌になりがちで要点がつかみづらいことが多い気がします(下図参照)。なので、なるべく人間が書いてくれる方がありがたいです。

セルフレビューをし、補足説明を入れる
PRをつくったら「あとはレビューよろ!」で終わらせずに、一度レビュアー視点で自分のPRをセルフレビューしてみてください。自分自身で「可読性、保守性、堅牢性、正しさ、セキュリティ、パフォーマンス」を確認していくと、まだ改善できそうなポイントがいくつか見つかるかもしれません。
さらに、レビュアーの負担を減らすために、以下のような補足説明を入れておきましょう。
- やむを得ない事情でdiffが大きくなった場合は、その理由を書いておく
- 自信がない部分や、しっかり見てほしい部分があれば、「ここを重点的に見てほしい」とコメントを入れておく
- 自動更新されたファイルのせいでdiffが大きくなった場合など、レビューする必要がないファイルが含まれている場合は、その旨コメントを入れておく
- 「初見じゃきっとわからないだろうな」と思うようなややこしいロジックやトリッキーな処理は、事前に説明コメントを入れておく
やっていないことや後回しにしていることを明記する
PRを小口化する場合は、異常系の実装やテストコードの追加を後回しにすることもあると思います。
もし「このPRではあえてやってないんですよ、後続のPRで対応する予定なんですよ」というポイントがあれば、それもdescriptionで明記しておきましょう。そうしないとレビュアーに「なんで異常系を考慮してないんですか?」と無駄なコメントをさせることになってしまいます。
CIのテストが全パスしてからレビューを依頼する
先ほど筆者は、コードレビューの最後のステップとして「CIのテストがパスしているかどうかを確認すること」を挙げました。
CIのテストがパスしていない場合、レビュアーは「フレーキーなテストがたまたま落ちたのか」それとも「本当に不具合があってテストが落ちたのか」の判断が付きません。
再実行すれば通るテストなら、予め再実行してオールグリーンにしておいた方がレビュアーに余計な心配をさせずに済みます。
各種Linterの警告にも対応しておく
Linterやコーディング規約チェックツールによる静的コード解析もCIで実行している場合は、こちらも当然すべてパスさせるべきです。なので、警告が出ていたら事前に対応しておきましょう。
もしルールが厳しすぎて実際の運用にマッチしていないようであれば、ルールを変更することをチーム内で検討してください。
AIによるレビューコメントは事前に確認&修正しておく
最近ではAIを使った自動コードレビューを導入している現場も多いと思います。筆者の現場でもClaudeが自動的にコードレビューを入れてくれるようになっています。
AIのレビューコメントは「百発百中で正しい」とは限らないため、ものによっては「対応不要」とするケースもあると思います。
しかし、AIのコメントをそのまま放置していると、レビュアーから見たときに、PRの作成者が意図的に無視しているのか、それともその指摘に気付いていないだけなのかの判断がつきません。
対応不要なら、「〜のため、対応不要とする」と明示的にコメントを入れるなど、レビュアーから見て「ちゃんとAIのレビューコメントも見てますよ!」とわかるような対応をしましょう。

どれくらい急いでいるのかを明記する
責任感の強いレビュアーは、「自分がボトルネックになってはいけない」と、今持っているタスクよりもあなたのコードレビューを優先してくれます。しかし、そこまで急ぐ必要がないなら、急いでないことを事前に教えてあげた方がレビュアーも優先順位を調整しやすくなります。
反対に、早くレビューを終わらせてリリースしないといけないPRの場合、その旨をきちんと伝えておかないと、レビュアーは「手が空いたときにレビューしよう」と、のんびり構えるかもしれません。
コードレビューはレビュアーの協力なしでは完了しない、ということを念頭において、急ぐのか、急いでいないのか、急ぐならいつまでにapproveがほしいのかをdescriptionに明記しましょう。一番シンプルかつ、誤解が少ない方法は具体的な期日を書いておくことです。
2回目以降のコードレビューの進め方
さて、先ほどは1回目のコードレビューが完了した時点で説明が終わっていました。
1回でapproveにならなかったPRは、修正後の再レビューが発生します。というわけで、2回目以降のコードレビューの進め方も見ていきましょう。
前回のレビュー以降の変更点を確認する
diffが大きいPRの場合、最初から全部レビューし直すと時間がかかりますし、前回のレビューから日が空くと、どこをどう直してほしいと伝えたのか忘れてしまいます。
そのため、筆者は基本的に「前回のレビュー以降の変更点」だけをレビューするようにしています。
前回入れたコメントの下に以下のような“View changes”ボタンが表示されている場合、このボタンをクリックすれば「前回のレビュー以降の変更点」をまとめて確認できます。
ただし、“File changed”タブを一度開くと、このボタンは表示されなくなります。ボタンが表示されなくなった場合は、以下のような形式で「前回のレビュー以降の変更点を確認するURL」を自作できます。
https://github.com/your-org/your-app/pull/1234/files/abcd567..HEAD
ポイントは以下の通りです。
- ・前回コメントしたときの最後のコミットIDをコピーする
- ・例:
abcd567 - ・PRのURLのうしろに
/files/上でコピーしたID..HEADを付ける - ・例:
/files/abcd567..HEAD
このほか、“all commits”を開いて、差分を見たいコミットの始点と終点を「シフト+クリック」する方法もあります。

approve前に最終チェックする
ここでは「前回のレビュー以降の変更点」に大きな問題がなかったと仮定します。
であれば、指摘事項がすべて解消されたということで、approve!……してもいいのですが、念のため最終チェックをしておきましょう。
筆者は以下のようなポイントを最終チェックします。
- ・あらためて全体を再レビューする
- → 全体を見直すと、今まで気付いていなかった問題点に気付く場合がある
- ・コメントの対応漏れがないかチェックする
- → たまに以前コメントした指摘事項が対応されていないケースがある
- ・AIのレビューコメントをチェックする
- → PRの作成者が「対応不要」としていても、レビュアー視点で見ると「いや、これは対応した方がいいんじゃないか?」と思うコメントがたまに見つかる
- ・CIのテストが全パスしていることを確認する
- → 1回目のレビューでも確認しているが、念のためapprove直前にも確認しておく
これ以上ツッコミどころがなければapprove!
再レビューして、「これ以上ツッコミどころがないな」と思えたら、それがレビュー完了の合図です。
approveを選択して“Submit review”ボタンをクリックしましょう。どうもお疲れ様でした!

GitHubのプルリク表示画面にはいろいろと便利な機能が隠されて(?)います。
上のアニメーションgifでは以下のような機能を動かしています。
- UnifiedレイアウトとSplitレイアウトの切り替え
- ファイルツリーの表示・非表示
- レビューコメントの表示・非表示(「I」キーで切り替え)
また、「?」キーを押すと、GitHub上で使えるショートカットの一覧が表示されます。
これを見ると、たとえば「レビューコメントの表示・非表示(Show or hide comments)」には「I」キーが割り当てられていることがわかります。
こうした便利機能を活用して、コードレビューを効率化してみましょう!
※本記事の執筆時点ではGitHubのPRページのアップデートが進行中です。本記事では従来のUI(classic experience)をベースに説明していますが、一足先にパブリックプレビュー版を使っている場合は、画面の見た目や機能が若干異なる点にご注意ください。
まとめ
というわけで、この記事では「コードレビューの目的」や「コードレビューの進め方」をまとめてみました。
なお、本記事で解説した内容は、あくまで筆者の考え方の一例です。そのため、開発の現場によって異なる部分があって当然です。もしご自身の開発チームの考え方にそぐわない部分があれば「この記事にはこう書いてあるけど、ウチのチームではこうしようね」と、チーム内の意識を揃えておきましょう。
さて、続く後編では以下のような、より実践的な内容をお伝えしていきます。
- コードレビュー時に着目すべきポイント
- コードレビュー時に役立つテクニックや考え方
次回もどうぞお楽しみに!
筆者の新刊『技術記事を書く技術 ITエンジニアの価値を高めるアウトプットのすべて』(翔泳社)が、2026年4月27日に発売されます!
- 最初の一歩が踏み出せない
- 数本書いて止まってしまった
- なんとなく書いているが成長を実感できない
そんなITエンジニアのために、Qiitaやブログで15年以上情報発信を続けてきた筆者が、アウトプットの知見やテクニックを惜しみなく伝える珠玉の一冊です。
日々の学びや経験を発信するスキルを身につけ、エンジニアとしての価値を一段引き上げてみませんか?Amazonほかで予約受付中なので、興味がある方はぜひ!


