君たちはどうコードをレビューする (される) か / 大吉祥寺.pm
by
utagawa kiki
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
君たちはどうコードを レビューする (される) か id:utgwkk / @utgwkk (うたがわきき) 2024/07/13 大吉祥寺.pm #kichijojipm 1
Slide 2
Slide 2 text
自己紹介 ● うたがわきき (@utgwkk) ● 株式会社はてな ○ Webアプリケーションエンジニア ○ 京都から来ました 2
Slide 3
Slide 3 text
前提と免責 ● Webアプリケーションの開発経験から得られ たコードレビューの話をします ○ できるだけ一般的な話になるよう心がけるが ○ あらゆる業種・分野に適用できるかは分からない 3
Slide 4
Slide 4 text
前提と免責 ● 何が正解なのかは「場合による」 ○ こういうことを考えながらコードをレビューしてい る、というスナップショットをお伝えする ○ 議論しましょう ■ 最強のコードレビュー事例があれば自分も知りたい 4
Slide 5
Slide 5 text
前提と免責 ● 20分なのでサクサクいきます 5
Slide 6
Slide 6 text
アジェンダ ● なぜコードをレビューするのか ● どのようにコードをレビューするのか ● まとめ 6
Slide 7
Slide 7 text
アジェンダ ● なぜコードをレビューするのか ● どのようにコードをレビューするのか ● まとめ 7
Slide 8
Slide 8 text
なぜコードをレビューするのか ● その前にいくつか文献をあたってみましょう 8
Slide 9
Slide 9 text
コードレビューとは (1) ● コードレビュー開発者ガイド | google-eng-practices-ja から抜粋 ○ >コードレビューとは、コードの作成者以外の人が コードを調べるプロセスです。 ○ >Google ではコードとプロダクトの品質を維持する ためにコードレビューを実施しています。 9
Slide 10
Slide 10 text
コードレビューとは (2) ● Design It! から抜粋 ○ >コードレビューは、すべてのチームが必ず行うべき 素晴らしいプラクティスだ。 ○ >すべてのレビューは潜在的なコーチングの機会を提 示する。メンタルモデルのずれに着目し、実際の問題 が発生する前にそれらを修正できる。 10
Slide 11
Slide 11 text
コードレビューとは (3) ● コード・レビューとそれによる時間の節約方 法 | Atlassian より抜粋 ○ >結論:アーキテクチャーに関する決定は適切である べきで、「クリティカル パス」な開発者になりたくな い、と考えているならば、きっとコードレビューを気 に入るはず! 11
Slide 12
Slide 12 text
なぜコードをレビューするのか ● ものすごくざっくりまとめると ○ コードの品質を保つため ○ 知見を共有するため 12
Slide 13
Slide 13 text
コードの品質を保つ ● プロダクトの健全な開発のため ● 品質の低いコードはリスク要因になる ○ 認知負荷が高い ○ 不具合を生む可能性が高い ○ 開発速度が低下する 13
Slide 14
Slide 14 text
知見を共有する ● コードを通じたコミュニケーション ● 知識を底上げする ○ チーム全員のプロダクトへの理解を深める 14
Slide 15
Slide 15 text
なぜコードをレビューするのか (再掲) ● ものすごくざっくりまとめると ○ コードの品質を保つため ○ 知見を共有するため 15
Slide 16
Slide 16 text
アジェンダ ● なぜコードをレビューするのか ● どのようにコードをレビューするのか ● まとめ 16
Slide 17
Slide 17 text
どのようにコードをレビューするのか ● 自動化できることは自動化する ● 認識を揃える ● 思考停止しない ● 物怖じしない ● 全てをやり切ろうとしない 17
Slide 18
Slide 18 text
どのようにコードをレビューするのか ● 自動化できることは自動化する ● 認識を揃える ● 思考停止しない ● 物怖じしない ● 全てをやり切ろうとしない 18
Slide 19
Slide 19 text
自動化できることは自動化する ● 人間が介在する限り、ミスはつきもの ● 自動化されたプロセスは人間が介在する余地 を減らせる ○ 典型的な作業の負担を減らせる ○ ミスを減らせる 19
Slide 20
Slide 20 text
どのようにコードをレビューするのか ● 自動化できることは自動化する ● 認識を揃える ● 思考停止しない ● 物怖じしない ● 全てをやり切ろうとしない 20
Slide 21
Slide 21 text
認識を揃える ● ここで経験を振り返ってみましょう 21
Slide 22
Slide 22 text
こんな経験ありませんか ● 全部実装し終わってからレビュー依頼したら ○ めちゃくちゃレビューコメントが付いた ■ マージしてリリースするまでにNヶ月 ● 一生懸命実装したPRだったけど ○ イチから書き直すことに ■ ウッ 22
Slide 23
Slide 23 text
なぜ、こんなことに ● 最初から完璧な実装をできるといいが ○ 常にできるとは限らない ● もうちょっとなんとかならないのか ○ 軌道修正しつつも完成させたい ○ 成功体験に結びつけたい 23
Slide 24
Slide 24 text
認識を揃えることに注力する ● >完成版の完璧なイメージができて,そのイメージに お互い合意をとれてから修正を始めるべきで,そのた めにはコメントで書きつつも,議論を収束するために は口頭で話したりしたほうがよさそう. ○ コードレビューのクオリティとスピード,とくにスピードについ て,それとコミュニケーションについて - hitode909の日記 24
Slide 25
Slide 25 text
コードだけで話さない ● コードで話すが、コードだけで話さない ○ 使える手段はなんでも使う ● 図や表を活用する ○ フローチャート ○ シーケンス図 ■ こういうの用意すると意外と抜け漏れに気づきますよね 25
Slide 26
Slide 26 text
会話ってやつ便利 ● 文字のやり取りが収束しそうにないとき ● 口頭で話したら5分で終わることもある 26
Slide 27
Slide 27 text
会話ってやつ便利だけど ● 話した内容・結論は文章として残したい ○ 認識合わせを兼ねる ○ その場にいなかった人にも伝わるように ■ 「これどうなってるの?」 ■ 「昨日話したけど議事録がないね……」 27
Slide 28
Slide 28 text
どのようにコードをレビューするのか ● 自動化できることは自動化する ● 認識を揃える ● 思考停止しない ● 物怖じしない ● 全てをやり切ろうとしない 28
Slide 29
Slide 29 text
思考停止しない ● 「チーム歴の長いメンバーが書いたコードだ し、まあいいでしょう」 ● 「まともに見なくても害はないでしょう」 ● ちゃんとコードに向き合って!! 29
Slide 30
Slide 30 text
なぜコードをレビューするのか (再掲) ● ものすごくざっくりまとめると ○ コードの品質を保つため ○ 知見を共有するため 30
Slide 31
Slide 31 text
コードレビューは承認の儀式ではない ● ハンコを押して承認するプロセスではない ○ コードの品質を保つ、知見を共有する ○ やるからにはちゃんとやりましょう 31
Slide 32
Slide 32 text
どのようにコードをレビューするのか ● 自動化できることは自動化する ● 認識を揃える ● 思考停止しない ● 物怖じしない ● 全てをやり切ろうとしない 32
Slide 33
Slide 33 text
物怖じしない ● 「コードレビューやったことない」 ● 「自分はまだコードベースへの理解が浅い し、うまくコードレビューできるかな……」 ● わかる ○ でもコードレビューしてみよう 33
Slide 34
Slide 34 text
なぜコードをレビューするのか (再掲) ● ものすごくざっくりまとめると ○ コードの品質を保つため ○ 知見を共有するため 34
Slide 35
Slide 35 text
コードレビューを通じて理解を深める ● 知らないものを知らないままにしない ○ 知らないものは知らない (怖くて触れない) ● コードについて知るいい機会 ○ 失敗したからといって直ちに死ぬようなものではない 35
Slide 36
Slide 36 text
「しょうもない疑問」を恐れない ● みんな当然知ってるのでは? と思って質問し ないより、どんどん質問したほうがいい ○ 認識を揃えるのにもつながる ○ ここだけの話、みんな当然知ってることってそんなに ないですよ 36
Slide 37
Slide 37 text
レビューに時間がかかるのを受け入れる ● 誰しも慣れないことには時間がかかる ● 最初はそういうものだと思って受け入れる ○ チームとの期待感をすり合わせる ■ (チームとしてうまくサポートしていくべきですよね) 37
Slide 38
Slide 38 text
approveしないコードレビューから ● 最初のうちはapproveせずにコメントだけ付 けるという手もありますね ○ 別のレビュワーを呼んで改めて見てもらう ○ 慣れてきたらapproveする 38
Slide 39
Slide 39 text
コードレビューのやり方を知る ● そもそもコードレビュー自体が初めてなら ○ 一般的な方法について知る ■ インターネットにいい記事がいろいろある ○ メンターやチームメンバーに聞いてみる ■ 観点とかコツとか教えてもらえるはず 39
Slide 40
Slide 40 text
どのようにコードをレビューするのか ● 自動化できることは自動化する ● 認識を揃える ● 思考停止しない ● 物怖じしない ● 全てをやり切ろうとしない 40
Slide 41
Slide 41 text
全てをやり切ろうとしない ● コードレビューに時間をかけすぎない ○ 完璧を追求しすぎない ○ 「どんなバグも見落とさない」という気持ちは捨てる 41
Slide 42
Slide 42 text
LGTM ● Looks Good To Me ○ よさそうに見える ○ 「完璧です」ではない ● レビュワーが全ての責任を負うのではない ○ 何かあったらみんなで対応にあたる ■ それがチームだから 42
Slide 43
Slide 43 text
切り戻しと再発防止に注力する ● 素早く切り戻す ○ 被害を最小限に食い止める ○ 素早く切り戻すための仕組みを整備する ● 再発を防ぐ ○ CIやリリースフローの工夫などで防げないか考える ○ 自動化できることは自動化する 43
Slide 44
Slide 44 text
どのようにコードをレビューするのか (再掲) ● 自動化できることは自動化する ● コードレビューの前に認識を揃える ● 思考停止しない ● 物怖じしない ● 全てをやり切ろうとしない 44
Slide 45
Slide 45 text
アジェンダ ● なぜコードをレビューするのか ● どのようにコードをレビューするのか ● まとめ 45
Slide 46
Slide 46 text
まとめ ● なぜコードをレビューするのか ○ コードの品質を保つため ○ 知見を共有するため ● どのようにコードをレビューするか ○ 認識を揃える ○ 対話を怠らない ○ 恐れない 46
Slide 47
Slide 47 text
ここで一句 よいものを みんなで作る コードレビュー 47
Slide 48
Slide 48 text
hatena.co.jp/recruit 48