📖
自分のレビュー手順、および心がけてること
初めに、自分がレビューの手順、次に、レビューする際に心がけてることを共有したいと思います。
GitHubとJetBrainsのIDE(PhpStorm)の利用を前提としています。
レビューの手順
レビュー前の準備
- 開発用とは別で、レビュー用で
git clone
でローカルにダウンロードしておく- 後述の「実装にわからない点があったら、自分でコメント追加したり、軽く書き直してみたりみる」の際に、別ウィンドウで、このレポジトリのdevelopブランチでエディタ開いておくと、差分確認が楽になるので
レビュー
初回レビュー
- レビュー依頼の通知がSlackから来る
- GitHub上で、対象のPRのdescriptionを確認
- descriptionに、イシューチケットのリンクを貼ることになってるので、そこで仕様や要件を確認する
- descriptionに、関連PRのリンクを貼ることになってるので、それを確認して、依存元になってそうなPRからレビューを行う
- 例) 新機能の開発の場合、データ構造が根幹になるはずので、まずはmigrationファイルからレビューを行う
- レビュー対象のPRをローカルにチェックアウトする
- PhpStormのプルリクエストツールウィンドウから、変更対象ファイルを開いて確認していく
- 下記のスクショのように、左側のサイドバーが開くので、ここからファイルを開く
(https://pleiades.io/help/idea/work-with-github-pull-requests.html#provide-feedback から引用) - その際、変更された行の左がピンクで表示されてるので参考にする
(https://pleiades.io/help/idea/work-with-github-pull-requests.html#provide-feedback から引用) - 変更箇所から呼ばれてるメソッド、及び変更箇所を含むメソッドやクラスの参照元にコードジャンプとかしてみる
- コードから挙動がイメージできなければ、実際に動かしてみる
- 実装にわからない点があったら、自分でコメント追加したり、軽く書き直してみたりみる
- 基本、書き捨て前提
- ただ「今の実装だと、イシューの要件満たせない」みたいな場合なら、別ブランチ切り出して、レビューで「こんな感じの実装もありかと思ったんですが、どうでしょう?」的なことはやる。
- その時は「別に捨てて貰って良い」というスタンスを、あわせてコメントで書いておく
- この過程で、仕様に関する疑問点等が浮かぶこともあるので、その際はイシューチケットで確認したりもする
- 下記のスクショのように、左側のサイドバーが開くので、ここからファイルを開く
- PhpStormのプルリクエストツールウィンドウから、変更差分を別Windowで開いて、もう一度確認していく
- (わかりにくいけど)下記のスクショように、GitHubのプルリクエストのFiles changedと似たような画面が開く
(https://pleiades.io/help/idea/work-with-github-pull-requests.html#provide-feedback から引用) - おおよそは「4. PhpStormのプルリクエストツールウィンドウから、変更対象ファイルを開いて確認していく」で見れているはずなので、ここでは「変更前のコードと見比べて、なにか新しい気づきはあるかな?」くらいの温度感で、さらっと見るイメージ
- (わかりにくいけど)下記のスクショように、GitHubのプルリクエストのFiles changedと似たような画面が開く
2回目以降レビュー
(タノムでは、初回のレビューでコメントを貰って、その修正が終わったら、再度レビュー依頼を投げる運用になっています)
- レビュー依頼の通知がSlackから来る
- レビュー対象のPRをローカルにチェックアウトする
- GitHub上で、Files changedから、前回レビューとの差分コミットを抽出できるので、それを見ながらレビューを行う
- Files changedの下の「Changes from all commits」から「show changes since last review」から、前回とのレビュー差分だけを抽出できるので、だいたいそれを使う
- ただ、rebaseやmergeが行われると、前回レビューとの差分以外の変更が表示されることがある
- その場合、ローカルでレビュー対象のブランチから別ブランチを切って、前回レビュー時点のコミットまで
git reset
して、まとめて1コミットにして、そのコミットを指定してdevelopブランチにgit rebase --onto
的なことを、稀にする。- ただ、これはrebaseミスが発生しうるので、これをやる際は、怪しいファイルは初回レビューでの4番の方式で見ていく。そして結果、全てがめんどくさくなって、差分レビューを諦めて、すべて初回レビュー4番の方式で見ていく、ということもままある。
- その場合、ローカルでレビュー対象のブランチから別ブランチを切って、前回レビュー時点のコミットまで
- ただ、rebaseやmergeが行われると、前回レビューとの差分以外の変更が表示されることがある
- 初回レビューと同じで、コードから挙動がイメージできなければ、ローカルで動作を見たり書いたりする
- Files changedの下の「Changes from all commits」から「show changes since last review」から、前回とのレビュー差分だけを抽出できるので、だいたいそれを使う
レビューする際に心がけてること
- 「思ったこと」と「レビューコメントに書くこと」は分けて考える
- (「しきい値が難しいという」結論に落ち着く話だと思いつつも)基本的には「違和感あるなー」位のレベルだったら指摘しない
- 手元で書いたり動かすのは、あくまで、コードの理解を第一として、あら捜しのためでない
- 自分で書いた結果、コードが理解できたらそれで良し。その場合、自分で書いたコードは捨てる意識。
- ただNITS的に「今のアプリの他の実装でよく見るのはこんな感じです。修正要望でなくて参考情報として。」みたいなことは書くことはある。これも捨てられる前提。
- とはいえ、不明点とか不具合があった場合、それを具体例に使って「XXXという場合、YYYとなるのが気になりました。その場合、ちゃんと試してないんですが、下記コードならそうはならない気がして、ちょっと見てほしいです(貼ったコードは捨てていいです)」みたいなコメントは書く
- 自分で書いた結果、コードが理解できたらそれで良し。その場合、自分で書いたコードは捨てる意識。
- 手元で書いたり動かすのは、あくまで、コードの理解を第一として、あら捜しのためでない
- (「しきい値が難しいという」結論に落ち着く話だと思いつつも)基本的には「違和感あるなー」位のレベルだったら指摘しない
- NITS的なレビューコメントを書く際には「(どうでもいい寄りの話ですが)」「(どっちでもいい話ですが)」的な、自分の温度感をレビューコメントの先頭に書く
- 以前に
[NITS]
みたいな、よくあるやつを書いてみたこともあったけど、「その英単語が何を示してるか」が覚えられなかったので、括弧書きで、素直に自分の温度感を書くようにした
- 以前に
- レビュー中の動作確認は「コード読んでて気になったところをローカルにあるデータの1パターンだけ動かしてみる」みたいな軽いやつ。「一通りを動かしてみる」まではいかないレベル。
- 「ここコメントあったら嬉しいかも」を思ったら、積極的に伝える
- 自分のスタンスとして、内容が明らかに間違ってる、とかでないなら、コメントの質とか気にせず、いくらあっても良いと思ってるので
- 実装される機能の内容や、実装者によって、レビューの濃淡を変えるけど、勘所は押さえるようにする
- 例えば「エラーメッセージの文言修正」はGitHub上でレビューを終わらせるし、「実装者がチームにジョインして最初のプルリクエスト」ならしっかりレビューする、みたいな濃淡をつける。
- 「ある程度抜いてレビューする」際は、「ここで万が一があったらサービス止まる」「migrationで間違いがあったら後追いの修正が難しい」みたいな勘所を意識してレビューするようしてる。
- 例えば「エラーメッセージの文言修正」はGitHub上でレビューを終わらせるし、「実装者がチームにジョインして最初のプルリクエスト」ならしっかりレビューする、みたいな濃淡をつける。
今後のレビューでより良くしたいこと
- ポジティブフィードバック
これを書くにあたって、レビュープロセスに関して簡単に調べたのですが、その中で、自分はポジティブフィードバックが弱いと思ったで、意識的に動きたいと思います。
Discussion