🔖

コードレビューの心がけ

2023/03/12に公開

個人的な方針ですが、チームに共有するための資料を作りました。

今よりも少し良いコードを求める

完璧なコードは存在しません。コードを書いた人、レビューする人の価値観によって完璧は違います。もし全ての人の価値観が同じだったとしても、何が完璧かを追求するのは困難です。なぜなら、どのようなコードにも、パフォーマンス、拡張性、可読性などのトレードオフがあります。納期、組織の構成、メンバーの熟練度といった様々な要因に左右されます。仮に現時点の完璧が見つかったとしても、将来は陳腐化しているかもしれません。

コードの良し悪しを議論するときは、最善が何かということを固執せず「今あるコードが、改善するかどうか」を考えましょう。60点のコードを70点にする方法を議論しましょう。私たちには100点を探し求める時間はありません。

コードと人を分けよう

あなたが書いたコードは、あなた自身ではありません。プログラムを書くことは創造的な活動です。生み出したコードを、我が子のように大切に思っている人もいるでしょう。それでも、過保護にならないでください。自分の書いたコードが批判を受けた時、一呼吸置いてから、より良い選択肢はどれなのか考えてください。自分の書いたコードが意図しない修正を受けた時、台無しにされたと嘆く前に、より良い設計について考えてください。

人の書いたコードを議論するときは、書いた人と切り離して考えるようにしてください。書いた人が誰であっても、同じようにコードは批判し、改修しましょう。誰かの思いや好みを汲み取ろうとする必要はありませんが、リスペクトを持つようにしてください。感情的に断定したり、根拠のない批判をしないでください。

事実と技術的用語を使おう

良いコードとは何かというメンタルモデルを持つようにしましょう。 たとえば、同じことを実現できるなら、わかりやすいコードは良いコードです。 「わかりやすい」というのは主観的な言葉ですが、事実や技術的用語を用いて、より客観的に説明することもできます。

  • (感想) このメソッドは A と比べて B の方がわかりやすい
  • (事実) このメソッドは A と比べて B の方が一時変数を省略でき、行数が少ない
  • (用語) このクラスは設計 A と比べて B の方が単一責任の原則を満たしている

必ずしも技術的用語を暗記して使う必要はありません。 しかし、適切な用語はコニュニケーションを簡潔にします。

  • (用語がない) メソッド A が2回以上呼び出されています。初めて呼び出された時にインスタンス変数に入れておき、2回目以移行は計算を省略するのはどうですか?
  • (用語がある) メソッド A をメモ化してみるのはどうですか?

参考

Discussion