Help us understand the problem. What is going on with this article?

コードレビューの極意。それは「自分のことは棚に上げる」こと!!

More than 1 year has passed since last update.

はじめに:コードを良くするためなら遠慮は不要

昨日Twitterに投稿した内容が思った以上に拡散されていたので、タイムラインに流れてしまわないようにQiitaにも書いておきます。

内容は上に書いてあるとおりです。

コードレビューはコードの問題点を指摘し、そのコードを良くすることが第一の目的です。
そのため、少しでもおかしいと思った部分は遠慮せずにどんどんツッコむ必要があります。

しかし、レビューする側が「これ、自分もあまりできてないんだよなあ」「お前もできてないじゃん!って言われたら返す言葉もないし・・・」などと思って遠慮してしまうと、コードを改善できるせっかくのチャンスが失われてしまいます。
「自分ができているかどうか」と「そのコードを改善すること」は、それぞれ別の問題です。

なので、レビューする人は自分のことを棚に上げてでも、コードの問題点を指摘する必要があります。
また、レビューされる方も「なんでお前ができていないことを俺に指摘してくるねん!」と怒ってはいけません。

そのために、「コードレビューするときは自分のことは棚に上げて構わない」という合意をチーム内でしっかりとっておきましょう。
「自分ができていなくても、遠慮なくコードの問題点を指摘してよい」という心理的安全性が担保されていれば、気軽にコードの問題点を指摘でき、コードをより良くすることができます。

具体例:(僕はできてないけど)READMEを更新しよう、と指摘する

参考までに、僕がコードレビューするときに自分のことを棚に上げた例を挙げておきます。

とある案件のコードレビューをしていたところ、外部サービス(Redmine)と連携すると思われる処理を見つけました。

外部サービスに依存する処理があると、その処理の存在になかなか気づかなかったり、外部サービスにアクセスするためにアカウント登録が必要になったりします。
そうすると、新しい開発メンバーが入ってきたときに「え、なんでこの処理で突然落ちるの?」とか、「僕はどうやってこのサービスの中身を確認したらいいの?」という問題が発生しがちです。
なので、そうならないようにREADMEに連携する外部サービスの存在や、アクセス方法等を明記しておくべきです。

ええ、明記しておくべきなのですが・・・、僕もついついREADMEの更新は後回しにしてしまって、そのまま更新を忘れていた、なんていうことがときどきあります。

「そういやREADMEの更新、僕もできてないや・・・」

と、一瞬思ったのですが、「いかんいかん、自分のことは棚に上げてちゃんと指摘しなくちゃ」と思い、ちゃんとコメントを入れておきました。

Screen Shot 2017-07-15 at 6.56.43.png

これで連携する外部サービスの説明がREADMEに追加されました。
めでたしめでたし。

(僕がREADMEの更新をし忘れる問題は、別の問題として存在し続けていますが・・・)

さらに:チームに入って間もない人に、少し偉い人が伝えると効果的?

「自分のことは棚に上げてコードレビューしろ」という話は、僕がソニックガーデンに入社して間もない頃に言われた言葉です。
当時、まだぺーぺーの初心者Rubyプログラマだった僕が、先輩プログラマの @maedana にコードレビューしてもらっているときに、

「こういうの、僕もできてないときがあるんですけどね。でも、コードレビューするときは自分のことは棚に上げちゃっていいんですよ」

と言われたのがすごく印象に残っています。

Screen Shot 2017-07-15 at 7.50.52.png
入社当時、「棚に上げちゃって!」とさわやかに語ってくれた @maedana

周りにいた他のメンバーも「そうそう、自分のことは棚に上げていいから」と口々に同意してくれたので、その瞬間僕は「そうか、自分ができていないことでもコードレビューでは指摘しても構わないんだ!」とすごく気持ちが楽になったことを覚えています。

こんなふうに、チームに参加したばかりですごく緊張している人にこそ、少し上の立場の人が「自分のことは棚に上げちゃっていいよ」と伝えると、新しく入ってきた人も「そうか、そうなんだ!」と気持ちが楽になるはずです。

もし、今の環境に十分慣れてない人がチーム内にいたら、「何も言わなくてもそれぐらい分かってるだろー」ではなく、「コードレビューするときは、自分のことは棚に上げていいからね」とはっきりと伝えてあげてください。

余談

ちなみに入社して5年もすると、入社当時は先輩だった @maedana にも「何度も同じ事言わせやがって」と偉そうなコードレビューができるようになります(笑)。

Screen Shot 2017-07-15 at 7.17.50.png

まとめ

というわけで、この記事では「自分のことは棚に上げる」というコードレビューの極意について書いてみました。

もちろんコードレビューでは他にも大事なポイントがたくさんあります。
「人格を攻撃してはいけない / 人格攻撃されたと勘違いしてはいけない」とか、「問題点を指摘するだけでなく、いいコードがあったら褒めてあげよう」とか。

そういった点もたしかに重要なのですが、僕の中では「自分のことは棚に上げる」というのが普段のコードレビューで一番よく意識することなので、この記事ではこの点にフォーカスして書いてみました。

ぜひみなさんも「自分のことは棚に上げる」を合い言葉にして、チーム内のコード品質をもっと向上させていきましょう!

あわせて読みたい

WEB+DB PRESS Vol.99の「良いコード」を本気でコードレビューしてみた - give IT a try

WEB+DB PRESSの特集記事をコードレビューしてみた記事です。
特に明記していませんが、この中にも自分のことを棚に上げて指摘した点が紛れているかも・・・!?

ソニックガーデンで行われているコードレビューの具体例をお見せします (SonicGardn Study #11 の補足として) #sg_study - give IT a try

僕がソニックガーデンに入社して間もない頃、メンバー全員からのコードレビューを受けて蜂の巣にされた様子をレポートしています(苦笑)。

jnchito
SIer、社内SEを経て、ソニックガーデンに合流したプログラマ。 「プロを目指す人のためのRuby入門」の著者。 http://gihyo.jp/book/2017/978-4-7741-9397-7 および「Everyday Rails - RSpecによるRailsテスト入門」の翻訳者。 https://leanpub.com/everydayrailsrspec-jp
https://blog.jnito.com/
sonicgarden
「お客様に無駄遣いをさせない受託開発」と「習慣を変えるソフトウェアのサービス」に取り組んでいるソフトウェア企業
http://www.sonicgarden.jp
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした