ヒコーキ好きのみこやんです。最近の私はドキュメント仕事が増えていまして、何かとNotionに規約やら規則やらを書き綴る時間が多くなりました。そんな中、私が関わっているプロジェクトに、まだ明確に定められていない規約類があったので、その作成に着手。最近チーム内展開を終えたところとあいなりました。今回は、コードレビュー規約を作る上で考えるべきことについて、かいつまんでお話してみたいと思います。※運用編も併せてご覧ください。コードレビューについて考察する「コードレビュー規約」をつくる意義コードレビューは、今ドキの開発チームであれば、どういうカタチであれ実施しているところが多いと思います。コードレビューについては、暗黙的もしくは惰性的に行っていることもあるかと思います。レビューア(レビューをする人)のスキルや経験などで、レビューの内容自体は変わってくるのですが、それ以前に「コードレビューとは何か」を明確に定めておかないと、ちょっとしたきっかけでチームが不協和音に包まれかねません。「そんなオーバーな」と思われるかもしれませんが、開発者も人ですし、文字通り十人十色です。組織によっては契約社員やSESなど、外部のエンジニアを招くことも往々にしてありますから、外人部隊みたいな状態と言っても過言ではないでしょう。そのように構成された開発チームにおいて、コードレビューを発端としたトラブルが生まれることは想像に難くなく、むしろ当然とも思えます。仲の良いメンバーだけで揃ったチームであったとしても、テキストベースでのやりとりがメインのコードレビューにおいて、ちょっとした表現やニュアンスから生まれる誤解や意図せぬ解釈もあるでしょう。した事態を回避...は難しいかもしれませんが、期待できる予防線として使用するための「コーディング規約」を、簡潔に整えておく必要があります。コードレビューで重要なこととは?コードレビュー規約を作成するにあたり、まずは「コードレビューとは何か?」を考えてみました。イマサラすぎるかもしれませんが、改めて考察し、整理しておきます。ここで「コードベース」とは、その開発チームが関与する1つのプロダクトの包括的なソースコードを指します。コードベースの品質を保ち、一貫性を維持する行為その結果、コードベース保守の容易性を確保する行為これは、コードレビュー規約を制定する目的そのものと言えそうです。次に、「コードレビューにおいて重要なことは何か?」を考えてみました。前節で書いたとおり、コードレビューを実施する中でチームの「不協和音」が生まれてしまわないように、本来の目的が遂行できるようにしなければならない、と言えると思います。ここで「レビューア」とはコードレビューをする人、「レビューイ」とはコードレビューを受ける人を指します。レビューア、レビューイの双方が、客観性と論理性を持ち続けることレビューア、レビューイの双方は、両者の結論が一致し合意できるまでコードレビューを継続すること客観性と論理性が不可欠なことは、改めて言うまでもないとは思われがちです。コードレビューのど真ん中に入っていくと、自分の指摘が受け入れられない、あるいは自分のコードが受け入れられない、といった感情が徐々に湧いてきてしまうことがあります。感情から押し出されたやりとりは、コードレビューであろうがなかろうが、決して良い結果を生まないことは、我々は経験的に知っているはずです。前節で書いた通り、さまざまなタイプの人で構成された開発チームのメンバー全員が、必ずしも冷静なままいられるとは限りません。したがって、分かっていてもあえて明記しておかなければならないものと言えるでしょう。次の一文は意外な印象を受けるかもしれません。これも「感情的なコードレビューをしてはならない」の中の肝の1つとも言えます。感情に流されたレビューア、もしくはレビューイは、相手の指摘に対して、さまざまな感情的理由によって合意を拒んだり、頭では分かっていたとしても納得できなかったりすることがあるでしょう。した場面では、指摘を無視してコードレビューを放棄したり、意図的に中断させて不必要にコードレビューを長引かせたりするようなタイプの人も現れます。これはもはや、怒りにも似た状態になってしまっているとも言え、不健全レベルMAXとも言えるでしょう。ふてくされるタイプの場合、自分の指摘を途中で撤回して、納得の有無に関わらず相手の指摘を丸ごと受け入れてレビューを完了させてしまう人もいます。した状況を生み出さないためのルールを制定する必要があります。コードレビュー規約の中身を考える読める分量の、簡単な文章で構成しよう以上のことを踏まえて、実に簡単な規約を制定してみました。1.目的コードレビューの実践は、以下を目的として行うものである。コードベースの品質を保ち、一貫性を維持する。その結果、コードベース保守の容易性を確保する。以下に、本規約にて使用する用語を定義する。コーディング規約に基づいて、コードに関する議論や評価を行うこと。