logo
/
コードレビュー
2022-01-05
todo 整理

PRの作り方

diff の行数は少なくする

※ 「プルリクエストのレビューコストを下げるために diff を可能な限り小さくすること」というルールを厳格に守り続けると保守性が悪化する。正しい設計を保つこととと、変更箇所を減らすことがトレードオフになった場合は前者を選択する

Test と実装は片方だけ変えるほうが良い

※ 新しい実装の場合は当てはまらない 「テストを厚くする」と「テストに適合するようにリファクタリングする」を分けて行うと安心してmergeができる。

関心事(目的)を少なく(1つに)する

関心事 = レビュワーが気にすること 関心事が増えないならどんなに大きくなってもあまり問題ではない(全て同じ変更をしていると見れるので)
大きなPRを切り出す
大規模な実装をするとき(リファクタリングをするときなど)は、最初から1つの関心事に絞るのは難しい。
そういう場合は関心事がごった煮になった大きいPRをDraftで作って、その後適切な関心ごとの単位を見つけて切り出していけば良い
git checkout <branch> <file> などを使うと別 branch の状態の file を checkout (気持ちの上では copy) できて一部楽になります。
Pull Request を chain する
あるやりたいことのためにn個の直列な PR を作りたくなったら、k + 1番目の PR の base branch を k番目の branch にするようにしています。そうすると diff が小さく見えるのに加えて、k番目が merge されると自動的に base branch が default branch に切り替わるので何もしなくても勝手にいい感じになります。関心事を小さくすると Review 速度のほうが PR 作成速度より早くなるので、新しい PR を積むときに一番古いものの Draft を外していくだけで良いペースで消化されていきます。

機能の変更でフォーマットの変更はしない

機能の変更やバグ修正をしているときに、より良い書き方に全体を合わせたくなることは多々あるが、そういう場合はそれだけを扱った別のPRを作成する

レビュー依頼を出す前に

自分でセルフレビューする

  • 想定外の動作変更が無いか
    • 動作変わらないつもりで書き換えていても変わることはよくある
      • 変更したかったことだけじゃなくて、実際に変更したことから逆説的にも行う
    • なんだこの実装?みたいに考えて表面的な動作だけ見て安直に修正することもあるが、大抵はそうなっている理由がある
    • もちろんより良い実装に直せる場合もあるが、そうなった意図を考えて手を加えること
  • src => distのマージの前にローカルでdist => srcのマージと動作確認を行う
    • conflict発生してなくても、影響がある場合がある
    • 競合として認識されない = 上書きされるのでむしろ危険

ビルドできるかを確認する

全てのテストがパスするかを確認する

当たり前

PRに書き加える情報

理由を書く

「何を」書いたかもそうだが、「なぜ」どの方法でコードを書いたのかを説明する
プログラムのコメントと同じ

検証情報を書く

このコードはこういった検証をしてこのような結果が出たコードであるということを伝える

ファイル間の関連を書く

※ある程度の規模感以上の場合
どこがコアな変更でどこが付随の変更なのかがわかると見やすい

PRの立ち位置を書く

このPRで終わりなのか、後続でやることがあるのか
何か漏れがある場合に、ミスで抜けているのか敢えてやっていないかがわかる

レビューをうけるとき

操作

綺麗な履歴を残す

自分がそのブランチのオーナーならば、強制Pushをすることを躊躇しなくて良い
余計な修正が入った場合に打ち消しのコミットをするのではなく、前のコミットを修正して良い
その時はgitで不可逆な操作をする場合はブランチを新しくするを忘れない
※ squash-mergeをする場合はその限りではない むしろforce pushをしちゃうと、レビューの指摘に対して対応したのかを確認できない

参考