ソフトウェア開発を取り巻く状況は変わりつつありますが、「コードレビュー」は変わらずソフトウェアの品質保証に必要不可欠な作業です。今回は、コードレビューの基礎知識からメリットや観点、注意点まで解説します。
コードレビューの経験がない方はもちろん、現状のコードレビューに課題を感じる方もぜひ参考にしてみてください。
- もくじ
1.コードレビューとは?
コードレビューとは、ソースコードを開発チーム内でチェックし、その品質を確かめる作業のことです。レビューイ(依頼者)がチェックを依頼し、レビューア(チェック者)が成果物をチェックする、という点は一般的なソフトウェア開発のレビューと変わりません。
まずは、コードレビューにおけるレビューイ・レビューアの主な役割について整理しましょう。
レビューイ(依頼者)の役割
レビューイはコードレビューを開催し、ソースコードのチェックを受ける人です。基本的にレビュー対象のソースコードを実装したプログラマーが務めます。詳細は後述しますが、コードレビューはミーティング形式が一般的で、多くの場合はレビューイがミーティングを主導します。
コードレビューの開催にあたっては、事前にレビューアの選定や参加依頼が必要です。コードレビュー本番では、該当ソースコードの説明を行い、レビューアからの質問があれば回答します。対応すべき指摘事項があれば、コードレビュー終了後に修正を行わなければなりません。
ソースコードの修正後は、レビューアや関係者に修正内容を展開し、問題がないか再確認を依頼します。指摘事項が多い場合や、クリティカルな指摘がある場合は、再レビューの開催が必要な場合もあります。
レビューア(チェック者)の役割
レビューアは、レビューイからの依頼を受けてソースコードをチェックする人です。コードレビュー本番では、仕様や設計を踏まえてソースコードをチェックし、指摘や疑問があればレビューイに伝えます。修正が発生した場合は、ソースコードの再チェックも必要です。
ソースコードのチェックにあたっては、インプットとなる開発文書(仕様書や設計書など)の内容把握が欠かせません。本番の進行をスムーズにするため、事前に開発文書や対象ソースコードを確認しておくことが理想です。
やり方はチームにより変わる
コードレビューのやり方は、開発チームによって異なります。関係者が集まって実施するミーティング形式がポピュラーですが、ミーティングは必須ではありません。近年ではWebベースのコードレビューツール(後述)を利用し、オンラインで完結させるケースも増えています。
開発チームの文化や状況によっても、コードレビューのやり方はさまざまです。たとえば、「〇人以上の承認が必要」「指摘だけでなく良い点も伝える」などの独自ルールを定めている開発チームもあります。また、緊急性が高い不具合修正などは、一部の関係者だけで非公式に済ませるケースもあるでしょう。
2.コードレビューの主なメリット4つ
コードレビューにはさまざまなメリットがあります。主なメリットは、次の4つです。
バグの検出ができる
コードレビューによって、コーディングの担当者が気付かないバグの検出が可能です。本人は正しく書いたつもりでも、仕様や設計との食い違いやケアレスミスがあるケースも考えられます。複数人でソースコードを客観的に確認すれば、こうしたバグを見逃すリスクは減るでしょう。
コーディング後のテストでバグが見つかった場合、ソースコードの修正後に再テストの手間が発生します。コードレビューの段階でバグを検出することは、こうした手戻りを最小限に抑えることにもつながります。
ソースコードを最適化できる
ソースコードを最適化できるのもコードレビューのメリットです。動作上の問題はなくても、1行で済む処理が複数行にわたり書かれているなど、記述に無駄があるケースも少なくありません。冗長なソースコードは可読性を低下させるばかりか、将来的にバグの元となる場合もあります。
熟練者を交えてのコードレビューでは、こうしたソースコードの無駄を検出することが可能です。ソースコードを最適化することは、メンテナンス作業の負担軽減に加えて、潜在的なバグのリスクを低減することにもつながります。
知識共有・認識合わせができる
コードレビューには、開発チーム内での知識共有や認識合わせができるという側面もあります。バグが発生しやすい記述方法に関する注意喚起など、有用な情報を開発メンバーに周知することが可能です。
独自のコーディングルールを定めている開発チームやプロジェクトは多いでしょう。こうしたルールが遵守されず、メンバーごとに記述方法が異なるケースは少なくありません。コードレビューでルールに関して周知すれば、開発チーム内で記述方法を統一できます。
開発メンバーのスキルアップにつながる
熟練者を交えたコードレビューは、開発メンバーのスキルアップにつながります。コードレビューの指摘を通して知識が蓄積され、コーディングスキルは向上するでしょう。
若手エンジニアの成長には、「気付き」が欠かせません。的確な指摘をもらうことで、より良い記述方法があることに気付けます。コードレビューは、先輩エンジニアが若手エンジニアに成長のヒントを与えられる場でもあるといえます。
3.コードレビューにおける観点
レビューアのチェック品質は、コードレビューの成果を大きく左右します。コードレビューの成果を高めるうえでは、適切な観点でソースコードをチェックすることが重要です。ここでは、コードレビューにおける主な4つの観点を紹介します。
仕様や設計に合致しているか
大前提として、想定している仕様や設計に合致しているかのチェックが必要です。無駄のないソースコードであっても、仕様や設計通りでなければ顧客のニーズは満たせません。レビューアは開発文書を十分に確認して、仕様や設計に沿ったソースコードか確認しましょう。
異常系がケアされているか
仕様や設計に合わせることを優先することで異常系のケアはおろそかになりがちです。入力データが不正な場合など、想定しないケースでの例外処理などが適切に行われているか確認しましょう。一般的に、バグは異常系で発生しやすいといわれているため、観点として欠かせません。
チームのルールに準拠しているか
開発チームのコーディングルールに準拠しているかもチェックしましょう。ルール通りでないソースコードは、別の開発メンバーに誤解を与える恐れがあります。正しいコーディングルールを周知することで、開発メンバー間の認識を統一し、チーム開発におけるトラブルの抑制が可能です。
最適な書き方になっているか
ソースコードが最適な書き方になっているかのチェックも重要となります。冗長な処理を集約できないか、変数のスコープは適切かなど、具体的な観点はさまざまです。最適なソースコードに是正することで保守性が高まるだけでなく、将来的なバグ発生の抑制にもつながります。
4.コードレビューの注意点
コードレビューにはメリットが多い一方で、実施にあたっての注意すべき点もあります。主なデメリット・注意点は、次の3つです。
工数を浪費しやすい
コードレビューは工数を浪費しやすいデメリットもあります。
プログラミング言語にもよりますが、ソースコードの書き方は個性が出やすい部分です。そのため、レビューア間で意見が分かれやすく、ミーティング時間が長くなることもあります。また、レビューイが新人や若手だと、指摘事項が増えてしまうのは致し方ありません。
コードレビューの工数が増大すれば、開発スケジュールを圧迫することになります。事前に簡易チェックを依頼するなど、工数削減策を検討することが大切です。
レビューアの技量によって成果に差が出やすい
コードレビューの成果は、レビューアの技量で差が出やすい点にも注意が必要です。レビューアの選定が適切でないと、指摘されるべき問題が見逃されてしまう恐れもあります。
特に「最適な書き方になっているか」という観点は、レビューアの経験がものをいう部分です。バグを防ぐのはもちろん、ソースコードの品質を高めるためには、それなりの経験者が最低1人は必要でしょう。
雰囲気悪化につながる場合もある
コードレビューで議論が白熱すると、雰囲気が悪化する可能性もあります。「コードレビューは怖いもの」というイメージを持つ若手エンジニアも少なくありません。「人格攻撃は厳禁」「良い部分も伝える」など、発言ルールを工夫すると良いでしょう。
また、あまりにチェックが細かすぎると、レビューイは重箱の隅をつつかれるような気持ちになってしまいます。コーディングルールに明記されないレベルの微細な問題は軽いアドバイス程度にとどめるなど、指摘の粒度や基準も慎重に検討すべきでしょう。
5.コードレビューを効率化・自動化する代表的なツール
長時間になりやすいコードレビューの工数を削減するうえでは、ツールの活用が効果的です。ここでは、コードレビューを効率化・自動化する代表的な2つのツールを紹介します。
Web上でレビュー依頼できる「GitHub」
ソースコードをWeb上で管理・共有できる「GitHub」には、コードレビューに使える「プルリクエスト」機能もあります。
修正したソースコードのコミット時にプルリクエストを発行すれば、レビューアにレビュー依頼を出すことが可能です。フィードバックもWeb上で受けられるため、対面でのミーティングができないリモート開発にも役立つでしょう。
AIによりレビューを自動化できる「Amazon CodeGuru」
「Amazon CodeGuru」は、AI(人工知能)がソースコードをチェックし、バグや潜在リスクなどを検出してくれるツールです。
多くの経験データが蓄積されたAIをレビューアとすることで、コードレビューの一部を自動化できます。ただし仕様や設計との適合チェックなどは、手動によるコードレビューが必要でしょう。
また、プログラミング言語によっては非対応のため、事前に確認しましょう。
まとめ:効率的なコードレビューでソフトウェア品質の向上を
コードレビューとは、ソースコードを開発チーム内でチェックし、その品質を確かめる作業のことです。
バグの検出はもちろんソースコードの最適化や開発メンバーのスキルアップなど、コードレビューには多くのメリットがあります。
一方でコードレビューは工数が増大しやすいため、効率化・自動化するための工夫が必要です。
コードレビューは、高品質なソフトウェアを開発するために欠かせません。メリットや注意点を押さえて、効率的なコードレビューを実現しましょう。