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

  • View
    19.058

  • Download
    0

  • Category

    Software

Preview:

DESCRIPTION

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

Citation preview

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

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

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

西見 公宏 Nishimi Masahiro

2  

自己紹介

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

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

3  

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

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

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

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

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

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

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

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

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

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

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

今日お話する内容

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

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

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

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

9  

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

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

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

10  

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

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

11  

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

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

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

12  

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

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

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

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

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

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

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

例  def  checkadmin?        if  session[:login].admin  then          return  true        else          redirect_to  '/members/'  +  session[:login].id.to_s          return  false        end      end

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

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

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

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

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

16  

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

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

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

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

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

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

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

19  

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

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

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

ならば

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

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

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

優れたプログラマ

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

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

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

限界の壁

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

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

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

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

ただし・・・

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

・・・

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

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

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

より効果を上げるために

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

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

コードレビューの心技体

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

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

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

27  

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

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

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

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

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

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

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

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

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

HOUND CI

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ディスカッションの差分

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

まとめ

46  

今日お話した内容

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

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

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

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

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

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

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

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

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

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

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

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

http://www.sonicgarden.jp/guild

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

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

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

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

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

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

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

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