『みんなではじめるデザイン批評』から学んだコードレビューのやりかた

同僚が社内グループに『みんなではじめるデザイン批評』を読んだ感想を書いていて、それが良かったのとそういえばこんなことあったなと思い出したので読んだ感想がてら書きます。

みんなではじめるデザイン批評―目的達成のためのコラボレーション&コミュニケーション改善ガイド

みんなではじめるデザイン批評―目的達成のためのコラボレーション&コミュニケーション改善ガイド

命ずるな、尋ねよ

『みんなではじめるデザイン批評』を読んでからデザイナーとの会話だけではなくエンジニア同士でコードレビューをする時にも「まず、意図を尋ねる」ことに気をつけるようになった。

「自分だったらこうするのにな (だから、こうすべき)」と思ってもそのまま脳直で出すのではなく、なにか事情があるのかもしれないと思い「こうなっているのはなぜですか?」と聞く。 そうすると「時間がないけど急いでいるので、今は妥協したい」「イケていると思っていないけれど他に思いつかなかった」などの返事がもらえるので「時間がないのは仕方がないので落ち着いて考えなおすというissueを入れましょう」とか「こういうやり方だとしっくり来ませんか?」という返事へ進める。

この質問形式のコードレビューなら、チームに入り立てだったり経験の浅いエンジニア (以下、一般的な語法に則り「ジュニアエンジニア」とする) でも真似しやすいのではないか、と思っている。

コードレビューは構造上どうしてもレビュアーに対して権威付けが起きやすいが、質問形式でレビュアーが常に下手に出るよう振る舞う儀式的な関係を強いるとバランスが是正されるのではないかと思う。 加えて、この「レビュアーは常にまず自分の未知を想像して尋ねる」という姿勢をいつでも誰にでも強いて、レビュアーとレビュイーというロールで振る舞う時には対等であると意識付けることが肝。

コードレビューのやり方として「ここはこうだからこうすべきです」という言い方にしましょうというルールだと、そこまで断定できるドメイン知識や経験のない人はすぐに実践できず、かくあるべきレビュアーとしての振る舞いと現在の自分のあいだに断絶が生まれてしまう。 コードレビューでレビュアーを務めることはドメイン知識やエンジニア一般としての経験を積むチャンスなのに、レビュアーを務めるにはドメイン知識や経験が必要、というデッドロックが起きてしまって、これはまずい。

模倣

しかし「尋ねるレビュー」は誰でも真似できるのが一番の利点だと思う。そのシステムに詳しいエンジニアも、そうでない人も、変更に対して「どういった理由があってこういった変更になったのですか?」と尋ねる。 レビュイーはその疑問に明快に答える。言い淀むところがあればそれはより良くするチャンスかもしれない。それはエキスパートであってもそうでなくとも、そうする。

世の中いろいろな仕事があるがコードレビューは誰でもできたほうが良いし、そうできる可能性の高い仕事のひとつだと思う *1。 それは対象のソフトウェアの知識を効率良く培う方法であるからでもあるし、チームによるソフトウェア開発を効率的に進めるためだからでもある。

こういった仕事は担当できる人を効率的に増やすために模倣しやすく設計するのが大切だと常々感じる。 また、とても専門性の高い仕事もある一方、大抵の仕事はまず模倣するところから始まるはずで、裏を返せばそっくり真似のできないやり方はもっと改善の余地が潜んでいそう、とも言えそう。


また、普段のレビューをこういう形式にしておくと、絶対にやってはいけないこと (例: XSSCSRFなど脆弱性を作り込む) に対するフィードバックとして「〜してはいけないです」という表現が活きてくる。つまり何らかの指標に基づいて明らかにやってはいけないと誰でも断定できるときは断定してよい、という「例外」を設けられる。

さらに考えを深めると、普段コードレビューで指摘することの大半は、その是非がほとんど決定的じゃないということも考えられる。 つまりN+1クエリはバッドパターンだけれど、いついかなる時も致命的かというとそうではない、とか。アクセス数がほとんどないとか、Nが高々10くらいなら、大したことにはならない、みたいなそういう話。

もちろん今まで書いたことだけやっていれば万事良しかといえばそうではなくて、細かな言い回しに気を付けるといったことは依然として必要だろうと思う。 今回はコードレビューにおけるプロセスのうちいくつかを形式的にしようという話でしかないから、そういったウェットな話題は残っている。が今回は言及しなかった。

タイトルに反して「制作物に対しより効果的でヘルシーなフィードバックをしたい」と思う人にとって『みんなではじめるデザイン批評』は示唆と発見に富んでいることと思います。おすすめです。

みんなではじめるデザイン批評―目的達成のためのコラボレーション&コミュニケーション改善ガイド

みんなではじめるデザイン批評―目的達成のためのコラボレーション&コミュニケーション改善ガイド

*1: もちろん卓越したコードレビューのスキルとそれを持つ人がいることも知っている