コードレビューの目的と心構え
コードレビューを実践する中でバランス感覚が難しいと思い、自分なりにコードレビューの目的をまとめてみました。具体的なコードレビューのやり方を規定するものではなく1つの指針です。なので、アーキテクチャ/デザイン(DRY か? 単一責任か?)やスタイル(メソッド名や変数名は適切か?)のチェックリストではないです。
コードレビューの目的
個人的な意見ですがコードレビューの目的は、
「コードの共同所有 (Collective Code Ownership)」
だと考えています。
以下はあくまでもコードレビューを通して発生する副産物であり、コードレビューの目的ではないと思っています。
- ソフトウェア品質の向上
- コードのスタイルを整える
 - バグを見つける
 - 技術的負債となり得るコードがないかを確認する
 
 - スキルの向上やナレッジの共有
- 担当者の技術スキルの把握
 - 他人のコードを読んで学びや発見を得る
 
 
ソフトウェアは読みものではなくユーザーに使ってもらうものなので、「良いコード」を目的にリリースを妨げるような過剰なレビューは避けたいと思っています。現実的には「良いコード」と「コードの共同所有」は表裏一体かもしれないですが。
「コードの共同所有」の実践
- “サービス” をより良くするために自分の書いたコードをチームに共有しよう
 - 誰の書いたコードであっても、チーム全員が断りなく修正を行うことができる
 - 自ら見つけた課題は自ら解決し、Pull Request を送ること
 - 賞賛は個人に、非難はコードに
 - コードを書いた人と比べて技術や仕様に詳しくなくてもレビューに参加すること
 
コードレビューの心得
すべては “サービス” をより良くするための “意見” として受け入れよう!
コードレビューしてもらう人
- コメントをくれた人に感謝しよう 
 - 目的(なぜ、このコードが必要なのか?)をレビューする人へ完結に伝え、無駄な情報は捨てよう
- コードも説明も少なくて済む方が良い(長いコードと長い説明は読まれない)
 
 - 今直せるものは今直そう
- コードレビューを依頼する前に、あらためて自分でコードレビューしてみよう
 - レビューに対して「あとで修正しよう」と思ったなら、「今すぐに修正できる方法はないか?」をもう一度考えてみよう
 
 - 
コードに責任を持つのはあなたです!
- 自分より詳しい人にレビューして貰ったから大丈夫と思うのはやめよう
 
 - コードに責任が持てるならマージしよう 
 
無責任なコミットを抑止するため「コード」は共有しても「責任」は共有すべきではないと思います(共同所有の一部例外)。
コードレビューをする人
- 良いコードを書いてくれた人に感謝しよう 
 - コードの誤りを指摘することだけがあなたの仕事ではない
 - コードを書く人の邪魔をしてはいけない
- “コードを良くすること” と “ユーザー価値を増やすこと” のバランスを考えよう
 - コメントには [MUST] や [WANT] などの濃淡を付けましょう
 
 - 好き嫌いで修正させるのはやめよう
 - LGTM 
 でレビューが終わったことを伝えよう 
コードレビューに期待してはならないこと
- レビューする人が動作確認(テスト)してくれること
 - レビューする人がコードの誤り(バグ)を見つけてくれること
 - 自分より技術や仕様に詳しい人がレビューしてくれること
 
補足:もしも、コードレビューが不公平だと感じたら・・・
- 信頼とコミュニケーションは反比例する
- レビューが厳しい(コメントが多い)のは心配されているだけです
 
 - コードの複雑さとコミュニケーションは比例する
- 変更点の意図が理解できないコードは書き直すか、それ相応の説明が必要です
 - 規模が大きく、差分が多い場合は、それ相応の説明が必要です
 - 「コードのにおい」が漂ってくる時はたくさんのコメントがつくかもしれない