今日のポエム: コードレビューについての一側面
近況
自分の歓迎会があったときに財布を無くしていたのですが、他の人のカバンから出てくるという超常現象が発生してしまった……。
概要
声で指摘されると比較的「まっとうだな」と思えることでも、文章にすると「こんなクソコード書くな無能」と読み取ってしまうという問題はあるので、メシを食ったりして「そういう人なんだな」というのを理解したり、あるいは専属の声優が「だめだぞ」と優しく読み上げるなどの対策が求められる。
— えせはら(似非原重雄) (@esehara) 2015, 7月 3
例えば、コードレビューで「なんでこんなコードを書いたんですか?」が、レビュアーにとっては「単純に意図を聞きたい」だけだったのに、レビューを受けている人には「責められている」と感じることはあるので、お互い信頼の問題もあるし、声優が優しく読み上げれば解決する問題でもある。
— えせはら(似非原重雄) (@esehara) 2015, 7月 3
本文
つい最近、コードレビューで厳し目のことばかり書かれるから辛い、という話が匿名はてなダイアリーに掲載されていて、それらについて、「コードレビューとはどうあるべきか」という話が議論されていた。そのことについて、僕なりに感じたことを書いておく。
僕に限って言うならば、コードレビューというのは、怯えがちな場面でもある。レビュアーにとって、例えば「このコードの意図とはなんですか」という、何気ない興味の一言だったとしても、「お前のコードは意味がわからないんだよ」というような、ネガティヴな言葉に受け取ってしまう。もちろん、レビュアーにとっては攻撃するつもりは無いかもしれない、というのはわかっていても、どうしても防衛的になるときはなってしまう。
どんなに言葉を尽くしたとして、コードレビューというのは、受ける側からすれば、自分のコードの欠点を指摘されることでもある。それは悪いことではないが、しかし自分のコードに責任感を持つエンジニアならば、そうであればあるほど、そのレビューを受けることによって「なんで、こんなことに気が付かなかったなんだろう」というダメージは少なからずあると思う。特に、レビューがなかなか通らないときほど、焦ってしまう。
コードレビューは、するほうも、されるほうも疲れるものだ。とある人は、レビューに一日の業務の半分を使って、自分のコードを書く暇がないということになって疲れている人がいた。されるほうからすれば、上のようなものなので、消耗していけば、いつしか「俺はプログラマに向いていないんじゃないんだろうか」とか、あるいは「皆の足を引っ張ってるんじゃないんだろうか」という考えに陥りがちだったりする。
コードレビューは、僕の理解では、コードの品質を貴方と私で担保しようとする行為だと思っている。もし、レビューを通過したコードでひどい障害が発生したとするなら、それは書いた人間の責任だけではなくなる。それは、とてもいいことである。責任は負担したほうがよい。そうでなければ、一緒にやる意味はないと思う。そういう風に、頭の中で思っていても、「こんなクソコードを書いた俺が悪い」という風におちこんだりするのだけど。
で、つらつらと感想を見てみたところ、レビューをするさいの言葉遣いについて色々な意見があった。僕は、どちらかといえば「誤解を恐れる」ので、冗長なことを書きがちである。ただ、これは僕自身の気質の問題でもある。
僕は何人かの人が乱暴な言葉遣いをすることを知っている。彼らは攻撃的な言葉を使うが、とはいえ、それに対して悪い印象を持ったことはない。それは、僕が彼らについて信頼しているからだ。つまり、「あいつはこういうことを言うタイプの人間で、それは人を攻撃するのではなく、そういう言葉遣いがベースになっているんだな」ということがわかれば、その言葉から受ける「攻撃的な言葉」を差っ引くことができる。そして、そういうのは、たいてい顔とか、口調とかを考慮に入れれば自ずとわかったりする。
上のことは、つまり信頼が問題であるということでもある。例えば、「真木悠介」という社会学者が、ヤマギシ会を取材したときに、障がい者同士が「お前はビッコだからなあ」と言い合ってたという話をしていた。ビッコは差別語ではあるが、そこに信頼があり、悪意がないということをお互いの関係として十分理解しているとするならば、その言葉遣いは、二人にとっては問題がなくなるだろう。むしろ、イライラしていたり、悪意をもって攻撃するときこそ敬語になるような人間だっている。
また、僕のブログにコードを載せたり、あるいは意見を書いたりすると、厳しいツッコミが来るし、そこには嘲笑もあるのだと思うけど、基本的には「間違いを指摘する」ということだったりするそれだけのことだったりするので、それほど気を追わずに、間違いは間違いとして認めるようにできればいいのだと思う(それが難しいのだけど)。
問題は、文章の場合、このような純粋な疑問であったり、あるいはちょっとしたジョークでも、そこの文脈が消えてしまって、その意図がわからなくなってしまうことにある。そして、それが攻撃的に感じてしまうという問題があって、過度に攻撃されているように感じてしまう。
上の観点からすると、コードレビューというのは、一種のチーム同士の信頼を表している、と考えることもできる。つまり、どれほど言葉を尽くしたとしても、丁寧にしたとしても、お互いに信頼が無ければ、それは攻撃に感じる。逆に、お互いに信頼があれば、多少攻撃的であったとしても、「そういう奴だし」ということになる。
なので、たぶん解決方法は3つある。一つは一緒にメシを食いに行ったり、お互いにコードを書く手を休んで雑談したりとかする。もうひとつは冗談だけど、イケメンか、かわいい声優の人に頼んでコードレビューを読んでもらえばよい。声にすれば、だいぶ印象は変わるはずだ。それは冗談にしろ、マージするときにねぎらいの言葉をかけてやるといいかもしれない。プルリクエストが通るまでは、上みたいに、やはり消耗するものである。だから、マージで通せそうだったら「おめでとう!」とか「おつかれさま!」の一言をかけるというのもいいと思う。LGMTの画像を貼り付けるというのは、そういう意図もあるのだろうと思う。
コードレビューについて、たぶんこうすればいいという銀の弾丸みたいなものはない。単純に、お互いが信頼を築きたいという、小目標みたいなものがあり、そしてお互いに「良いコードをちゃんと送り出したい」という協力関係を保つ、という全体的の問題がある。そして、チームの信頼につながってくるのだと思う。それらに何か問題があるとするならば、その問題の現れる場所の一つとして、コードレビューに現れるのだろうと思う。

Team Geek ―Googleのギークたちはいかにしてチームを作るのか
- 作者: Brian W. Fitzpatrick,Ben Collins-Sussman,角征典
- 出版社/メーカー: オライリージャパン
- 発売日: 2013/07/20
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (20件) を見る

- 作者: 真木悠介
- 出版社/メーカー: 筑摩書房
- 発売日: 2003/03
- メディア: 文庫
- 購入: 6人 クリック: 41回
- この商品を含むブログ (44件) を見る
おまけ
試しに「ちょっと厳しいレビュー」をしたあとに、フォロー画像を入れてみるというのを自分のコードでやってみたけど、「異常に厳しすぎる人」から、「単に性格の悪い人」に思えてくるので良いと思う(どのみちレビュアーは悪い) pic.twitter.com/7XBXLW64fO
— えせはら(似非原重雄) (@esehara) 2015, 7月 3
あと、対策としてはレビューしているときに結構長くなってギスギスしているときに、「殺伐としたコードレビューに○○が」というBotが定期的にチャチャを入れてくるのよさそう
https://t.co/jSAVPw9IFO pic.twitter.com/lD10dN76KI
— えせはら(似非原重雄) (@esehara) 2015, 7月 3