53
いつまでクソ コードを 書き続けるの? デキるプログラマだけが知っている コードレビュー7つの秘訣 SonicGarden Inc. 西見 公宏 2014/8/23 DevLove甲子園 東日本大会 技トラック 5回裏

デキるプログラマだけが知っているコードレビュー7つの秘訣(DevLove版)

Embed Size (px)

DESCRIPTION

DevLove甲子園 東日本大会でお話した内容です。 http://devlove.doorkeeper.jp/events/11792 ----- 優れたプログラマだけが優れたソースコードを書くことができます。 では優れたプログラマになるにはどうすれば良いでしょうか。 自分の書いたコードを、優れたプログラマに指摘してもらうことが一番の近道です。それがコードレビューです。たった一人でコードレビューも受けずに、ただ書き続けてもクソコードはクソコードのままなのです。 そこで今回は、良いコードが書けるプログラマになるための、コードレビューを上手に実践する秘訣を話します。

Citation preview

Page 1: デキるプログラマだけが知っているコードレビュー7つの秘訣(DevLove版)

いつまでクソコードを 書き続けるの?

デキるプログラマだけが知っている コードレビュー7つの秘訣 SonicGarden Inc. 西見 公宏 2014/8/23 DevLove甲子園 東日本大会 技トラック 5回裏

Page 2: デキるプログラマだけが知っているコードレビュー7つの秘訣(DevLove版)

DevLove甲子園 東日本大会 技トラック  

西見 公宏 Nishimi Masahiro

2  

Page 3: デキるプログラマだけが知っているコードレビュー7つの秘訣(DevLove版)

自己紹介

DevLove甲子園 東日本大会 技トラック  

西見 公宏 Masahiro Nishimi @mah_lab 昭和58年生まれ 東京育ち 2児(双子)の父親です

3  

ブログ http://blog.mah-lab.com/

Page 4: デキるプログラマだけが知っているコードレビュー7つの秘訣(DevLove版)

DevLove甲子園 東日本大会 技トラック   4  

•  納品のない受託開発 –  プログラマがお客様の顧問としてビジネスを支えるITをサポート

•  自社サービス開発 –  youRoom (グループ内コミュニケーション) –  SKIP (社内SNS) –  Remotty (リアルタイムコミュニケーション)

Page 5: デキるプログラマだけが知っているコードレビュー7つの秘訣(DevLove版)

DevLove甲子園 東日本大会 技トラック   5  

今日の話の位置づけ •  SonicGardenでは技術者の教育、プロダクトの保守性向上施策など、全てコードレビューを中心に行っています。

•  そんな現場ノウハウを元に、より良いコードにしていくために、どんなコードレビューをすれば良いか?ということをお話します。

Page 6: デキるプログラマだけが知っているコードレビュー7つの秘訣(DevLove版)

DevLove甲子園 東日本大会 技トラック   6  

Page 7: デキるプログラマだけが知っているコードレビュー7つの秘訣(DevLove版)

DevLove甲子園 東日本大会 技トラック   7  

この7つの秘訣を聞いた人の声

http://ppworks.hatenablog.jp/entry/2014/08/19/145723

Page 8: デキるプログラマだけが知っているコードレビュー7つの秘訣(DevLove版)

今日お話する内容

1. クソコードとは何か? 2. 優れたプログラマとは何か? 3. コードレビューが改善の近道 4. コードレビュー7つの秘訣

DevLove甲子園 東日本大会 技トラック   8  

Page 9: デキるプログラマだけが知っているコードレビュー7つの秘訣(DevLove版)

DevLove甲子園 東日本大会 技トラック  

1. クソコードとは何か?

9  

Page 10: デキるプログラマだけが知っているコードレビュー7つの秘訣(DevLove版)

DevLove甲子園 東日本大会 技トラック  

そもそもクソコードって なんだと思いますか?

今から30秒の間、皆さん頭のなかで考えてみてください

10  

Page 11: デキるプログラマだけが知っているコードレビュー7つの秘訣(DevLove版)

DevLove甲子園 東日本大会 技トラック  

「クソコード」とは・・・

11  

Page 12: デキるプログラマだけが知っているコードレビュー7つの秘訣(DevLove版)

DevLove甲子園 東日本大会 技トラック  

「クソコード」とは・・・

読む人を怒りの渦に 叩きこむコードである

12  

Page 13: デキるプログラマだけが知っているコードレビュー7つの秘訣(DevLove版)

クソコード3つの特徴 1. 読めないコード

–  変数名が暗号/制御フローが無駄に複雑/メソッド名と処理の内容が合ってない etc...

2. 要領の悪いコード –  言語レベルで用意されている機能を素直に使わない(例:Go

を使っているのにゴルーチンを使わない) etc...

3. 意図がわからないコード –  フレームワークのレールに従っていない etc...

DevLove甲子園 東日本大会 技トラック   13  

Page 14: デキるプログラマだけが知っているコードレビュー7つの秘訣(DevLove版)

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版)

クソコードかどうかは 読まれるまで分からない •  シュレディンガーの猫 •  読んだ人の当事者感によって度合いが変わる(例:「え、このコード、俺がメンテするの!?」)

•  自分で読んでダメだと思うなら、最初から直して・・・。

DevLove甲子園 東日本大会 技トラック   15  

Page 16: デキるプログラマだけが知っているコードレビュー7つの秘訣(DevLove版)

DevLove甲子園 東日本大会 技トラック  

2. 優れたプログラマとは何か?

16  

Page 17: デキるプログラマだけが知っているコードレビュー7つの秘訣(DevLove版)

優れたプログラマ3つの特徴 1. 「読めないコード」を書かない。 –  読みやすいコードを書く。 2. 「要領の悪いコード」を書かない。 –  言語の特性を活かした要領の良いコードを書く。 3. 「意図のわからないコード」を書かない。 –  設計の意図が明確である。

DevLove甲子園 東日本大会 技トラック   17  

Page 18: デキるプログラマだけが知っているコードレビュー7つの秘訣(DevLove版)

優れたプログラマを見極める簡単な試験 書いたコードの1行1行に対して、 以下の項目を質問する。

l どういう処理なのか? l どういう意図で書いたのか?

DevLove甲子園 東日本大会 技トラック   18  

Page 19: デキるプログラマだけが知っているコードレビュー7つの秘訣(DevLove版)

DevLove甲子園 東日本大会 技トラック  

3. コードレビューが改善の近道

19  

Page 20: デキるプログラマだけが知っているコードレビュー7つの秘訣(DevLove版)

まずは読まれなければはじまらない

DevLove甲子園 東日本大会 技トラック   20  

読む人に怒りをもたらすのが クソコード

ならば

読む人がいなくては はじまらない

Page 21: デキるプログラマだけが知っているコードレビュー7つの秘訣(DevLove版)

誰に読まれるのがベストか?

DevLove甲子園 東日本大会 技トラック   21  

優れたプログラマ

Page 22: デキるプログラマだけが知っているコードレビュー7つの秘訣(DevLove版)

何故優れたプログラマが読むべきなのか?

DevLove甲子園 東日本大会 技トラック   22  

•  単純に同じレベルのプログラマが指摘しても、指摘の内容に限界があるため。

限界の壁

Page 23: デキるプログラマだけが知っているコードレビュー7つの秘訣(DevLove版)

優れたプログラマは限界を引き上げます

DevLove甲子園 東日本大会 技トラック   23  

•  レビューの中で小手先のテクニックに終始しない「優れたプログラマの考え方」を伝えていくことで、チームの限界を引き上げていきます。

Page 24: デキるプログラマだけが知っているコードレビュー7つの秘訣(DevLove版)

•  いくら優れたプログラマと言えども、闇雲にレビューをするのでは効果がありません。

ただし・・・

DevLove甲子園 東日本大会 技トラック   24  

・・・

Page 25: デキるプログラマだけが知っているコードレビュー7つの秘訣(DevLove版)

•  ソニックガーデンでも新しく入ったプログラマを教育する手段としてコードレビューを取り入れています。

•  その中で気付いたポイントをいくつかピックアップしました。

•  それが今からお伝えする「7つの秘訣」です。

より効果を上げるために

DevLove甲子園 東日本大会 技トラック   25  

Page 26: デキるプログラマだけが知っているコードレビュー7つの秘訣(DevLove版)

DevLove甲子園 東日本大会 技トラック   26  

コードレビューの心技体

•  心:今日お話する「7つの秘訣」 •  技:コードレビューの技術的観点 •  体:コードレビューを実践すること

Page 27: デキるプログラマだけが知っているコードレビュー7つの秘訣(DevLove版)

DevLove甲子園 東日本大会 技トラック  

4. コードレビュー7つの秘訣

27  

Page 28: デキるプログラマだけが知っているコードレビュー7つの秘訣(DevLove版)

1. レビューの観点を明確にすること

DevLove甲子園 東日本大会 技トラック   28  

Page 29: デキるプログラマだけが知っているコードレビュー7つの秘訣(DevLove版)

1. レビューの観点を明確にすること •  リリース前レビューの話なのか、コード品質の話なのか。

•  読む側も漠然と読んで、漠然とコメントを書くのでは効果を生まない。 – 観点を明確にしてレビューすることで指摘する側の精度も上がります。

DevLove甲子園 東日本大会 技トラック   29  

Page 30: デキるプログラマだけが知っているコードレビュー7つの秘訣(DevLove版)

•  コーディングスタイルの観点 •  セキュリティの観点 •  保守性の観点 •  トランザクションの観点(リカバリ等) •  リリース時に事故が起きないか?の観点

DevLove甲子園 東日本大会 技トラック   30  

1. レビューの観点を明確にすること   (具体例)

Page 31: デキるプログラマだけが知っているコードレビュー7つの秘訣(DevLove版)

DevLove甲子園 東日本大会 技トラック   31  

HOUND CI

Page 32: デキるプログラマだけが知っているコードレビュー7つの秘訣(DevLove版)

2. 我が身に返ることを恐れずに指摘すること

DevLove甲子園 東日本大会 技トラック   32  

Page 33: デキるプログラマだけが知っているコードレビュー7つの秘訣(DevLove版)

2. 我が身に返ることを恐れずに指摘すること •  自分のことは棚に上げる! •  鋭くツッコミを入れられないなら、レビューの意味は無い。

•  指摘して自分の耳が痛いなら、自分にとっても成長のチャンスだと捉える。

DevLove甲子園 東日本大会 技トラック   33  

Page 34: デキるプログラマだけが知っているコードレビュー7つの秘訣(DevLove版)

3. 何故悪いコードなのかを論理的に 説明すること

DevLove甲子園 東日本大会 技トラック   34  

Page 35: デキるプログラマだけが知っているコードレビュー7つの秘訣(DevLove版)

3. 何故悪いコードなのかを論理的に説明すること •  「何となく汚い」は指摘ではない。 •  悪いコードだと判断したなら、相手が納得できるように、論理的に説明する。

•  論理的に説明できないなら指摘をすべきではない。

DevLove甲子園 東日本大会 技トラック   35  

Page 36: デキるプログラマだけが知っているコードレビュー7つの秘訣(DevLove版)

4. 良いコードについて共通認識を持つこと

DevLove甲子園 東日本大会 技トラック   36  

Page 37: デキるプログラマだけが知っているコードレビュー7つの秘訣(DevLove版)

4. 良いコードについて共通認識を持つこと •  コードレビューのあとに雰囲気が悪くなるのはチームで「良いコード」の認識が揃っていない証拠。

•  「良いコード」を共有することでチームとして成長する。

•  認識を揃えるためには、あるコードを題材にディスカッションの機会を設けると良い。

DevLove甲子園 東日本大会 技トラック   37  

Page 38: デキるプログラマだけが知っているコードレビュー7つの秘訣(DevLove版)

DevLove甲子園 東日本大会 技トラック   38  

チームでディスカッションの 機会を持つ例

Page 39: デキるプログラマだけが知っているコードレビュー7つの秘訣(DevLove版)

DevLove甲子園 東日本大会 技トラック   39  

ディスカッションの差分

Page 40: デキるプログラマだけが知っているコードレビュー7つの秘訣(DevLove版)

5. 小さい単位でレビューを繰り返すこと

DevLove甲子園 東日本大会 技トラック   40  

Page 41: デキるプログラマだけが知っているコードレビュー7つの秘訣(DevLove版)

5. 小さい単位でレビューを繰り返すこと

•  大きな単位だとレビューする側もされる側も出番が回ってきにくい。 – 機会を増やすことでみんながレビュー体験をする/小口化することで習慣化する

•  ソニックガーデンでは30分~1時間程度で見れる分量を基準にしている。

DevLove甲子園 東日本大会 技トラック   41  

Page 42: デキるプログラマだけが知っているコードレビュー7つの秘訣(DevLove版)

6. 指摘は素直な気持ちで受け入れること

DevLove甲子園 東日本大会 技トラック   42  

Page 43: デキるプログラマだけが知っているコードレビュー7つの秘訣(DevLove版)

6. 指摘は素直な気持ちで受け入れること

•  指摘を素直に受け止められないと成長できない。

•  受け入れた後は同じ失敗を繰り返さない。 – 漠然とコードレビューを受けて、その場はその場で何とかやり過ごして、また同じ失敗を繰り返すメンタルモデルではダメ。

DevLove甲子園 東日本大会 技トラック   43  

Page 44: デキるプログラマだけが知っているコードレビュー7つの秘訣(DevLove版)

7. 指摘は人格否定でないことを理解すること

DevLove甲子園 東日本大会 技トラック   44  

Page 45: デキるプログラマだけが知っているコードレビュー7つの秘訣(DevLove版)

7. 指摘は人格否定でないことを理解すること •  自分が一生懸命書いたコードに対して手厳しく指摘を受けるのは辛いこと。。

•  でも、指摘するのはコードであって、あなたの人格を否定しているわけではありません!

•  お互いに「コード」の話をしている、ということを理解した上で指摘をしましょう。

DevLove甲子園 東日本大会 技トラック   45  

Page 46: デキるプログラマだけが知っているコードレビュー7つの秘訣(DevLove版)

DevLove甲子園 東日本大会 技トラック  

まとめ

46  

Page 47: デキるプログラマだけが知っているコードレビュー7つの秘訣(DevLove版)

今日お話した内容

1. クソコードとは何か? 2. 優れたプログラマとは何か? 3. コードレビューが改善の近道 4. コードレビュー7つの秘訣

DevLove甲子園 東日本大会 技トラック   47  

Page 48: デキるプログラマだけが知っているコードレビュー7つの秘訣(DevLove版)

今日お話した内容 •  クソコードとは読む人を怒りの渦に叩きこむコードである。

•  優秀なプログラマに読まれる機会があれば、その人のコードは劇的に改善する。  (※ 効用には個人差があります)

DevLove甲子園 東日本大会 技トラック   48  

Page 49: デキるプログラマだけが知っているコードレビュー7つの秘訣(DevLove版)

今日お話した内容 1. レビューの観点を明確にすること 2. 我が身に返ることを恐れずに指摘すること 3. 何故悪いコードなのかを論理的に説明すること 4. 良いコードについて共通認識を持つこと 5. 小さい単位でレビューを繰り返すこと 6. 指摘は素直な気持ちで受け入れること 7. 指摘は人格否定でないことを理解すること

DevLove甲子園 東日本大会 技トラック   49  

Page 50: デキるプログラマだけが知っているコードレビュー7つの秘訣(DevLove版)

DevLove甲子園 東日本大会 技トラック   50  

ソニックガーデンで 一緒にはたらく仲間を募集しています!

http://www.sonicgarden.jp/jobs 転職を考えている方はコチラ!

Page 51: デキるプログラマだけが知っているコードレビュー7つの秘訣(DevLove版)

DevLove甲子園 東日本大会 技トラック   51  

一緒に納品のない受託開発をしてくれる 仲間も募集しています!

http://www.sonicgarden.jp/guild

•  既に立ち上げている会社の事業として「納品のない受託開発」を検討している方

•  フリーランスの仕事の一つとして「納品のない受託開発」に興味のある方

上記に当てはまる方は下記のURLにアクセス!

Page 52: デキるプログラマだけが知っているコードレビュー7つの秘訣(DevLove版)

DevLove甲子園 東日本大会 技トラック   52  

SonicGarden Study Ustreamでテクニカルな情報を配信しています。

コードレビューの心技体の続き、 技と体を次回以降配信する予定です。 次回は9月中旬を予定。見てね! http://sonicgarden.doorkeeper.jp/

Page 53: デキるプログラマだけが知っているコードレビュー7つの秘訣(DevLove版)

DevLove甲子園 東日本大会 技トラック  

ご静聴ありがとうございました! 53