現場のコード意識を変えるために導入したリーダブルコードとガウディの思想...

68
現場のコード意識を 変えるために導入した リーダブルコードと ガウディの思想 1

description

現場のコード意識を変えるために導入したリーダブルコードとガウディの思想 DevLove甲子園2014 西日本大会で技2裏 http://devlove-kansai.doorkeeper.jp/events/12334 だいごろうの発表資料です。

Transcript of 現場のコード意識を変えるために導入したリーダブルコードとガウディの思想...

Page 1: 現場のコード意識を変えるために導入したリーダブルコードとガウディの思想 - DevLove甲子園2014技 -

現場のコード意識を 変えるために導入した リーダブルコードとガウディの思想

1

Page 2: 現場のコード意識を変えるために導入したリーダブルコードとガウディの思想 - DevLove甲子園2014技 -

はじめまして。

2

だいごろうと申します m(_ _)m

Page 3: 現場のコード意識を変えるために導入したリーダブルコードとガウディの思想 - DevLove甲子園2014技 -

本日は お集まりいただき

ありがとうございます ( ・∀・)ノ

3

Page 4: 現場のコード意識を変えるために導入したリーダブルコードとガウディの思想 - DevLove甲子園2014技 -

せっかく甲子園でチャレンジさせてもらえるので、

普段無いような観点から (むちゃくちゃな観点から) 面白く紹介できればと思います

4

Page 5: 現場のコード意識を変えるために導入したリーダブルコードとガウディの思想 - DevLove甲子園2014技 -

自己紹介

5

名はだいごろう 職はアプリエンジニア 歴は4年目 趣味書を読む

Page 6: 現場のコード意識を変えるために導入したリーダブルコードとガウディの思想 - DevLove甲子園2014技 -

自称

6

魔法戦士系のエンジニア

Page 7: 現場のコード意識を変えるために導入したリーダブルコードとガウディの思想 - DevLove甲子園2014技 -

どういうことかというと

7

プログラミングも楽しいし、UIも楽しいけど、インフラも楽しい、だけど、ビジネスも面白いし、統計学もかじりたい、Hadoopつかってビッグデータも解析したい. Ruby on Railsをもっと触りたいし、Responsive Web designもいいけど、dockerとVagrantで面白いことできる気がする

Page 8: 現場のコード意識を変えるために導入したリーダブルコードとガウディの思想 - DevLove甲子園2014技 -

本題

8

現場のコード意識を 変えるために導入した リーダブルコードとガウディの思想

Page 9: 現場のコード意識を変えるために導入したリーダブルコードとガウディの思想 - DevLove甲子園2014技 -

こういうことない?

9

• 現場のコードがなんか読みづらい

• 改修する時に、コードの解読

• このソース、なにを書いてるんだ??  <- コミットログは俺だった。

Page 10: 現場のコード意識を変えるために導入したリーダブルコードとガウディの思想 - DevLove甲子園2014技 -

こういうことない?

10

• 現場のコードがなんか読みづらい

• 改修する時に、コードの解読

• このソース、なにを書いてるんだ??  <- コミットログは俺だった。立ち上がれ同士よ

Page 11: 現場のコード意識を変えるために導入したリーダブルコードとガウディの思想 - DevLove甲子園2014技 -

リーダブル+ガウディ

11

+

Page 12: 現場のコード意識を変えるために導入したリーダブルコードとガウディの思想 - DevLove甲子園2014技 -

お話したいこと

12

• 現場のコード意識で変えたかったこと 1.リーダブルコードの導入 2.ガウディの思想の導入

• どうやって、導入していくか • 導入した結果(途中

Page 13: 現場のコード意識を変えるために導入したリーダブルコードとガウディの思想 - DevLove甲子園2014技 -

現場のコード意識で変えたかったこと

13

Page 14: 現場のコード意識を変えるために導入したリーダブルコードとガウディの思想 - DevLove甲子園2014技 -

リーダブルコードがおすすめだよ。

当時の俺たち

14

俺 隊

2人だしもっと効率よくコードを書きたいね。

Page 15: 現場のコード意識を変えるために導入したリーダブルコードとガウディの思想 - DevLove甲子園2014技 -

当時の俺たち

15

俺 隊 隊 隊 隊

バイブル あれ? あ、なんか、 動いた、OK

昔のコピーで変数書き換えよう

昔のレガシーだけど、無理やりやろう。

Page 16: 現場のコード意識を変えるために導入したリーダブルコードとガウディの思想 - DevLove甲子園2014技 -

当時の俺たち

16

俺 隊 隊 隊 隊

バイブル あれ? あ、なんか、 動いた、OK

昔のコピーで変数書き換えよう

昔のレガシーだけど、無理やりやろう。いくら減らしても

減らない難読コード

Page 17: 現場のコード意識を変えるために導入したリーダブルコードとガウディの思想 - DevLove甲子園2014技 -

当時の俺たち

17

• 修羅の道を決意

俺 隊 隊 隊 隊

げ、現場の意識を変えないと。。。

Page 18: 現場のコード意識を変えるために導入したリーダブルコードとガウディの思想 - DevLove甲子園2014技 -

現場のコード意識で変えたかったこと

18

• ネーミングが酷い

• 意図が見えないコード(コピーとか

• 変更部分を動くようにすればいいでしょ?っていう考え

• とりあえず動けばいいやという発想

Page 19: 現場のコード意識を変えるために導入したリーダブルコードとガウディの思想 - DevLove甲子園2014技 -

!

• とりあえず動けばいいやという発想頭の中

一番の問題はここにある

19

動く

Page 20: 現場のコード意識を変えるために導入したリーダブルコードとガウディの思想 - DevLove甲子園2014技 -

意識改革のゴール

20

• 動けばいいから、

• 読みやすいコード

• 引き継ぎ • などを考えてコードを書くことを意識

Page 21: 現場のコード意識を変えるために導入したリーダブルコードとガウディの思想 - DevLove甲子園2014技 -

ファーストステップ リーダブルコードの導入

21

簡単な

Page 22: 現場のコード意識を変えるために導入したリーダブルコードとガウディの思想 - DevLove甲子園2014技 -

コーディング中に 「動く」以外の考えることを

意識してもらおう ( ・∀・)ノ

22

Page 23: 現場のコード意識を変えるために導入したリーダブルコードとガウディの思想 - DevLove甲子園2014技 -

リーダブルコード

23

Page 24: 現場のコード意識を変えるために導入したリーダブルコードとガウディの思想 - DevLove甲子園2014技 -

リーダブルコード

24

コードは理解しやすくなければいけない

つまり 誰かが読んで理解するのに最短となる

詳細は、読んでね

Page 25: 現場のコード意識を変えるために導入したリーダブルコードとガウディの思想 - DevLove甲子園2014技 -

リーダブルコード

25

• 表面上の改善

• ループとロジックの単純化

• コードの再構成

Page 26: 現場のコード意識を変えるために導入したリーダブルコードとガウディの思想 - DevLove甲子園2014技 -

人は急に変わらない まずは、「動く」から 簡単でいいので

別のことも考えるという ステップ

26

Page 27: 現場のコード意識を変えるために導入したリーダブルコードとガウディの思想 - DevLove甲子園2014技 -

コーディング中に考えることを増やす

27

• 1つずつ埋め込んでいく

動く

可読性俺

シンプル

ネーミング

コメント

Page 28: 現場のコード意識を変えるために導入したリーダブルコードとガウディの思想 - DevLove甲子園2014技 -

リーダブルを導入する

28

• 簡単なことから意識してもらう

• 表面上の改善

– ネーミング

– シンプル・ショート

– コメントにコード書いた人の考え

Page 29: 現場のコード意識を変えるために導入したリーダブルコードとガウディの思想 - DevLove甲子園2014技 -

ネーミング

29

• 変数・メソッドのネーミング

Page 30: 現場のコード意識を変えるために導入したリーダブルコードとガウディの思想 - DevLove甲子園2014技 -

シンプル・ショート

30

• 1ロジックずつ分割

Page 31: 現場のコード意識を変えるために導入したリーダブルコードとガウディの思想 - DevLove甲子園2014技 -

コメント

31

• 書いた時の考え

Page 32: 現場のコード意識を変えるために導入したリーダブルコードとガウディの思想 - DevLove甲子園2014技 -

コーディング中に考えることを増やす

32

• 脳のストレッチを進める

• 楽しくなる?

動く

可読性

シンプル

ネーミング コメント

Page 33: 現場のコード意識を変えるために導入したリーダブルコードとガウディの思想 - DevLove甲子園2014技 -

セカンドステップ ガウディの思想の導入

33

Page 34: 現場のコード意識を変えるために導入したリーダブルコードとガウディの思想 - DevLove甲子園2014技 -

ガウディの思想って そもそもなんやねん

(; ・`д・´)

34

Page 35: 現場のコード意識を変えるために導入したリーダブルコードとガウディの思想 - DevLove甲子園2014技 -

サグラダ・ファミリアの不幸

35

・ガウディの事故死 ・模型、設計書の損失

Page 36: 現場のコード意識を変えるために導入したリーダブルコードとガウディの思想 - DevLove甲子園2014技 -

でも、 サグラダ・ファミリアは 建築が続いている

36

Page 37: 現場のコード意識を変えるために導入したリーダブルコードとガウディの思想 - DevLove甲子園2014技 -

ここに引き継ぎのヒントがあるはず!

(゚д゚)!

37

Page 38: 現場のコード意識を変えるために導入したリーダブルコードとガウディの思想 - DevLove甲子園2014技 -

コーディング中に考えることを増やす

38

• 引き継ぎを考えよう

動く

可読性

シンプル

ネーミング コメント

引き継ぎ

Page 39: 現場のコード意識を変えるために導入したリーダブルコードとガウディの思想 - DevLove甲子園2014技 -

ガウディの思想の導入

39

• 設計書より、小さな模型で説明する • 設計書ではなく設計思想を残す

Page 40: 現場のコード意識を変えるために導入したリーダブルコードとガウディの思想 - DevLove甲子園2014技 -

ガウディの建築

40

• 設計書より模型(実物)

• 模型(仕様)は常に変わり続ける

• 変化することを前提とした構築

Page 41: 現場のコード意識を変えるために導入したリーダブルコードとガウディの思想 - DevLove甲子園2014技 -

ガウディの建築

41

• 設計書より模型(実物)

• 模型(仕様)は常に変わり続ける

• 変化することを前提とした構築アジャイルじゃない?

Page 42: 現場のコード意識を変えるために導入したリーダブルコードとガウディの思想 - DevLove甲子園2014技 -

小さな模型で説明する

42

• 図面ではなく、1/25くらいの模型で職人に説明し、理解させていた。その方がはるかに伝わったから。

Page 43: 現場のコード意識を変えるために導入したリーダブルコードとガウディの思想 - DevLove甲子園2014技 -

現場に)小さな模型で説明する

43

• 簡単に実装を書いて説明しあう

• 簡単で良い

• 全体像を意識

Page 44: 現場のコード意識を変えるために導入したリーダブルコードとガウディの思想 - DevLove甲子園2014技 -

現場に)小さな模型で説明する

44

• 簡単に実装を書いて説明しあう

• 簡単で良い

• 全体像を意識

自分と相手の理解が統一でき 統一されたコードを書くことができる

Page 45: 現場のコード意識を変えるために導入したリーダブルコードとガウディの思想 - DevLove甲子園2014技 -

設計思想を残す

45

• 雨が当たる部分には石とレンガを使え

• 建材は特に指定しない

• 建築手法などで良い物があれば試行して、よければ採用してもよい(実際、途中から鉄筋コンクリートが導入されている

Page 46: 現場のコード意識を変えるために導入したリーダブルコードとガウディの思想 - DevLove甲子園2014技 -

現場に)設計思想を残す

46

• コメントに設計思想を残す

Page 47: 現場のコード意識を変えるために導入したリーダブルコードとガウディの思想 - DevLove甲子園2014技 -

現場に)設計思想を残す

47

• コメントに設計思想を残す

明日から、俺がいなくても 大丈夫だ(゚д゚)!

Page 48: 現場のコード意識を変えるために導入したリーダブルコードとガウディの思想 - DevLove甲子園2014技 -

コーディング中に考えることを増やす

48

• 読みやすく

• 引き継ぎやすい

動く

可読性

シンプル

ネーミング コメント

引き継ぎ

Page 49: 現場のコード意識を変えるために導入したリーダブルコードとガウディの思想 - DevLove甲子園2014技 -

お話したいこと

49

• 現場のコード意識で変えたかったこと 1.リーダブルコードの導入 2.ガウディの思想の導入

• どうやって、導入していくか • 導入した結果(途中

Page 50: 現場のコード意識を変えるために導入したリーダブルコードとガウディの思想 - DevLove甲子園2014技 -

導入するためにやったこと

50

• 自分でやってみる • コードレビューで指摘してみる • ペアプロをしてみる • 隣のプログラマに聞いてみる

Page 51: 現場のコード意識を変えるために導入したリーダブルコードとガウディの思想 - DevLove甲子園2014技 -

• コメントを意識して残す • 手本を残すような気持ちで書く

自分でやってみる

51

Page 52: 現場のコード意識を変えるために導入したリーダブルコードとガウディの思想 - DevLove甲子園2014技 -

コードレビューで指摘してみる

52

• 口頭の説明が必要なら、そこにはコメントが必要なはず

• 違和感のある変数名とメソッド名は、理解のじゃまになる

Page 53: 現場のコード意識を変えるために導入したリーダブルコードとガウディの思想 - DevLove甲子園2014技 -

ペアプロしてみる

53

• 名前付けとか、構造の作成を二人で討論しながら決めてもらう

• なぜを説明できるまで討論する • 簡単な模型 • 短時間で良い

Page 54: 現場のコード意識を変えるために導入したリーダブルコードとガウディの思想 - DevLove甲子園2014技 -

隣のプログラマに聞いてみる

54

• メソッドのコメントだけでどんなメソッドだと思うのか聞いてみる

• 間違った答えならば、6か月後の自分は同じ結果となる

Page 55: 現場のコード意識を変えるために導入したリーダブルコードとガウディの思想 - DevLove甲子園2014技 -

お話したいこと

55

• 現場のコード意識で変えたかったこと 1.リーダブルコードの導入 2.ガウディの思想の導入

• どうやって、導入していくか • 導入した結果(途中

Page 56: 現場のコード意識を変えるために導入したリーダブルコードとガウディの思想 - DevLove甲子園2014技 -

結果(途中報告

56

Page 57: 現場のコード意識を変えるために導入したリーダブルコードとガウディの思想 - DevLove甲子園2014技 -

コードの意識はどうなった?

57

• ネーミングと共にやることが明確に。 • 自分が何を書いているのか明確に。 • どこにそのコードは置くか意識するように。 • コードの説明をする機会が減った。 • 逆に、レビューのときに動作の不備を見落とす傾向がある。注意が必要。

• やり方の導入者の意見が正となりがちになってしまう

Page 58: 現場のコード意識を変えるために導入したリーダブルコードとガウディの思想 - DevLove甲子園2014技 -

次は?

58

• メンバーに求めるもの • 本を書くようなコードを書くこと • コード設計をもっと詳しく説明

• 課題 • 継続するための環境と仕組み作り

Page 59: 現場のコード意識を変えるために導入したリーダブルコードとガウディの思想 - DevLove甲子園2014技 -

まとめ

59

Page 60: 現場のコード意識を変えるために導入したリーダブルコードとガウディの思想 - DevLove甲子園2014技 -

現場のコード意識を 変えるために導入した リーダブルコードとガウディの思想

60

Page 61: 現場のコード意識を変えるために導入したリーダブルコードとガウディの思想 - DevLove甲子園2014技 -

お話したいこと

61

• 現場のコード意識で変えたかったこと 1.リーダブルコードの導入 2.ガウディの思想の導入

• どうやって、導入していくか • 導入した結果(途中

Page 62: 現場のコード意識を変えるために導入したリーダブルコードとガウディの思想 - DevLove甲子園2014技 -

意識改革のゴール

62

• 動けばいいから、

• 読みやすいコード

• 引き継ぎ • などを考えてコードを書くことを意識

Page 63: 現場のコード意識を変えるために導入したリーダブルコードとガウディの思想 - DevLove甲子園2014技 -

リーダブルを導入する

63

• 簡単なことから意識してもらう

• 表面上の改善

– ネーミング

– シンプル・ショート

– コメントにコード書いた人の考え

Page 64: 現場のコード意識を変えるために導入したリーダブルコードとガウディの思想 - DevLove甲子園2014技 -

ガウディの思想の導入

64

• 設計書より、小さな模型で説明する • 設計書ではなく設計思想を残す

Page 65: 現場のコード意識を変えるために導入したリーダブルコードとガウディの思想 - DevLove甲子園2014技 -

導入するためにやったこと

65

• 自分でやってみる • コードレビューで指摘してみる • ペアプロをしてみる • 隣のプログラマに聞いてみる

Page 66: 現場のコード意識を変えるために導入したリーダブルコードとガウディの思想 - DevLove甲子園2014技 -

コードの意識はどうなった?

66

• ネーミングと共にやることが明確に。 • 自分が何を書いているのか明確に。 • どこにそのコードは置くか意識。 • コードの説明をする機会が減った • 逆に、レビューのときに動作の不備を見落とす傾向がある。注意が必要。

• やり方の導入者の意見が正となりがちになってしまう

Page 67: 現場のコード意識を変えるために導入したリーダブルコードとガウディの思想 - DevLove甲子園2014技 -

さいごに

67

Page 68: 現場のコード意識を変えるために導入したリーダブルコードとガウディの思想 - DevLove甲子園2014技 -

良いコードは

68

• より多くのビジネスチャンスを掴み

• ヒューマンエラーを少なくし

• 特定の人の存在に依存しなくなり

• 次の世代への、最高の教科書になる