コードレビューすることについて語るときに僕の語ること

少し前の社内勉強会で、他の人がどうやってレビューしているのか知りたい、レビュー勉強会やってもいいかもという話になったので、自分なりのコードレビュー論を書いてみたいと思う。

あくまで個人的な観点なので、全員がこうすべきという話ではないです。そして他の人のレビュー論も待ってます!

コードレビューの目的

自分はコードレビューの目的はコード品質の担保とコミュニケーションだと思っている。プロダクションコードにマージする前にわざわざレビューするのだから前者は当たり前と思われるだろうが、後者は意外と意識してない人も多いのではないだろうか。

コード品質の担保

自分が所属しているチームではいわゆるGitHub Flowのような運用フローを採っており、作業者がトピックブランチを切ってプルリクエストを作成、GitHub上でレビュー後、問題なければapproveしてマージという流れになっている。

プルリクエストを作成する際のテンプレートもあり、以下のような内容になっている。

<!-- あくまでテンプレートなので必ずしもすべての項目を埋めなくてよい -->

## 概要
<!-- 変更の目的 -->

## 変更内容
<!-- ビューの変更がある場合はスクショを添付 -->

## レビュー期限
- 2019/MM/DD

## 外部 URL
<!-- 関連する Issue や URL -->

## 動作確認方法
<!-- 自分が確認した項目を記載 -->

最後の動作確認方法を記載するというのがなかなか良く、これがあることによって実装者の考慮漏れに気付きやすいし、逆にここを確認していれば大丈夫だろうという判断もしやすい。それ以外はよくあるテンプレートだと思う。

変更の粒度や実装者のスキルにもよるが、自分はレビュー時は可能な限り動作確認も行うようにしている。もちろんテストはあるのだが、テストが全ての不具合を網羅できているわけではないので、より万全を期すために手動での確認も行なっているといった感じである。そして今のところ、やったほうがいいという結論になりつつある。

コードレビューの際のポイント

自分がコードレビュー時に意識している点はざっくり以下である。個人的にはどれもごく当たり前という認識なのだがいかがだろうか?

・実装要件は満たされているか

・副作用で他のコードが壊れてないか

・テストが通っているか

・変数名やメソッド名は適切か

・必要以上にグローバルな処理になっていないか

・マジックナンバーを使ってないか

・車輪の再発明になっていないか

コミュニケーション

コードレビューは人間が行うので、必然的にそこにコミュニケーションが生まれる。そして、どうせコミュニケーションが発生するのであれば、良いコミュニケーションをしたほうがいいに決まっている。

コードレビューの目的の一つがコミュニケーションであると言うと少し語弊があるかもしれないが、良いチーム作りと言い換えれば伝わりやすいかもしれない。

コンテキスト

では一体良いコミュニケーションとは何かと考えたときに、一つキーになるのはそのコミュニケーションで用いられるコンテキスト(文脈)だと思う。

例えば、よく必要以上に攻撃的な言葉を使うのはやめよう、言い方問題などと揶揄される話があるが、これはコンテキストが共有されていない場所で過激な言葉を使っているケースが多い。

わかりやすく言うと、身内の飲み会で過激な言葉を使って盛り上がるのは良いが、道を歩いている人に向かっていきなりそういう言葉を浴びせてはいけないという話である。なぜなら、道を歩いている人は赤の他人なのでコンテキストが共有されておらず、その言葉を自分たちが捉えているようには受け取らない可能性が高いからだ。

コンテキストが共有されているかどうかは、多くの場合受け手側に依存するので、個人的にはあまり強い言葉は使わない方が良いと思っている。同様に、レビューの時も基本的には丁寧な言葉遣いを心がけるようにしている。

意識的にフォローする

初級者のコードをレビューする時はどうしても修正コメントが多くなってしまうが、そういう時は意識的に口頭でコミュニケーションを取るようにしている。テキストだけだとこちらの意図が正確に伝わりづらいケースがあるからだ。

たとえ多くの否定的なコメントをしたとしても、それはあくまでコードに対してのレビューであり、その人の努力を否定するものではないし、ましてやその人自身の人格を否定するものではない、ということはちゃんと伝えるようにしている。

褒める

自分は褒めるのが好きなので、修正コメントと同じくらい良いと思ったコードは褒めがちである。そういったコメントは必要ないと思う人もいるだろうが、自然に褒めあう空気があるチームはなんだかんだ強いと思う。

画像1

LGTMジェネレーター

LGTMジェネレーターを使うとLGTMコミュニケーションが捗るのでおすすめである。自分はLTTMというChromeエクステンションとLGTMoonという画像生成サイトをよく使わせてもらっている。下はLTTMの「エンジニアを褒めるネコ」より。

画像2

最後に

以上、簡単ではあるが自分がコードレビューする際に意識しているポイントをまとめてみた。いかがだっただろうか。少しでも誰かの参考になってくれたら嬉しい。それでは良いレビューライフを!

この記事が気に入ったらサポートをしてみませんか?