はじめに:コードを良くするためなら遠慮は不要
昨日Twitterに投稿した内容が思った以上に拡散されていたので、タイムラインに流れてしまわないようにQiitaにも書いておきます。
内容は上に書いてあるとおりです。
コードレビューはコードの問題点を指摘し、そのコードを良くすることが第一の目的です。
そのため、少しでもおかしいと思った部分は遠慮せずにどんどんツッコむ必要があります。
しかし、レビューする側が「これ、自分もあまりできてないんだよなあ」「お前もできてないじゃん!って言われたら返す言葉もないし・・・」などと思って遠慮してしまうと、コードを改善できるせっかくのチャンスが失われてしまいます。
「自分ができているかどうか」と「そのコードを改善すること」は、それぞれ別の問題です。
なので、レビューする人は自分のことを棚に上げてでも、コードの問題点を指摘する必要があります。
また、レビューされる方も「なんでお前ができていないことを俺に指摘してくるねん!」と怒ってはいけません。
そのために、「コードレビューするときは自分のことは棚に上げて構わない」という合意をチーム内でしっかりとっておきましょう。
「自分ができていなくても、遠慮なくコードの問題点を指摘してよい」という心理的安全性が担保されていれば、気軽にコードの問題点を指摘でき、コードをより良くすることができます。
具体例:(僕はできてないけど)READMEを更新しよう、と指摘する
参考までに、僕がコードレビューするときに自分のことを棚に上げた例を挙げておきます。
とある案件のコードレビューをしていたところ、外部サービス(Redmine)と連携すると思われる処理を見つけました。
外部サービスに依存する処理があると、その処理の存在になかなか気づかなかったり、外部サービスにアクセスするためにアカウント登録が必要になったりします。
そうすると、新しい開発メンバーが入ってきたときに「え、なんでこの処理で突然落ちるの?」とか、「僕はどうやってこのサービスの中身を確認したらいいの?」という問題が発生しがちです。
なので、そうならないようにREADMEに連携する外部サービスの存在や、アクセス方法等を明記しておくべきです。
ええ、明記しておくべきなのですが・・・、僕もついついREADMEの更新は後回しにしてしまって、そのまま更新を忘れていた、なんていうことがときどきあります。
「そういやREADMEの更新、僕もできてないや・・・」
と、一瞬思ったのですが、「いかんいかん、自分のことは棚に上げてちゃんと指摘しなくちゃ」と思い、ちゃんとコメントを入れておきました。
これで連携する外部サービスの説明がREADMEに追加されました。
めでたしめでたし。
(僕がREADMEの更新をし忘れる問題は、別の問題として存在し続けていますが・・・)
さらに:チームに入って間もない人に、少し偉い人が伝えると効果的?
「自分のことは棚に上げてコードレビューしろ」という話は、僕がソニックガーデンに入社して間もない頃に言われた言葉です。
当時、まだぺーぺーの初心者Rubyプログラマだった僕が、先輩プログラマの @maedana にコードレビューしてもらっているときに、
「こういうの、僕もできてないときがあるんですけどね。でも、コードレビューするときは自分のことは棚に上げちゃっていいんですよ」
と言われたのがすごく印象に残っています。
入社当時、「棚に上げちゃって!」とさわやかに語ってくれた @maedana
周りにいた他のメンバーも「そうそう、自分のことは棚に上げていいから」と口々に同意してくれたので、その瞬間僕は「そうか、自分ができていないことでもコードレビューでは指摘しても構わないんだ!」とすごく気持ちが楽になったことを覚えています。
こんなふうに、チームに参加したばかりですごく緊張している人にこそ、少し上の立場の人が「自分のことは棚に上げちゃっていいよ」と伝えると、新しく入ってきた人も「そうか、そうなんだ!」と気持ちが楽になるはずです。
もし、今の環境に十分慣れてない人がチーム内にいたら、「何も言わなくてもそれぐらい分かってるだろー」ではなく、「コードレビューするときは、自分のことは棚に上げていいからね」とはっきりと伝えてあげてください。
余談
ちなみに入社して5年もすると、入社当時は先輩だった @maedana にも「何度も同じ事言わせやがって」と偉そうなコードレビューができるようになります(笑)。
まとめ
というわけで、この記事では「自分のことは棚に上げる」というコードレビューの極意について書いてみました。
もちろんコードレビューでは他にも大事なポイントがたくさんあります。
「人格を攻撃してはいけない / 人格攻撃されたと勘違いしてはいけない」とか、「問題点を指摘するだけでなく、いいコードがあったら褒めてあげよう」とか。
そういった点もたしかに重要なのですが、僕の中では「自分のことは棚に上げる」というのが普段のコードレビューで一番よく意識することなので、この記事ではこの点にフォーカスして書いてみました。
ぜひみなさんも「自分のことは棚に上げる」を合い言葉にして、チーム内のコード品質をもっと向上させていきましょう!
あわせて読みたい
WEB+DB PRESS Vol.99の「良いコード」を本気でコードレビューしてみた - give IT a try
WEB+DB PRESSの特集記事をコードレビューしてみた記事です。
特に明記していませんが、この中にも自分のことを棚に上げて指摘した点が紛れているかも・・・!?
ソニックガーデンで行われているコードレビューの具体例をお見せします (SonicGardn Study #11 の補足として) #sg_study - give IT a try
僕がソニックガーデンに入社して間もない頃、メンバー全員からのコードレビューを受けて蜂の巣にされた様子をレポートしています(苦笑)。