コードレビュー,慣れるとできるけど,いきなりdiffを渡されて,どうぞ見てくださいと言われてもよくわからないと思う.
やりましょうというのはいいけど,ただむやみに読んでもうまくいかない.変更がある程度大きくなるとdiffだけ見てもよくわからないので,いろいろ見ることになる.
僕はいつも以下のようなことを無意識にやってて,うまくいってる気がしてる.GitHubのPull Requestの仕組みを使ってる前提で.
- Discussionをさらっと眺めてどういう問題を解決したいのか見る
- Commit Statusを見て,テスト通ってることを確認する
- Commitsタブで1コミットずつブラウザの新しいタブに開く
- 全部クリックし終わったら古い順に1コミットずつ読む
- 気になる点があったらエディタとかにメモしておく.あとで書き直されるかもしれないので,まだコメントしない
- 全コミット見終わったらFiles Changedで変更をまとめて見る
- diffに現れないあたりのコードが気になったら,View file押して完成したファイルを読む
- すでに似たコードとか使えるはずの便利関数がある気がしたら手元でgit grepとかする
- 挙動が気になったら実際に使ってみる.クリックして使ったり,Perlだったらテスト追加してみたりJSだったらステップ実行してみたりする
- ここが良いとか,変とか,質問とか,感想とか,かわいいとか,Diffに対してコメントを書く.感想くらいでも書くとそのコメントをもとに議論できる
- 必要なら適宜ミサワを貼るChrome拡張やtiqavを簡単に貼るChrome拡張を利用しておもしろ画像を貼りまくる
- Discussionに戻って,この設計は良いとか,理想的にはこういう形になるとうれしいとか,これに似てるとか,diffに現れない設計についてコメント書く
- マージしてよいと思ったら「よさそう :shipit: 」とか書く.GitHubで:shipit:すると齧歯類の絵が出る.キネシスのマクロで1キーで :shipit: 出るようにしてる
- :shipit:だけだと迫力が出ないのでLGTM.inからおもしろ画像を探してきて貼る
- 相談とか,疑問とか,まだマージしてはいけないと思ったら,ここはどうなんですかとかコメント書く
- forでpushしてたらmapとgrepでもいいですねとか,こんなのみんなよく使ってるとか,僕だったらこう書くとか,こう書くとかっこいいとかコメントする.コメントするだけで,その通りに直してもらうことはしない
- pull-req-labelっていうChrome拡張を使ってるのでレビュー完了状態にする
- IRCとかで「見た (URL)」とか書いて見ましたよってお知らせする
- IRCでコードについて話したり席まで行って話したりする
毎回こんなちまちまことやってるわけじゃなくて,1行CSS変えただけとかだったら2秒くらいdiff見て良さそうってコメントして終わる.
コミットを順番に見ていくと書いた人と同じ気持ちになれるので良い.いきなりdiff見ると,ここはこういうことですか?って気になるけど,コミットメッセージにだいたい書いてある.がんばって書いたけどうまくいかなくてrevertする様子なんかを見て楽しめる.
そもそも設計がまずいようなPull Requestが来ることはあまりなくて,先にどこを変えればよさそうとか,こういう仕組みを作ろうとか,この機能はどのクラスの責任かとか,よくコード書く前に相談してる.エンジニアとデザイナーは全員京都にいて,席も近いのですぐ会話できる.
1つのPull Requestで完璧にする必要はなくて,正しく動くならマージしていこうという雰囲気が出てる.コーディング規約守っていて,正しく動いていれば良い.コーディング規約も普通に書いてれば守れるようなのしか入れてない.微妙なところは続けてissueを作ってリファクタリングしたり,次に手をつけるときに書き直したりする.スケジュールとの兼ね合いもあるので,コードの見た目は悪いけど,時間はないのでまずはこれくらいで,みたいな話をすることもある.完璧に仕上げてる間にmasterが進んでマージできなくなると寂しいので,動くならまずマージしてしまって,そこから落ち着いてリファクタリングのissueを作ることが多い.とはいっても,読みにくいコードとかを書く人はそもそもいないので,そんなに変なコードをどんどんマージしていくということはしていない.いまは複雑な実装だけど,こういう抽象を導入すればより良くなるはずなので,やりましょう,みたいな.納品して完成みたいなものではなくて,毎日リリースしてるくらいで,ちょっとずつ変わっていくものなので,最近は良くなってきたとか,だんだん悪くなってきたとか,そういう捉えかたをするべきだと思う.庭とかいきなり完成させる人いなくて,ちょっとずつ手入れしていくと思う.
コードレビューを通してお互い勉強して高めあっていこうという雰囲気があって,たぶん本を紹介するのは良くて,コメント欄でがんばって説明するよりは,この本のこの章によるとこう書いてあるので読んでみてはって言うほうが早い.
せっかくなので,コードレビューの際によく紹介する本を紹介しておきます.
リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック (Theory in practice)
- 作者: Dustin Boswell,Trevor Foucher,須藤功平,角征典
- 出版社/メーカー: オライリージャパン
- 発売日: 2012/06/23
- メディア: 単行本(ソフトカバー)
- 購入: 68人 クリック: 1,802回
- この商品を含むブログ (140件) を見る
オブジェクト指向入門 第2版 原則・コンセプト (IT Architect’Archive クラシックモダン・コンピューティング)
- 作者: バートランド・メイヤー,酒匂寛
- 出版社/メーカー: 翔泳社
- 発売日: 2007/01/10
- メディア: 単行本(ソフトカバー)
- 購入: 11人 クリック: 307回
- この商品を含むブログ (132件) を見る
オブジェクト指向入門 第2版 方法論・実践 (IT Architects' Archiveクラシックモダン・コンピューティング)
- 作者: バートランド・メイヤー,酒匂寛
- 出版社/メーカー: 翔泳社
- 発売日: 2008/08/29
- メディア: 単行本(ソフトカバー)
- 購入: 5人 クリック: 97回
- この商品を含むブログ (53件) を見る
もっといろいろあるかと思ったけど振り返ると上の3冊でなんとかなってる気がする.知識が少ないから同じ本の話をずっとしてる.