私が今日取り組んでいるプロジェクトのほとんどは、かなり厳格なコードレビューのポリシーを持っています。私の仕事では、ほとんどのコードに対してコードレビューが必要であり、夏の間に多くのインターンを迎えるため、私はたくさんのコードをレビューする責任があります。さらに、約 5 ヶ月前に私が開発しているプロジェクトは、公式なプレコミットレビューのポリシーを採用しました。そして、告白しなければならないことがあります:私は必須のコードレビューが嫌いです。
私は、プロジェクトで一緒に作業する開発者にとって、コードレビューが有用なツールであると今でも信じていると思います。レビュアーは、自分自身のために作業しているときに見逃してしまった悪いスタイルや非効率的、または醜いものを指摘します。レビュアーは、あなたが作ったコードがどのように機能するべきかという前提なしにコードにアプローチし、あなたが実際に書いたコードと意図のメンタルモデルを混同してしまったために犯したエラーを見つけることがよくあります。
さらに、コードレビューは、少なくとも 2 人があなたのインフラストラクチャの各部分に精通していることを確認するための素晴らしい方法です。異なる開発者が特定のコードやインフラストラクチャの所有権を持ち、それに触れたり維持したりするのは自分だけであるという自然な傾向がしばしばあります。しかし、彼らが休暇中にそれが壊れてしまうと、他の誰もがこのコードがどのように機能するはずだったのかを理解しようとすることになります。必須のコードレビューのポリシーは、その種の問題を軽減するための素晴らしい方法です。
しかし、理論的および観察されたコードレビューの利点はさておき、個人的には、開発者としてもレビュアーとしても、非常にイライラするプロセスだと感じています。
著者として#
開発者として、コードレビューが私の開発ワークフローに予測不可能に長い遅延を追加するのが嫌いです。機能を満足のいくまで完成させてテストし、コードレビューに送信した後、実際に完了としてマークできるまでに長い時間待たなければなりません。これは、次に何をするかを決めるとき、実質的に 3 つの選択肢があることを意味します:
- 忙しく待つ。コーヒーを飲んだり、reddit を読んだり、レビューリクエストが戻ってくるまでメールをチェックしたりします。
- コードレビューに送信したコードの上に開発を続ける。
- 完全に異なる何かに取り組む。
これらの 3 つの選択肢はどれも最悪です。(1) は、レビューがすぐに戻ってくると期待できる場合は便利ですが、reddit を読んだりメールをチェックしたりするようなアイドルなことをすることで、レビューの応答が戻ってきたときにコードを再度思い出す必要がないため、頭の中にコードを保持できます。しかし、明らかにそれは非効率的で、無駄な時間であり、最大でも 1 時間以内に返信を期待しない場合は受け入れられません。
(2) は、しばしば私がやりたいことです。私はしばしば、論理的に異なるが関連するいくつかの段階を持つプロジェクトに取り組んでいます。それぞれについてレビューリクエストを送信するのは理にかなっています。なぜなら、それらは別々にデプロイされ、レビューされることができるからです。
しかし、レビュアーが私が送信したコードに対して重要なコメントを返してきた場合、私はそのコードを更新する必要があるだけでなく、それ以降に行った作業をその結果の上にリベースする必要があります。これは、私が密接に関連する何かに取り組んでいる場合(例えば、私の作業が以前に構築した API を使用していて、レビュアーがそれらの API に何らかの変更を求める場合)には本当に面倒です。
選択肢 (3) は両方の問題を回避しますが、異なるプロジェクトを常に入れ替えていることを意味します。これにより、各プロジェクトでどこにいたのか、どの API を使用していたのかを常に再確認しなければならないため、私の作業が遅れます。どの開発者も、異なるプロジェクトを頻繁に切り替えるのが嫌だと言うことができます。
選択肢 (3) は、大規模なプロジェクトではより耐えられるかもしれませんが、開発 / レビューサイクルが数週間単位である場合です。しかし、それは私が取り組んでいるプロジェクトではありません。
レビュアーとして#
コードをレビューすることは、無限の時間があれば楽しめることの一つですが、時間がないときには厄介だと感じます。他の人のコードを読み、それをより良くする方法を見つけ、そこに到達するためのフィードバックを提供するのは楽しんでいます。
しかし、うまくやるためには多くの時間がかかり、最近はそのような時間がほとんどありません。さらに、開発者としてのコードレビューに関する上記の不満のため、誰かが私の返信を待っている可能性が高いことを常に意識しています。そのため、コードレビューリクエストに返信するのが常に急がれています。
したがって、コードレビューは楽しむべきものであると常に感じているにもかかわらず、実際にはそれが本当の仕事に戻る前にやらなければならないタスクのように感じるイライラする体験になりがちです。
これはもちろん、部分的には忙しすぎることの症状ですが、コードレビューは他の時間の無駄よりも私を悩ませるタスクにします。顧客が私がすべてを放り出して調査しなければならない重大なバグを報告した場合、私はイライラしますが、少なくとも実際の問題を修正する重要なことをしていると感じ、最終的には満足のいく顧客につながることを期待します。もし私が 1 日中コードレビューを読むだけで何もしなければ、満足感が得られず、生産性がないと感じることになります。コードレビューは根本的にオプションのように感じられます - それが有益であると信じているにもかかわらず、それは私たちが選んだことであり、プロジェクトやビジネスが運営を続けるために絶対にやらなければならないことではありません - それに多くの時間を費やすことがよりイライラします。
結論#
私はコードレビューを強力なツールとして信じています。しかし、実際には、それと一緒に作業するのがイライラすることがわかりました。あなたの意見を聞きたいです:コードレビューはあなたにとって機能しますか?私は何かの点で間違ったことをしていますか?私の態度を何らかの形で変えるだけの問題ですか?
効果的なコードレビューについては多くのことが書かれていることを知っています。特に魅力的だと感じたものへの指針をいただけるとありがたいです。