SonicGarden	
  Study	
  11	
  #sg_study	
  
いつまでクソコードを
書き続けるの?
デキるプログラマだけが知っている
コードレビュー7つの秘訣
ソニックガーデン 西見 公宏
1	
  
SonicGarden	
  Study	
  11	
  #sg_study	
  
西見 公宏
Nishimi Masahiro
2	
  
自己紹介
SonicGarden	
  Study	
  11	
  #sg_study	
  
西見 公宏 Masahiro Nishimi
@mah_lab
昭和58年生まれ 東京育ち
2児(双子)の父親です
3	
  
今日お話する内容
1. クソコードとは何か?
2. 優れたプログラマとは何か?
3. コードレビューが改善の近道
4. コードレビュー7つの秘訣
SonicGarden	
  Study	
  11	
  #sg_study	
   4	
  
SonicGarden	
  Study	
  11	
  #sg_study	
  
1. クソコードとは何か?
5	
  
SonicGarden	
  Study	
  11	
  #sg_study	
  
「クソコード」とは・・・
6	
  
SonicGarden	
  Study	
  11	
  #sg_study	
  
「クソコード」とは・・・
読む人を怒りの渦に
叩きこむコードである
7	
  
つまり
•  「クソコード」とは読んだ人の怒りを体
現した言葉である。
SonicGarden	
  Study	
  11	
  #sg_study	
   8	
  
クソコード3つの特徴
1. 読めないコード
–  変数名が暗号/制御フローが無駄に複雑/メソッド名と処理の
内容が合ってない etc...
2. 要領の悪いコード
–  言語レベルで用意されている機能を素直に使わない(例:Go
を使っているのにゴルーチンを使わない) etc...
3. 意図がわからないコード
–  フレームワークのレールに従っていない etc...
SonicGarden	
  Study	
  11	
  #sg_study	
   9	
  
クソコードかどうかは
読まれるまで分からない
•  シュレディンガーの猫
•  読んだ人の当事者感によって度合いが変わ
る(例:「え、このコード、俺がメンテするの!?」)
•  自分で読んでダメだと思うなら、最初から
直して・・・。
SonicGarden	
  Study	
  11	
  #sg_study	
   10	
  
SonicGarden	
  Study	
  11	
  #sg_study	
  
2. 優れたプログラマとは何か?
11	
  
優れたプログラマ3つの特徴
1. 「読めないコード」を書かない。
–  読みやすいコードを書く。
2. 「要領の悪いコード」を書かない。
–  言語の特性を活かした要領の良いコードを書く。
3. 「意図のわからないコード」を書かない。
–  設計の意図が明確である。
SonicGarden	
  Study	
  11	
  #sg_study	
   12	
  
優れたプログラマを見極める簡単な試験
書いたコードの1行1行に対して、
以下の項目を質問する。
l どういう処理なのか?
l どういう意図で書いたのか?
SonicGarden	
  Study	
  11	
  #sg_study	
   13	
  
SonicGarden	
  Study	
  11	
  #sg_study	
  
3. コードレビューが改善の近道
14	
  
まずは読まれなければはじまらない
SonicGarden	
  Study	
  11	
  #sg_study	
   15	
  
読む人に怒りをもたらすのが
クソコード
ならば
読む人がいなくては
はじまらない
誰に読まれるのがベストか?
SonicGarden	
  Study	
  11	
  #sg_study	
   16	
  
優れたプログラマ
何故優れたプログラマが読むべきなのか?
SonicGarden	
  Study	
  11	
  #sg_study	
   17	
  
•  単純に同じレベルのプログラマが指摘しても、
指摘の内容に限界があるため。
限界の壁
優れたプログラマは限界を引き上げます
SonicGarden	
  Study	
  11	
  #sg_study	
   18	
  
•  レビューの中で小手先のテクニックに終始しない「優れ
たプログラマの考え方」を伝えていくことで、チームの
限界を引き上げていきます。
•  いくら優れたプログラマと言えども、闇雲にレビューを
するのでは効果がありません。
ただし・・・
SonicGarden	
  Study	
  11	
  #sg_study	
   19	
  
・・・
•  ソニックガーデンでも新しく入ったプログラマを教育す
る手段としてコードレビューを取り入れています。
•  その中で気付いたポイントをいくつかピックアップしま
した。
•  それが今からお伝えする「7つの秘訣」です。
より効果を上げるために
SonicGarden	
  Study	
  11	
  #sg_study	
   20	
  
SonicGarden	
  Study	
  11	
  #sg_study	
  
4. コードレビュー7つの秘訣
21	
  
1. レビューの観点を明確にすること
SonicGarden	
  Study	
  11	
  #sg_study	
   22	
  
1. レビューの観点を明確にすること
•  リリース前レビューの話なのか、コード品
質の話なのか。
•  読む側も漠然と読んで、漠然とコメントを
書くのでは効果を生まない。
– 観点を明確にしてレビューすることで指摘す
る側の精度も上がります。
SonicGarden	
  Study	
  11	
  #sg_study	
   23	
  
2. 我が身に返ることを恐れずに指摘す
ること
SonicGarden	
  Study	
  11	
  #sg_study	
   24	
  
2. 我が身に返ることを恐れずに指摘するこ
と
•  自分のことは棚に上げる!
•  鋭くツッコミを入れられないなら、レ
ビューの意味は無い。
•  指摘して自分の耳が痛いなら、自分にとっ
ても成長のチャンスだと捉える。
SonicGarden	
  Study	
  11	
  #sg_study	
   25	
  
3. 何故悪いコードなのかを論理的に
説明すること
SonicGarden	
  Study	
  11	
  #sg_study	
   26	
  
3. 何故悪いコードなのかを論理的に説明す
ること
•  「何となく汚い」は指摘ではない。
•  悪いコードだと判断したなら、相手が納
得できるように、論理的に説明する。
•  論理的に説明できないなら指摘をすべきで
はない。
SonicGarden	
  Study	
  11	
  #sg_study	
   27	
  
4. 良いコードについて共通認識を持つ
こと
SonicGarden	
  Study	
  11	
  #sg_study	
   28	
  
4. 良いコードについて共通認識を持つこと
•  コードレビューのあとに雰囲気が悪くなるの
はチームで「良いコード」の認識が揃ってい
ない証拠。
•  「良いコード」を共有することでチームとし
て成長する。
•  認識を揃えるためには、あるコードを題材に
ディスカッションの機会を設けると良い。
SonicGarden	
  Study	
  11	
  #sg_study	
   29	
  
SonicGarden	
  Study	
  11	
  #sg_study	
   30	
  
チームでディスカッションの
機会を持つ例
5. 小さい単位でレビューを繰り返すこ
と
SonicGarden	
  Study	
  11	
  #sg_study	
   31	
  
5. 小さい単位でレビューを繰り返すこと
•  大きな単位だとレビューする側もされる
側も出番が回ってきにくい。
– 機会を増やすことでみんながレビュー体験を
する/小口化することで習慣化する
•  チーム全体で誰かの書いたコードをレ
ビューするのも有効。
SonicGarden	
  Study	
  11	
  #sg_study	
   32	
  
6. 指摘は素直な気持ちで受け入れるこ
と
SonicGarden	
  Study	
  11	
  #sg_study	
   33	
  
6. 指摘は素直な気持ちで受け入れること
•  指摘を素直に受け止められないと成長で
きない。
•  受け入れた後は同じ失敗を繰り返さない。
– 漠然とコードレビューを受けて、その場はそ
の場で何とかやり過ごして、また同じ失敗を
繰り返すメンタルモデルではダメ。
SonicGarden	
  Study	
  11	
  #sg_study	
   34	
  
7. 指摘は人格否定でないことを理解す
ること
SonicGarden	
  Study	
  11	
  #sg_study	
   35	
  
7. 指摘は人格否定でないことを理解するこ
と
•  自分が一生懸命書いたコードに対して手厳
しく指摘を受けるのは辛いこと。。
•  でも、指摘するのはコードであって、あな
たの人格を否定しているわけではありませ
ん!
•  お互いに「コード」の話をしている、とい
うことを理解した上で指摘をしましょう。
SonicGarden	
  Study	
  11	
  #sg_study	
   36	
  
SonicGarden	
  Study	
  11	
  #sg_study	
  
まとめ
37	
  
今日お話した内容
1. クソコードとは何か?
2. 優れたプログラマとは何か?
3. コードレビューが改善の近道
4. コードレビュー7つの秘訣
SonicGarden	
  Study	
  11	
  #sg_study	
   38	
  
今日お話した内容
•  クソコードとは読む人を怒りの渦に叩き
こむコードである。
•  優秀なプログラマに読まれる機会があれ
ば、その人のコードは劇的に改善する。
 (※ 効用には個人差があります)
SonicGarden	
  Study	
  11	
  #sg_study	
   39	
  
今日お話した内容
1.  レビューの観点を明確にすること
2.  我が身に返ることを恐れずに指摘すること
3.  何故悪いコードなのかを論理的に説明すること
4.  良いコードについて共通認識を持つこと
5.  小さい単位でレビューを繰り返すこと
6.  指摘は素直な気持ちで受け入れること
7.  指摘は人格否定でないことを理解すること
SonicGarden	
  Study	
  11	
  #sg_study	
   40	
  
SonicGarden	
  Study	
  11	
  #sg_study	
  
ご視聴ありがとうございました!
41	
  

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