2014/8/11(月) 「SonicGarden Study #11いつまでクソコードを書き続けるの? 〜出来るプログラマだけが知っているコードレビュー7つの秘訣〜」に参加しました。

「SonicGarden Study」とは株式会社SonicGardenが開催する、WEB上のIT勉強会です。
勉強会はUstream上で行われました。

表題の通り、クソ天使コード*1をなくす取リ組みとして有効なコードレビューについて、実践で気を付けるべき7つのポイントについてお話がありました。

クソ天使コードとは?

勉強会ではクソ天使コードを"読む人を怒りの渦に叩き込むコード"と定義している。私の印象だと、デスマーチを誘発するもの、でもあるんじゃないかと思います。

優れたプログラマとは?

クソ天使コードを書かないプログラマは優れたプログラマと言える。
また、優れたプログラマであることを測るためには、コードの1行1行に対して、どういう処理か、どういう意図で書いたか、を確認することが有効。

コードレビューが改善の近道であること

クソ天使コードが"読む人に怒りをもたらすコード"とするなら、クソ天使コードかどうかは読む人がいないと分からない。

しかし、"優れていない"プログラマ同士がレビューをしても、指摘内容に限界があるため、成長が遅い。
そのため、"優れた"プログラマが考え方を伝えることで、"優れていない"プログラマの成長速度を高めることができる。

ただし、"優れた"プログラマでも闇雲にレビューをしていたら効果はない。そのため、ソニックガーデンが実践で築いた「7つの秘訣」を意識すると、良いレビューができるようになる。

コードレビュー「7つの秘訣」

大きく、「レビューをする側の秘訣」と「レビューを受ける側の秘訣」に分かれている。

【レビューをする側の秘訣】

1.レビューの観点を明確にすること

その時のレビューで何を指摘するかは明確にすること。観点を明確にすることで、観点から外れた指摘(その時点では重要ではない)を抑えることができます。また、観点があらかじめ明確であることで、指摘を受ける側が"理解する準備"ができているため、指摘内容を効果的に吸収できます。

2.我が身に返ることを恐れずに指摘すること

レビューする側がその時点でできていないことでも、本質的な部分については容赦なく指摘することが大事。レビューする側も今後気を付けるようになるため、双方の成長につながる。
ちなみに自分が感じたこととして、レビューする側のことを棚に上げたとしても、実現できないような無茶事は指摘すべきでない*2と思います。レビューを受けた側の行動に繋がらないような指摘は、良くないと思っています。

3.何故悪いコードなのかを論理的に説明すること

指摘内容について感覚的な指摘しかない場合、レビューを受けた側は修正しようがありません。レビューをする際は論理的な理由を添えて、レビューを受けた側が理解できるようにしましょう。

4.良いコードについて共通認識を持つこと

目指すべきコードはチームで認識を合わせ、全員で目指すことが重要*3。ただし、宗教戦争が起こりやすい部分は、無駄な議論が起こりやすいので、戦争を悪化させないように注意する必要がある。

5.小さい単位でレビューを繰り返すこと

1度で多くのレビューをすると、量が多く、十分に見きれない場合が多い。また、レビューする側も訓練が必要であり、レビューを多くこなすことで経験値を多く得られるようにする。

【レビューを受ける側の秘訣】

6.指摘は素直な気持ちで受け入れること

指摘内容をしっかり理解し、次回以降に反映することが重要。指摘内容について納得できない場合は、そのことを指摘者と十分に話し合うこと。納得できない内容を議論せずに無視することは、成長を自ら止めていることになる。

7.指摘は人格否定でないことを理解すること

レビューでの指摘はコードの指摘であるため、必要以上に落ち込んだりしないように意識する必要がある。もちろん、レビューする側も人格を否定する発言をしないように心掛ける必要がある。

終わりに

「7つの秘訣」の内容は、特に奇抜なものはなく、どちらかというとレビューの基本に近いものに感じました。しかし、(理想にも近い)基本をしっかりと追い続けられることが、ソニックガーデンさんの強みなのだとも感じました。

また、「7つの秘訣」にはありませんでしたが、個人的に付け加えたい項目として、「問題点を指摘するときは、共に改善案を与えること」があります。問題点を指摘するだけだと批判的になり、レビューを受けた側もどのように改善すればよいか分かりません。問題点と共に改善案を与えることで、レビューを受けた側の次のアクションが明確になります。自分はレビューをする時は、指摘に対してできる限り改善案を用意するようにしています。

しかし、Webで受ける勉強会は初めてだったのですが、思った以上に気楽に受講できて、楽しかったです。次回以降も受けたいと思いました。

*1:勉強会内で表現をマイルドにするために呼ばれていたが、後半の方は使われていなかった

*2:ソニックガーデンさんは"無茶なことも指摘せよ"とは言っていないです。

*3:ソニックガーデンさんでは、例えば"重複コードがないこと"など