デキるプログラマだけが知っているコードレビュー7つの秘訣(devlove版)
DESCRIPTION
DevLove甲子園 東日本大会でお話した内容です。 http://devlove.doorkeeper.jp/events/11792 ----- 優れたプログラマだけが優れたソースコードを書くことができます。 では優れたプログラマになるにはどうすれば良いでしょうか。 自分の書いたコードを、優れたプログラマに指摘してもらうことが一番の近道です。それがコードレビューです。たった一人でコードレビューも受けずに、ただ書き続けてもクソコードはクソコードのままなのです。 そこで今回は、良いコードが書けるプログラマになるための、コードレビューを上手に実践する秘訣を話します。TRANSCRIPT
![Page 1: デキるプログラマだけが知っているコードレビュー7つの秘訣(DevLove版)](https://reader034.vdocuments.net/reader034/viewer/2022050808/5471625fb4af9fb90a8b4b47/html5/thumbnails/1.jpg)
いつまでクソコードを 書き続けるの?
デキるプログラマだけが知っている コードレビュー7つの秘訣 SonicGarden Inc. 西見 公宏 2014/8/23 DevLove甲子園 東日本大会 技トラック 5回裏
![Page 2: デキるプログラマだけが知っているコードレビュー7つの秘訣(DevLove版)](https://reader034.vdocuments.net/reader034/viewer/2022050808/5471625fb4af9fb90a8b4b47/html5/thumbnails/2.jpg)
DevLove甲子園 東日本大会 技トラック
西見 公宏 Nishimi Masahiro
2
![Page 3: デキるプログラマだけが知っているコードレビュー7つの秘訣(DevLove版)](https://reader034.vdocuments.net/reader034/viewer/2022050808/5471625fb4af9fb90a8b4b47/html5/thumbnails/3.jpg)
自己紹介
DevLove甲子園 東日本大会 技トラック
西見 公宏 Masahiro Nishimi @mah_lab 昭和58年生まれ 東京育ち 2児(双子)の父親です
3
ブログ http://blog.mah-lab.com/
![Page 4: デキるプログラマだけが知っているコードレビュー7つの秘訣(DevLove版)](https://reader034.vdocuments.net/reader034/viewer/2022050808/5471625fb4af9fb90a8b4b47/html5/thumbnails/4.jpg)
DevLove甲子園 東日本大会 技トラック 4
• 納品のない受託開発 – プログラマがお客様の顧問としてビジネスを支えるITをサポート
• 自社サービス開発 – youRoom (グループ内コミュニケーション) – SKIP (社内SNS) – Remotty (リアルタイムコミュニケーション)
![Page 5: デキるプログラマだけが知っているコードレビュー7つの秘訣(DevLove版)](https://reader034.vdocuments.net/reader034/viewer/2022050808/5471625fb4af9fb90a8b4b47/html5/thumbnails/5.jpg)
DevLove甲子園 東日本大会 技トラック 5
今日の話の位置づけ • SonicGardenでは技術者の教育、プロダクトの保守性向上施策など、全てコードレビューを中心に行っています。
• そんな現場ノウハウを元に、より良いコードにしていくために、どんなコードレビューをすれば良いか?ということをお話します。
![Page 6: デキるプログラマだけが知っているコードレビュー7つの秘訣(DevLove版)](https://reader034.vdocuments.net/reader034/viewer/2022050808/5471625fb4af9fb90a8b4b47/html5/thumbnails/6.jpg)
DevLove甲子園 東日本大会 技トラック 6
![Page 7: デキるプログラマだけが知っているコードレビュー7つの秘訣(DevLove版)](https://reader034.vdocuments.net/reader034/viewer/2022050808/5471625fb4af9fb90a8b4b47/html5/thumbnails/7.jpg)
DevLove甲子園 東日本大会 技トラック 7
この7つの秘訣を聞いた人の声
http://ppworks.hatenablog.jp/entry/2014/08/19/145723
![Page 8: デキるプログラマだけが知っているコードレビュー7つの秘訣(DevLove版)](https://reader034.vdocuments.net/reader034/viewer/2022050808/5471625fb4af9fb90a8b4b47/html5/thumbnails/8.jpg)
今日お話する内容
1. クソコードとは何か? 2. 優れたプログラマとは何か? 3. コードレビューが改善の近道 4. コードレビュー7つの秘訣
DevLove甲子園 東日本大会 技トラック 8
![Page 9: デキるプログラマだけが知っているコードレビュー7つの秘訣(DevLove版)](https://reader034.vdocuments.net/reader034/viewer/2022050808/5471625fb4af9fb90a8b4b47/html5/thumbnails/9.jpg)
DevLove甲子園 東日本大会 技トラック
1. クソコードとは何か?
9
![Page 10: デキるプログラマだけが知っているコードレビュー7つの秘訣(DevLove版)](https://reader034.vdocuments.net/reader034/viewer/2022050808/5471625fb4af9fb90a8b4b47/html5/thumbnails/10.jpg)
DevLove甲子園 東日本大会 技トラック
そもそもクソコードって なんだと思いますか?
今から30秒の間、皆さん頭のなかで考えてみてください
10
![Page 11: デキるプログラマだけが知っているコードレビュー7つの秘訣(DevLove版)](https://reader034.vdocuments.net/reader034/viewer/2022050808/5471625fb4af9fb90a8b4b47/html5/thumbnails/11.jpg)
DevLove甲子園 東日本大会 技トラック
「クソコード」とは・・・
11
![Page 12: デキるプログラマだけが知っているコードレビュー7つの秘訣(DevLove版)](https://reader034.vdocuments.net/reader034/viewer/2022050808/5471625fb4af9fb90a8b4b47/html5/thumbnails/12.jpg)
DevLove甲子園 東日本大会 技トラック
「クソコード」とは・・・
読む人を怒りの渦に 叩きこむコードである
12
![Page 13: デキるプログラマだけが知っているコードレビュー7つの秘訣(DevLove版)](https://reader034.vdocuments.net/reader034/viewer/2022050808/5471625fb4af9fb90a8b4b47/html5/thumbnails/13.jpg)
クソコード3つの特徴 1. 読めないコード
– 変数名が暗号/制御フローが無駄に複雑/メソッド名と処理の内容が合ってない etc...
2. 要領の悪いコード – 言語レベルで用意されている機能を素直に使わない(例:Go
を使っているのにゴルーチンを使わない) etc...
3. 意図がわからないコード – フレームワークのレールに従っていない etc...
DevLove甲子園 東日本大会 技トラック 13
![Page 14: デキるプログラマだけが知っているコードレビュー7つの秘訣(DevLove版)](https://reader034.vdocuments.net/reader034/viewer/2022050808/5471625fb4af9fb90a8b4b47/html5/thumbnails/14.jpg)
DevLove甲子園 東日本大会 技トラック 14
例 def checkadmin? if session[:login].admin then return true else redirect_to '/members/' + session[:login].id.to_s return false end end
![Page 15: デキるプログラマだけが知っているコードレビュー7つの秘訣(DevLove版)](https://reader034.vdocuments.net/reader034/viewer/2022050808/5471625fb4af9fb90a8b4b47/html5/thumbnails/15.jpg)
クソコードかどうかは 読まれるまで分からない • シュレディンガーの猫 • 読んだ人の当事者感によって度合いが変わる(例:「え、このコード、俺がメンテするの!?」)
• 自分で読んでダメだと思うなら、最初から直して・・・。
DevLove甲子園 東日本大会 技トラック 15
![Page 16: デキるプログラマだけが知っているコードレビュー7つの秘訣(DevLove版)](https://reader034.vdocuments.net/reader034/viewer/2022050808/5471625fb4af9fb90a8b4b47/html5/thumbnails/16.jpg)
DevLove甲子園 東日本大会 技トラック
2. 優れたプログラマとは何か?
16
![Page 17: デキるプログラマだけが知っているコードレビュー7つの秘訣(DevLove版)](https://reader034.vdocuments.net/reader034/viewer/2022050808/5471625fb4af9fb90a8b4b47/html5/thumbnails/17.jpg)
優れたプログラマ3つの特徴 1. 「読めないコード」を書かない。 – 読みやすいコードを書く。 2. 「要領の悪いコード」を書かない。 – 言語の特性を活かした要領の良いコードを書く。 3. 「意図のわからないコード」を書かない。 – 設計の意図が明確である。
DevLove甲子園 東日本大会 技トラック 17
![Page 18: デキるプログラマだけが知っているコードレビュー7つの秘訣(DevLove版)](https://reader034.vdocuments.net/reader034/viewer/2022050808/5471625fb4af9fb90a8b4b47/html5/thumbnails/18.jpg)
優れたプログラマを見極める簡単な試験 書いたコードの1行1行に対して、 以下の項目を質問する。
l どういう処理なのか? l どういう意図で書いたのか?
DevLove甲子園 東日本大会 技トラック 18
![Page 19: デキるプログラマだけが知っているコードレビュー7つの秘訣(DevLove版)](https://reader034.vdocuments.net/reader034/viewer/2022050808/5471625fb4af9fb90a8b4b47/html5/thumbnails/19.jpg)
DevLove甲子園 東日本大会 技トラック
3. コードレビューが改善の近道
19
![Page 20: デキるプログラマだけが知っているコードレビュー7つの秘訣(DevLove版)](https://reader034.vdocuments.net/reader034/viewer/2022050808/5471625fb4af9fb90a8b4b47/html5/thumbnails/20.jpg)
まずは読まれなければはじまらない
DevLove甲子園 東日本大会 技トラック 20
読む人に怒りをもたらすのが クソコード
ならば
読む人がいなくては はじまらない
![Page 21: デキるプログラマだけが知っているコードレビュー7つの秘訣(DevLove版)](https://reader034.vdocuments.net/reader034/viewer/2022050808/5471625fb4af9fb90a8b4b47/html5/thumbnails/21.jpg)
誰に読まれるのがベストか?
DevLove甲子園 東日本大会 技トラック 21
優れたプログラマ
![Page 22: デキるプログラマだけが知っているコードレビュー7つの秘訣(DevLove版)](https://reader034.vdocuments.net/reader034/viewer/2022050808/5471625fb4af9fb90a8b4b47/html5/thumbnails/22.jpg)
何故優れたプログラマが読むべきなのか?
DevLove甲子園 東日本大会 技トラック 22
• 単純に同じレベルのプログラマが指摘しても、指摘の内容に限界があるため。
限界の壁
![Page 23: デキるプログラマだけが知っているコードレビュー7つの秘訣(DevLove版)](https://reader034.vdocuments.net/reader034/viewer/2022050808/5471625fb4af9fb90a8b4b47/html5/thumbnails/23.jpg)
優れたプログラマは限界を引き上げます
DevLove甲子園 東日本大会 技トラック 23
• レビューの中で小手先のテクニックに終始しない「優れたプログラマの考え方」を伝えていくことで、チームの限界を引き上げていきます。
![Page 24: デキるプログラマだけが知っているコードレビュー7つの秘訣(DevLove版)](https://reader034.vdocuments.net/reader034/viewer/2022050808/5471625fb4af9fb90a8b4b47/html5/thumbnails/24.jpg)
• いくら優れたプログラマと言えども、闇雲にレビューをするのでは効果がありません。
ただし・・・
DevLove甲子園 東日本大会 技トラック 24
・・・
![Page 25: デキるプログラマだけが知っているコードレビュー7つの秘訣(DevLove版)](https://reader034.vdocuments.net/reader034/viewer/2022050808/5471625fb4af9fb90a8b4b47/html5/thumbnails/25.jpg)
• ソニックガーデンでも新しく入ったプログラマを教育する手段としてコードレビューを取り入れています。
• その中で気付いたポイントをいくつかピックアップしました。
• それが今からお伝えする「7つの秘訣」です。
より効果を上げるために
DevLove甲子園 東日本大会 技トラック 25
![Page 26: デキるプログラマだけが知っているコードレビュー7つの秘訣(DevLove版)](https://reader034.vdocuments.net/reader034/viewer/2022050808/5471625fb4af9fb90a8b4b47/html5/thumbnails/26.jpg)
DevLove甲子園 東日本大会 技トラック 26
コードレビューの心技体
• 心:今日お話する「7つの秘訣」 • 技:コードレビューの技術的観点 • 体:コードレビューを実践すること
![Page 27: デキるプログラマだけが知っているコードレビュー7つの秘訣(DevLove版)](https://reader034.vdocuments.net/reader034/viewer/2022050808/5471625fb4af9fb90a8b4b47/html5/thumbnails/27.jpg)
DevLove甲子園 東日本大会 技トラック
4. コードレビュー7つの秘訣
27
![Page 28: デキるプログラマだけが知っているコードレビュー7つの秘訣(DevLove版)](https://reader034.vdocuments.net/reader034/viewer/2022050808/5471625fb4af9fb90a8b4b47/html5/thumbnails/28.jpg)
1. レビューの観点を明確にすること
DevLove甲子園 東日本大会 技トラック 28
![Page 29: デキるプログラマだけが知っているコードレビュー7つの秘訣(DevLove版)](https://reader034.vdocuments.net/reader034/viewer/2022050808/5471625fb4af9fb90a8b4b47/html5/thumbnails/29.jpg)
1. レビューの観点を明確にすること • リリース前レビューの話なのか、コード品質の話なのか。
• 読む側も漠然と読んで、漠然とコメントを書くのでは効果を生まない。 – 観点を明確にしてレビューすることで指摘する側の精度も上がります。
DevLove甲子園 東日本大会 技トラック 29
![Page 30: デキるプログラマだけが知っているコードレビュー7つの秘訣(DevLove版)](https://reader034.vdocuments.net/reader034/viewer/2022050808/5471625fb4af9fb90a8b4b47/html5/thumbnails/30.jpg)
• コーディングスタイルの観点 • セキュリティの観点 • 保守性の観点 • トランザクションの観点(リカバリ等) • リリース時に事故が起きないか?の観点
DevLove甲子園 東日本大会 技トラック 30
1. レビューの観点を明確にすること (具体例)
![Page 31: デキるプログラマだけが知っているコードレビュー7つの秘訣(DevLove版)](https://reader034.vdocuments.net/reader034/viewer/2022050808/5471625fb4af9fb90a8b4b47/html5/thumbnails/31.jpg)
DevLove甲子園 東日本大会 技トラック 31
HOUND CI
![Page 32: デキるプログラマだけが知っているコードレビュー7つの秘訣(DevLove版)](https://reader034.vdocuments.net/reader034/viewer/2022050808/5471625fb4af9fb90a8b4b47/html5/thumbnails/32.jpg)
2. 我が身に返ることを恐れずに指摘すること
DevLove甲子園 東日本大会 技トラック 32
![Page 33: デキるプログラマだけが知っているコードレビュー7つの秘訣(DevLove版)](https://reader034.vdocuments.net/reader034/viewer/2022050808/5471625fb4af9fb90a8b4b47/html5/thumbnails/33.jpg)
2. 我が身に返ることを恐れずに指摘すること • 自分のことは棚に上げる! • 鋭くツッコミを入れられないなら、レビューの意味は無い。
• 指摘して自分の耳が痛いなら、自分にとっても成長のチャンスだと捉える。
DevLove甲子園 東日本大会 技トラック 33
![Page 34: デキるプログラマだけが知っているコードレビュー7つの秘訣(DevLove版)](https://reader034.vdocuments.net/reader034/viewer/2022050808/5471625fb4af9fb90a8b4b47/html5/thumbnails/34.jpg)
3. 何故悪いコードなのかを論理的に 説明すること
DevLove甲子園 東日本大会 技トラック 34
![Page 35: デキるプログラマだけが知っているコードレビュー7つの秘訣(DevLove版)](https://reader034.vdocuments.net/reader034/viewer/2022050808/5471625fb4af9fb90a8b4b47/html5/thumbnails/35.jpg)
3. 何故悪いコードなのかを論理的に説明すること • 「何となく汚い」は指摘ではない。 • 悪いコードだと判断したなら、相手が納得できるように、論理的に説明する。
• 論理的に説明できないなら指摘をすべきではない。
DevLove甲子園 東日本大会 技トラック 35
![Page 36: デキるプログラマだけが知っているコードレビュー7つの秘訣(DevLove版)](https://reader034.vdocuments.net/reader034/viewer/2022050808/5471625fb4af9fb90a8b4b47/html5/thumbnails/36.jpg)
4. 良いコードについて共通認識を持つこと
DevLove甲子園 東日本大会 技トラック 36
![Page 37: デキるプログラマだけが知っているコードレビュー7つの秘訣(DevLove版)](https://reader034.vdocuments.net/reader034/viewer/2022050808/5471625fb4af9fb90a8b4b47/html5/thumbnails/37.jpg)
4. 良いコードについて共通認識を持つこと • コードレビューのあとに雰囲気が悪くなるのはチームで「良いコード」の認識が揃っていない証拠。
• 「良いコード」を共有することでチームとして成長する。
• 認識を揃えるためには、あるコードを題材にディスカッションの機会を設けると良い。
DevLove甲子園 東日本大会 技トラック 37
![Page 38: デキるプログラマだけが知っているコードレビュー7つの秘訣(DevLove版)](https://reader034.vdocuments.net/reader034/viewer/2022050808/5471625fb4af9fb90a8b4b47/html5/thumbnails/38.jpg)
DevLove甲子園 東日本大会 技トラック 38
チームでディスカッションの 機会を持つ例
![Page 39: デキるプログラマだけが知っているコードレビュー7つの秘訣(DevLove版)](https://reader034.vdocuments.net/reader034/viewer/2022050808/5471625fb4af9fb90a8b4b47/html5/thumbnails/39.jpg)
DevLove甲子園 東日本大会 技トラック 39
ディスカッションの差分
![Page 40: デキるプログラマだけが知っているコードレビュー7つの秘訣(DevLove版)](https://reader034.vdocuments.net/reader034/viewer/2022050808/5471625fb4af9fb90a8b4b47/html5/thumbnails/40.jpg)
5. 小さい単位でレビューを繰り返すこと
DevLove甲子園 東日本大会 技トラック 40
![Page 41: デキるプログラマだけが知っているコードレビュー7つの秘訣(DevLove版)](https://reader034.vdocuments.net/reader034/viewer/2022050808/5471625fb4af9fb90a8b4b47/html5/thumbnails/41.jpg)
5. 小さい単位でレビューを繰り返すこと
• 大きな単位だとレビューする側もされる側も出番が回ってきにくい。 – 機会を増やすことでみんながレビュー体験をする/小口化することで習慣化する
• ソニックガーデンでは30分~1時間程度で見れる分量を基準にしている。
DevLove甲子園 東日本大会 技トラック 41
![Page 42: デキるプログラマだけが知っているコードレビュー7つの秘訣(DevLove版)](https://reader034.vdocuments.net/reader034/viewer/2022050808/5471625fb4af9fb90a8b4b47/html5/thumbnails/42.jpg)
6. 指摘は素直な気持ちで受け入れること
DevLove甲子園 東日本大会 技トラック 42
![Page 43: デキるプログラマだけが知っているコードレビュー7つの秘訣(DevLove版)](https://reader034.vdocuments.net/reader034/viewer/2022050808/5471625fb4af9fb90a8b4b47/html5/thumbnails/43.jpg)
6. 指摘は素直な気持ちで受け入れること
• 指摘を素直に受け止められないと成長できない。
• 受け入れた後は同じ失敗を繰り返さない。 – 漠然とコードレビューを受けて、その場はその場で何とかやり過ごして、また同じ失敗を繰り返すメンタルモデルではダメ。
DevLove甲子園 東日本大会 技トラック 43
![Page 44: デキるプログラマだけが知っているコードレビュー7つの秘訣(DevLove版)](https://reader034.vdocuments.net/reader034/viewer/2022050808/5471625fb4af9fb90a8b4b47/html5/thumbnails/44.jpg)
7. 指摘は人格否定でないことを理解すること
DevLove甲子園 東日本大会 技トラック 44
![Page 45: デキるプログラマだけが知っているコードレビュー7つの秘訣(DevLove版)](https://reader034.vdocuments.net/reader034/viewer/2022050808/5471625fb4af9fb90a8b4b47/html5/thumbnails/45.jpg)
7. 指摘は人格否定でないことを理解すること • 自分が一生懸命書いたコードに対して手厳しく指摘を受けるのは辛いこと。。
• でも、指摘するのはコードであって、あなたの人格を否定しているわけではありません!
• お互いに「コード」の話をしている、ということを理解した上で指摘をしましょう。
DevLove甲子園 東日本大会 技トラック 45
![Page 46: デキるプログラマだけが知っているコードレビュー7つの秘訣(DevLove版)](https://reader034.vdocuments.net/reader034/viewer/2022050808/5471625fb4af9fb90a8b4b47/html5/thumbnails/46.jpg)
DevLove甲子園 東日本大会 技トラック
まとめ
46
![Page 47: デキるプログラマだけが知っているコードレビュー7つの秘訣(DevLove版)](https://reader034.vdocuments.net/reader034/viewer/2022050808/5471625fb4af9fb90a8b4b47/html5/thumbnails/47.jpg)
今日お話した内容
1. クソコードとは何か? 2. 優れたプログラマとは何か? 3. コードレビューが改善の近道 4. コードレビュー7つの秘訣
DevLove甲子園 東日本大会 技トラック 47
![Page 48: デキるプログラマだけが知っているコードレビュー7つの秘訣(DevLove版)](https://reader034.vdocuments.net/reader034/viewer/2022050808/5471625fb4af9fb90a8b4b47/html5/thumbnails/48.jpg)
今日お話した内容 • クソコードとは読む人を怒りの渦に叩きこむコードである。
• 優秀なプログラマに読まれる機会があれば、その人のコードは劇的に改善する。 (※ 効用には個人差があります)
DevLove甲子園 東日本大会 技トラック 48
![Page 49: デキるプログラマだけが知っているコードレビュー7つの秘訣(DevLove版)](https://reader034.vdocuments.net/reader034/viewer/2022050808/5471625fb4af9fb90a8b4b47/html5/thumbnails/49.jpg)
今日お話した内容 1. レビューの観点を明確にすること 2. 我が身に返ることを恐れずに指摘すること 3. 何故悪いコードなのかを論理的に説明すること 4. 良いコードについて共通認識を持つこと 5. 小さい単位でレビューを繰り返すこと 6. 指摘は素直な気持ちで受け入れること 7. 指摘は人格否定でないことを理解すること
DevLove甲子園 東日本大会 技トラック 49
![Page 50: デキるプログラマだけが知っているコードレビュー7つの秘訣(DevLove版)](https://reader034.vdocuments.net/reader034/viewer/2022050808/5471625fb4af9fb90a8b4b47/html5/thumbnails/50.jpg)
DevLove甲子園 東日本大会 技トラック 50
ソニックガーデンで 一緒にはたらく仲間を募集しています!
http://www.sonicgarden.jp/jobs 転職を考えている方はコチラ!
![Page 51: デキるプログラマだけが知っているコードレビュー7つの秘訣(DevLove版)](https://reader034.vdocuments.net/reader034/viewer/2022050808/5471625fb4af9fb90a8b4b47/html5/thumbnails/51.jpg)
DevLove甲子園 東日本大会 技トラック 51
一緒に納品のない受託開発をしてくれる 仲間も募集しています!
http://www.sonicgarden.jp/guild
• 既に立ち上げている会社の事業として「納品のない受託開発」を検討している方
• フリーランスの仕事の一つとして「納品のない受託開発」に興味のある方
上記に当てはまる方は下記のURLにアクセス!
![Page 52: デキるプログラマだけが知っているコードレビュー7つの秘訣(DevLove版)](https://reader034.vdocuments.net/reader034/viewer/2022050808/5471625fb4af9fb90a8b4b47/html5/thumbnails/52.jpg)
DevLove甲子園 東日本大会 技トラック 52
SonicGarden Study Ustreamでテクニカルな情報を配信しています。
コードレビューの心技体の続き、 技と体を次回以降配信する予定です。 次回は9月中旬を予定。見てね! http://sonicgarden.doorkeeper.jp/
![Page 53: デキるプログラマだけが知っているコードレビュー7つの秘訣(DevLove版)](https://reader034.vdocuments.net/reader034/viewer/2022050808/5471625fb4af9fb90a8b4b47/html5/thumbnails/53.jpg)
DevLove甲子園 東日本大会 技トラック
ご静聴ありがとうございました! 53