君たちはどうコードをレビューする (される) か / 大吉祥寺.pm
by
utagawa kiki
×
Copy
Open
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
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