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