Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

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

48,353 views

Published on

DevLove甲子園 東日本大会でお話した内容です。
http://devlove.doorkeeper.jp/events/11792

-----
優れたプログラマだけが優れたソースコードを書くことができます。

では優れたプログラマになるにはどうすれば良いでしょうか。

自分の書いたコードを、優れたプログラマに指摘してもらうことが一番の近道です。それがコードレビューです。たった一人でコードレビューも受けずに、ただ書き続けてもクソコードはクソコードのままなのです。

そこで今回は、良いコードが書けるプログラマになるための、コードレビューを上手に実践する秘訣を話します。

Published in: Software
  • Be the first to comment

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

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

×