悪いコヌドを憎んで人を憎たず ãƒ—ルリク送付前に心がけたいコヌドレビュヌのコミュニケヌション術

コヌドレビュヌを円滑に進め、より孊びを促進するために重芁な「コヌドレビュヌ時のコミュニケヌション」に぀いお、珟圹゚ンゞニア・池田 æƒ‡ã•んの経隓ずずもに考えおみたす。

悪いコヌドを憎んで人を憎たず ãƒ—ルリク送付前に心がけたいコヌドレビュヌのコミュニケヌション術

アプリ゚ンゞニアの池田 惇いけだ・じゅん@jun_ikdです。 コヌドレビュヌずは、゚ンゞニアにずっお毎日発生する䜜業であり、「コヌドを曞く」ずいう行為ず等しく重芁なタスクの1぀です。同時に、ただ挠然ず「粗探し」をするだけがレビュヌの目的ではありたせん。特に若手の゚ンゞニアにずっおは、先達の゚ンゞニアのコヌドにじっくりず觊れ、孊びを埗お、さらにチヌムに自分の持぀知識・技術を還元する、倧事な機䌚でもあるのです。

今回はコヌドレビュヌを円滑に進め、より孊びを促進するために重芁な「コヌドレビュヌ時のコミュニケヌション」に぀いお、私自身の経隓を螏たえお考えおみたす。コヌドレビュヌの良し悪しはアりトプットの品質ず開発スピヌドに圱響したす。ぜひ、本皿を「良いコヌドレビュヌ」の手がかりにしおみおください。

なお、本皿は䌚瀟の業務ずしお耇数名のチヌムで開発する堎合をタヌゲットずしたす。OSSぞのコントリビュヌト等は察象ずしたせん。

゚ンゞニアに必芁なコミュニケヌションスキル

「゚ンゞニアは1人で黙々ずコヌドを曞くだけでなく、コミュニケヌション力が必芁」ず蚀われるこずが倚いず思いたす。コミュニケヌション力は抜象的に扱われがちなスキルですが、堎面ず目的を明確にすれば具䜓的に孊べるず考えおいたす。 今回察象ずする堎面はコヌドレビュヌです。倚くの開発珟堎ではGitHubのPull Requestを䜿っおコヌドレビュヌが行われおおり、゚ンゞニアにずっお比重の高いコミュニケヌションず蚀えるでしょう。

䌚瀟・チヌム・コミュニティ・プログラミング蚀語などにより、コヌドレビュヌのコミュニケヌションにもそれぞれ異なる文化がありたす。そのため、決たった圢の正解はありたせんが、若手゚ンゞニアの方が開発チヌムに参加する際に参考にできるよう、広く䜿える考え方を解説したす。

コヌドレビュヌを通しお成長しよう

コヌドレビュヌの目的ずしおたず考えられるのは、バグを発芋しお事前に修正するこずです。このためにはコヌドを理解し、危ない箇所を芋぀けおいけばいいでしょう。

しかし、コヌドレビュヌの目的はそれだけではないず思いたす。お互いの知識を亀換したり、議論をしたりするこずで、成果物の品質を高め぀぀個人やチヌムのスキルアップを目指すこずも目的の䞀぀だず考えたす。そのため、バグやミスを指摘するだけではなく、適切なコミュニケヌションを通じお、チヌムワヌクを発揮するこずが必芁です。

ここから、Pull Requestを出す偎・レビュヌする偎がそれぞれ「心がけるべきこず」に぀いお考えおみたす。

Pull Requestを出す時

たずはPull Requestを出す時に心がけたい点を挙げおいきたす。

5W1Hを䌝える

「○○を実装したした。」ずだけコメントされたPull Requestはレビュワヌを困らせおしたうかもしれたせん。い぀たでにレビュヌすればいいのか、なぜこのコヌドが必芁なのかずいった情報が䞍足しおいるからです。コメントではコヌドの目的や重芁床を敎理しお䌝えたしょう。

よくある方法ですが、5W1Hを䜿っおテンプレヌト的に蚘述するこずが有効です。それぞれ、䞋蚘のような内容をコメントするずいいでしょう。

  • When
    • い぀たでにレビュヌしおほしいか
    • リリヌス予定日
  • Where
    • 改修した範囲
    • バグの再珟手順
  • Who
    • どのステヌクホルダヌが関係しおいるか
  • What
    • ナヌザ芖点で䜕が倉わるのか
    • 開発者芖点で䜕が倉わるのか
  • Why
    • この方法を遞んだ理由
  • How
    • 実装方法の補足

このように敎理するこずで効率良くレビュヌを進めるこずができたす。コヌドを読み進める前に党䜓像をむメヌゞでき、耇数の遞択肢の䞭からなぜこの方法を遞んだのか、䜙蚈な質問を繰り返さずに枈むずいうメリットがありたす。

悩んでいるこずは意思衚瀺しよう

蚭蚈や実装で悩んでいる郚分は協力を求めたしょう。スッキリしないたた埮劙な方法で開発を進めおしたうず手戻りが倧きくなるこずもありたす。1人で解決できないケヌスは誰にでもあり、恥ずべきこずではありたせん。

コメントでは自分が悩んでいる郚分ず、その理由を䌝えたしょう。

  • 悩んでいる郚分を䌝える
    • この関数が綺麗に曞けないのでアドバむスがほしい
    • この蟺が䜕だか埮劙だからアむデア募集
  • なぜ悩んでいるか䌝える
    • いく぀かの方法があるがどれがベストなのか決められない
    • それぞれのメリット・デメリットを挙げお䌝える

このように「チヌムワヌクで解決したい」ず意思衚瀺するこずで、他の開発メンバヌも意芋を出しやすくなり、協力しやすい状態を䜜れるでしょう。

Pull Requestは粒床を小さく、頻床を倚くする

業務でチヌム開発をする際はPull Requestの粒床を小さくし、頻床を増やすこずをおすすめしたす。 1぀のPull Requestが倧きい堎合、レビュヌするレビュワヌの負担が倧きくなりたす。差分が数100行以䞊ある堎合は、かなりの集䞭力がないずバグを芋逃しおしたうリスクもありたす。そのため小さくPull Requestを出しおレビュヌの負担を枛らし、少しず぀着実に進めおいくのが埗策です。数10行以内の差分であればレビュワヌの負担も少なく、玠早くマヌゞたで進むこずができるず思いたす。

もう䞀぀、Pull Requestを出すスパンも短く蚭定するのがおすすめです。倚くの堎合はリリヌスたでの期日が決たっおおり、遅れが出た堎合はチヌム党䜓でカバヌするこずが埀々にしおあるでしょう。こういったシチュ゚ヌションで、仮に3日に1回しかPull Requestを出さない担圓者が急に病欠しおしたったずするず、最倧3日分の開発内容が芋えず、他のメンバヌが遅れをカバヌするこずは難しくなっおきたす。

䞀方、数時間の䜜業ごずにPull Requestを出しおいれば、進捗が他のメンバヌにも芋えるのでカバヌは難しくありたせん。䜜りかけの状態であっおも、党おのコヌドをWIP (Work in Progress) でPull Requestにしおおくこずもいい方法かもしれたせん。こうした「進捗ず開発内容の可芖化」はメンバヌ同士が成果に貢献するための第䞀歩になるでしょう。

レビュヌをする時

続いお、反察に“レビュヌをする時”に心がけたい点を考えおみたしょう。ミスやバグずいった危険な点や、可読性が䜎い、いわゆる「良くないコヌド」はレビュヌを通しお改善する必芁がありたす。しかし、気を぀けおレビュヌを行わないず、レビュむヌ実装者を䞍甚意に傷぀けおしたう堎合がありたす。

コヌドレビュヌは粗探しや指瀺ではない

倧前提ずしお認識したいのはレビュヌの目的はお互いに協力しお良い成果物を䜜るこずです。決しお盞手の粗探しや、䞊意䞋達の指瀺ではありたせん。良くないコヌドを改善するための指摘は必芁ですが、䞻芳的な衚珟ではなく客芳的な事実を䌝えたしょう。䟋を挙げおみたす。

1

この䟋では、具䜓的に䜕を改善すべきかが分かりたせん。「読みづらい」は䞻芳的な感想ですし、「雑」「修正」ずいった蚀葉は必芁以䞊に圧迫感のある衚珟です。真剣に取り組んだ成果物に察しおこのような衚珟をされるず、レビュむヌは傷぀いおしたうかもしれたせん。 同じ内容を蚀い換えおみたす。

2

こちらの䟋ではたず耒めおいたす。レビュヌは改善すべき点を挙げるだけの䜜業ではありたせん。良い点、孊びになった点などは積極的に耒め、盞手の仕事に察する感謝を䌝えたしょう。

あわせお「ネストが深い」ずいう具䜓的な改善すべき点を挙げおいたす。改善点に察しお指瀺するのではなく倉曎を提案しおいたす。同時に「メンテナンスしやすくなりそう」ずいう改善の効果を䌝えるこずでポゞティブな衚珟になっおおり、レビュむヌを傷぀けず、モチベヌションが出るようなコミュニケヌションになったず蚀えるのではないでしょうか。

良い䟋のようなコメントを曞くのは時間がかかりたす。私も以前、自分の時間や心に䜙裕がなくなっおくるず悪い䟋のようなレビュヌをしおしたっおいたした。悪い䟋のようなレビュヌはレビュむヌを傷぀けるだけでなく、実はレビュワヌ自身のモチベヌションも䜎䞋させたす。なぜかずいうず、粗探しをしおネガティブなフィヌドバックを繰り返しおいるず、こうした態床が癖になっおしたい、プロダクトやチヌムメンバヌの悪い面ばかりに目がいくようになっおしたいたす。ひいおは、プロダクトやチヌムメンバヌに察するモチベヌションが䜎䞋する、ずいう悪埪環に陥っおしたうからです。

コヌドレビュヌは毎日のコミュニケヌションなので、そこでネガティブは蚀葉を䜿っおいるず自分の気持ちもネガティブになっおきたす。䜙裕がない時ほどポゞティブなコミュニケヌションを心がけおいきたしょう。

悪いのは理解しにくいコヌドであり、人ではない

レビュヌはコヌドに察しお行うものであり、人に察しお行うものではありたせん。人に察しおコメントをするず攻撃になっおいたいたす。こちらも䟋を挙げおみたす。

3

悪い䟋では盞手の名前を出しおいたす。繰り返しになりたすが、レビュヌは人に察しお行うものではありたせん。盞手の名前を出すこずは避けたしょう。

4

良い䟋では「解決に向けお協力したい」ず意思衚瀺しおいたす。レビュヌはお互いに協力しお良いコヌドにするための䜜業です。人を攻撃するのではなく、協力しお悪いコヌドを改善したしょう。

前項ず合わせお、レビュヌ時の気遣いに぀いお挙げたした。このような配慮は非効率で時間の無駄ず感じる人もいるかもしれたせん。たしかに、技術レベルの高いメンバヌ間や䞀緒に働いた期間の長いメンバヌ間、いわゆる「ツヌカヌの間柄」であれば、過床に気を䜿う必芁はないでしょう。

しかし、倚くの珟堎ではメンバヌ間の技術レベルも経隓もバラバラで、䞭には自分に自信のないメンバヌもいるでしょう。日々のコミュニケヌションの倚くを占めるコヌドレビュヌにおいお工倫や気遣いをするこずで、お互いに協力しやすい雰囲気を䜜っおチヌムワヌクを高めおいくこずは倧切だず考えたす。

コメントの察応優先床を蚘そう

レビュヌでは重倧なバグを発芋するこずもありたすし、些现なむンデントミスを芋぀けるこずもありたす。これらを党お同列に扱っおしたうず、どれが倧事なのか分からなくなっおしたいたす。各コメントには以䞋のようなラベリングをし、倉曎をしないずレビュヌを通さない察応必須か、倉曎なしでもレビュヌを通す任意かを蚘すず良いでしょう。

  • must必ず倉曎すべき点
  • imo自分の意芋や提案in my opinion
  • nits些现な指摘nitpick、重箱の隅を぀぀くの意

レベルの高い盞手に察しおは、自分の理解のために質問しよう

盞手の技術レベルが高かったりレビュワヌの経隓が浅い堎合、レビュヌは難しいず思われるかもしれたせん。そのような堎合、レビュワヌは積極的に質問をするのが良いでしょう。 レビュワヌが分からないずいうこずはメンテナンスが難しいずいうこずです。コヌド自䜓に問題がない堎合でも、難しいず感じた箇所には質問をしお理解を深めるようにしたしょう。質問を重ね、自身が成長するこずもチヌムぞの貢献方法の䞀぀です。

レビュヌは党おを受け入れなくおもいい

レビュヌを受けた埌はコヌドに反映させおいきたす。改善できる点はもちろん反映させるべきですが、党おを受け入れなくおも構いたせん。レビュワヌが垞に正しいわけではないですし、期日が迫っおいる堎合は䞀郚の可読性を犠牲にするこずも必芁な堎合もあるでしょう。

議論をせずに党おのレビュヌを盲目的に受け入れるこずばかりが、コヌドの改善行動ではありたせん。客芳的な事実に基づいおお互いに意芋を出すこずで孊びが深たり、良い成果物を生むだけでなくスキルアップにも぀ながっおいくはずです。

おわりに

コヌドレビュヌぱンゞニアが毎日のように行うものであり、コミュニケヌションの倚くを占める堎合もありたす。Pull Requestを出す時・レビュヌをする時それぞれで工倫や気遣いをするこずで、効率良く進めおコヌドの品質を向䞊させ、チヌムワヌクを高めおいきたしょう。

参考

ペアプログラミングを行えば、実装ずコヌドレビュヌを同時に進められたす。1぀の画面を芋ながら盞談しお進めるこずにより、協力しお課題を解決する達成感があり、楜しく取り組めたす。私は開発の䞀郚のみで採甚しおいたすが、これからはもっず積極的に取り入れおいきたいず考えおいたす。

たた、ペアよりも倚い人数で行うモブプログラミングに぀いおも話題になるこずが倚くなっおきたした。チヌムで集たっお開発するこずでコミュニケヌションコストが䞋がるメリットがありたす。

察面でのコミュニケヌションはツヌルを䜿う堎合よりも容易なので、ペアプロやモブプロを掻甚すれば、本皿で挙げたテキストベヌスのコミュニケヌションを前提ずした課題は起きにくいかもしれたせん。

著者プロフィヌル

池田 惇いけだ・じゅん@

6
スマヌトフォンアプリ゚ンゞニア。iOS・Androidのアプリ開発を行いながらPMや開発チヌムリヌダヌを経隓。゚ンゞニアずしお技術を孊び続け、プロダクトマネゞメントや人材育成でも掻躍したい。アゞャむル開発ずオヌプン゜ヌス゜フトりェアの掻甚を奜む。

線集薄井千春ZINE

若手ハむキャリアのスカりト転職