最近コードレビューをしている

最近のお仕事#

 ネタがないので最近のお仕事の話。

 コードレビューをしているけれど、なんだかうまくできている気がしない。

 人の書いたコードを読む機会が最近はまぁまぁ増えていた。それは OSS を読んでいる時間が増えたとか、そういう話。それで業務でも軽い気持ちでやってみようと言ってみたんだけどこれがまぁ難しい。

 ありがたいことにガンガン PR は送られてくるので暇ということはないんだけど、自分が使ったことないフレームワークの設定を入れましたとか、自分が読んだことないソースコードをリファクタリングしましたとか、どう考えてもメンテしたくないクラスのメソッドの実装修正しましたとかいっぱいリクエストがくる。

 もちろん僕の一存で本番Goというわけではないので気楽にやればいいのだけど、真面目にやらないとレビューやりますと言った意味がないわけで。だからわからないならわからないなりに質問をしたり、わかるときは言葉遣いとかには気をつけつついろいろと指摘するわけです。それで結構気を使うので気がついたら1日が終わっていたりする。

 最近どんな仕事をしていても気がついたら1日が終わっている。ていうかこのブログを書いているのは夜の23時過ぎくらいから書き始めたんですが、普通に20時くらいまで働いているのは最近デフォルトなんですよね。僕はまだ朝遅いんですけど、他の人は朝九時から夜九時がデフォルトなんて人も居る模様。すごい。正直真似できない。適度にサボっていてほしい。

なぜコードレビューをするか#

 閑話休題。

 いつものように何か主張したいことがあるわけではないのだけど、実装者以外がコードを読むことって重要だと思っている。それは単にお客さんに見せる前に社内チェックしないわけにはいかないでしょとかいう工業製品みたいな話ではない1。実装レベルでその課題に対してどう対処するかを本気で考える人が複数人居る状態を作ることが理想だと思う。実際には作れないんだけど、少し近づくための手段としてコードレビューがあるんじゃないかと思っている。

 やっぱ特定の問題に対して一番考えるのはその問題を直す当事者で、それはどうしようもない。一方で、その問題を直した人が退職していなくなるとか、風邪で寝込んでるとか普通に起こるわけで。そういうときに「知らん」というのは無責任がすぎると思うわけです。我々も開発者という当事者なので。

 性格なのかもしれないけど、自分はやっぱり可能な限り正確に物事を把握・理解しておきたいと思っている。不具合が起きたとしたらその不具合の原因は「誰かが知っている」って丸投げにするんじゃなくて自分も当事者として把握している状態にしたい。全部は無理とはいえ、少なくとも自分のメインで関わっているプロダクトのコンポーネントとして存在しているものは把握しておきたい。というか、そうやって広範な領域を知るためにわざわざ転職したわけだし。

 あと良くも悪くも Python は危険な書き方が簡単にできる、というのもある。例えば辞書のリストをいろんなメソッドにぐるぐるたらい回しにするコードとかすごい簡単に書けるんだけど、メンテナンスする側からするとどこで地雷踏むかわかったもんじゃないコードになっていたりする2。既に存在する危険はしょうがないから、これ以上危険を作らないためにレビューで歯止めかけないと、とは思っている。

できないこともある#

 人間知っていることしか知らないので、限度がある。自分は React とかまだ全然わかっていない。なので JavaScript のレビューを頼まれると結構困る。フロント専門のレビュアーが欲しい。俺は今日初めて react-semantic-ui 使ったんだぞ。

 とはいえ、知らないことは知らないなりに、僕がマージの阻害になるほうが機会損失だからわからないという理由で reject だけは絶対にしないようにしている。明らかにおかしい場合なぜか言語が違ってもわかるので、 reject すべきコードだと断定できなかったら Approve をするというのは心がけている。

 ところで、GitHub のコードレビュー、一度やると https://github.com/pulls/review-requested から消えてしまう。マージするまで残っていてほしいんだが、ToDo リストだと考えると消えるのもわかる。果たしてレビューをどう管理しようか、というのも少し考え始めている。

 しかし忙しいなぁ。どうしてこんなことになったんだ。


  1. そもそもお客さんはコードの質なんかには興味はなくて、お客さんがほしいのはその機能だとか、安定性だとかによって得られる価値のほう。だからお客さんに見せるコードであってもコードレビューで指摘している範疇って実はエンドユーザーにとっては直接的には無関係だと思う。 ↩︎

  2. Effective Python の第3章とかを読みましょう。 ↩︎