チームでソフトウェアを開発するとき、ソースコードレビューをすることがあると思います。私もレビューをよくするのですが、やる度にレビューの観点が変わってしまっているような気がしていて、一度整理しようと思い立ちました。
この記事では、ソースコードレビューとはなにか、目的ややり方、観点のチェックリストについて書いています。レビューをするときの参考になればと思います。
この記事の対象は、ソフトウェア開発に携わるエンジニアの方です。私はWebアプリケーションのフロントエンドやバックエンドに関わることが多いので、それ以外の領域については視点が欠けているかもしれません。
ソースコードレビューとは、ソースコードの差分を見て、コメントなどの手段をとおしてソースコードの品質向上を促すことです。
役割としてはふたつあって、レビューを依頼するレビューイと、レビューするレビュアーがいます。レビュアーは複数人の場合もありますね。
ソフトウェアの品質を担保するために、レビュアーの許可がないと変更を適用できない、といったルールで運用されるところもあると思います。GitHubのプルリクエストや同様の機能をとおして行なったり、対面やオンラインで集まって行うこともあります。
この記事では、『プルリクエストをどう書くか』といった内容は書きません。これについては別の記事で書いていますので、あわせてご覧ください。
ソースコードレビューには、大きく分けて次の4つの目的があると思っています。
1と2はレビューの目的として、なんとなく想像がつくと思います。3の影響範囲については、その変更がソフトウェアの別のところ、ソフトウェア以外にもユーザやオペレーションなどに影響を及ぼさないか?などを確認します。とても重要な目的といえます。
また、ソースコードレビューは教育の効果も大きいです。レビューイはもちろん、レビュアーにとっても学ぶことがあったりします。
まず、ソースコードレビューのやり方について、次の7つの項目でまとめます。
ソースコードレビューのコメントは、レビューイがなにをすべきかが自明であるように書きます。レビュアーの考えを深読みしなくていいようにします。このやり方として、次の3つを使う方法があります。
項目 | 意味 |
---|---|
MUST | 対応すべきこと |
IMO | 自分の意見(In my opinion) |
nits | 細かい指摘 |
他にもSHOULDを使う例をよく見かけますが、対応すべきかどうかが曖昧なのでMUSTかIMOに寄せるべきだと私は考えています。
ソースコードレビューのコメントはコミュニケーションでもあるので、コミュニケーションが円滑になるよう絵文字などを交えて投稿した方がいいと思います。
2と同じ理由ですが、ソースコードレビューはコミュニケーションであるので、相手をほめることも意識した方がいいと思います。また、よいところをコメントすることはメンバーの学びにもつながります。
コメントが「こうすべき」だけだと、レビュイーは「なぜ?」と思ってしまいます。その根拠として、参考文献などをリンクで示すと親切ですね。
作業中のソースコードをWIPとして先にプルリクエストを出すやり方もあります。WIPのときは変更の前提となるところ、例えば『そもそもこの変更は必要なのか』や『設計や実装の大まかな方針に問題はないか』を見ます。
このとき、細かいスタイルについては指摘する必要はありません。実装完了後に、具体的な実装方法や書き方についてレビューしていきます。
たとえばビューの修正はマージ後でも低コストでできますが、データベースの変更は修正コストが大きくなります。データベースのように、変更しづらいところを特に意識してレビューした方がよいといえます。
コメント上だけでのコミュニケーションが難しい場合は、口頭でのコミュニケーションも併用した方がいいことがあります。ただこの場合でも、指摘内容はコメントしておいた方が、どういう議論をしたかが分かりますし、他のメンバーの学びにもつながります。
それでは次にソースコードレビューをどのような観点で行うか、チェックリストを示していきます。これはチームによって変わってくると思うので、参考程度にしつつ、チームごとのチェックリストをつくれればと思っています。
ソースコードレビューをよりよくするためには、まずレビューの観点をチームで共有しておくべきだと思っています。
レビューで、私もたまにあるのですが、コメントを受けてモヤモヤすることがあると思います。それはチームとしてのレビューの観点が決まっていないから、というのが理由のひとつにあると思っています。
レビューの観点を共有しておけば、レビュアーはその観点に基づいたコメントであるという担保ができますし、レビューイもコメントではなく観点自体についての建設的な議論を提案できます。チームで実践しているふりかえりなどのプラクティスで話せるとよさそうですね。
また、自動化できるところは自動化すべきといえます。たとえば細かいスタイルについての指摘は、する側も受ける側もあまりいい気持ちになれないと思います。
こういったところはフォーマッタやソースコードレビューサービスなどを利用して自動化するといいと思います。
ソースコードレビューは、ソフトウェアの品質向上のための重要な取り組みのひとつです。やり方や観点を抑えておくことで、効果的なレビューを行えるようになります。この記事がレビューをするときの参考になればうれしいです。
Webエンジニア&プロダクトマネージャ。 プログラミングで『ひとりで働く』を模索中。 三重の山の中で妻とこども、ネコとのんびり暮らしています。
Follow @zenizhWebエンジニア&プロダクトマネージャ。 プログラミングで『ひとりで働く』を模索中。 三重の山の中で妻とこども、ネコとのんびり暮らしています。
Follow @zenizh共著で『現場で使えるRuby on Rails 5(マイナビ出版)』を書きました。
Amazonでみる