Slide 1

Slide 1 text

大切な名前 introduction 公開版 株式会社インフィニットループ仙台支社 中野 明

Slide 2

Slide 2 text

もくじ 1. 自己紹介 2. テーマ 3. ダメコードとは 4. コードを読む 5. 命名 6. 最後に 7. 予定 8. 会社より

Slide 3

Slide 3 text

1. 自己紹介 名前 : 中野 明 現在 所属 : インフィニットループ仙台支社 (1 年 ) 業務 : スマホゲーのサーバ開発 (PHP) 過去 業務 : ゲーム開発 (10 年 ) コンシューマ・スマホ・ガラケー 趣味 お菓子づくり、レザークラフト 最近ボビンレース始めました

Slide 4

Slide 4 text

2. テーマ テーマ「大切な名前」

Slide 5

Slide 5 text

2. テーマ テーマ「大切な名前」 ● レビューで名前を指定することが多い ( 若干過剰 ) ● なぜ、自分がそこにこだわるのか整理したい

Slide 6

Slide 6 text

2. テーマ テーマ「大切な名前」 ● レビューで名前を指定することが多い ( 若干過剰 ) ● なぜ、自分がそこにこだわるのか整理したい 「俺は間違ってない!」と叫びたい

Slide 7

Slide 7 text

2. テーマ テーマ「大切な名前」 ● レビューで名前を指定することが多い ( 若干過剰 ) ● なぜ、自分がそこにこだわるのか整理したい 「俺は間違ってない!」と叫びたい 今回はテーマ説明のみです

Slide 8

Slide 8 text

3. ダメコードとは ところで… ● いわゆるダメコードに出会ったことがある?

Slide 9

Slide 9 text

3. ダメコードとは ところで… ● いわゆるダメコードに出会ったことがある? ● 自分のコードはまずまず?

Slide 10

Slide 10 text

3. ダメコードとは ところで… ● いわゆるダメコードに出会ったことがある? ● 自分のコードはまずまず? ● では、なぜ、ダメコードはなくならない?

Slide 11

Slide 11 text

3. ダメコードとは コードの使われ方 ● 新規 (write) ----- 以下の作業が多数 ----- ● 修正 (read, write) ● 追加 (read, write) ● 削除 (read, delete) ● レビュー (read)

Slide 12

Slide 12 text

3. ダメコードとは つまり ● 読むことの方が多い ● が、書いた時に読まれることを意識していない ➔ アウトプットを作り上げている ➔ 書いている間は良いコード ● 読まれた瞬間にダメコードが発生する

Slide 13

Slide 13 text

3. ダメコードとは つまり ● 読むことの方が多い ● が、書いた時に読まれることを意識していない ➔ アウトプットを作り上げている ➔ 書いている間は良いコード ● 読まれた瞬間にダメコードが発生する 「読まれなければどうということは無い!!」

Slide 14

Slide 14 text

3. ダメコードとは つまり ● 読むことの方が多い ● が、書いた時に読まれることを意識していない ➔ アウトプットを作り上げている ➔ 書いている間は良いコード ● 読まれた瞬間にダメコードが発生する 「読まれなければどうということは無い!!」 必ず読まれます。

Slide 15

Slide 15 text

4. コードを読む コードを読むとは ? ● 処理単位での意味の理解 ● 問題になりそうな箇所を把握する ➔ (I/O, DB, GPU, マルチスレッド ) ● 自分の処理をどこに置くか

Slide 16

Slide 16 text

4. コードを読む コードを読むとは ? ● 処理単位での意味の理解 ● 問題になりそうな箇所を把握する ➔ (I/O, DB, GPU, マルチスレッド ) ● 自分の処理をどこに置くか 行動のためのヒントを探す

Slide 17

Slide 17 text

4. コードを読む どうやってヒントを読み取るか ● 名前 ➔ 名前から処理を想像する ● クラス構造 ➔ クラスのつくりから責務を想像する ● コードブロック ➔ コードのまとまりから流れを想像する

Slide 18

Slide 18 text

4. コードを読む どうやってヒントを読み取るか ● 名前 ➔ 名前から処理を想像する ● クラス構造 ➔ クラスのつくりから責務を想像する ● コードブロック ➔ コードのまとまりから流れを想像する いろいろある!

Slide 19

Slide 19 text

5. 命名 なぜ名前か ● 一番、目につきやすい対象 ● 簡単に変えていける ● 影響範囲が少ない

Slide 20

Slide 20 text

5. 命名 なぜ名前か ● 一番、目につきやすい対象 ● 簡単に変えていける ● 影響範囲が少ない 名前の改善から次の改善がみつかる ... こともある

Slide 21

Slide 21 text

5. 命名 要は見やすければいいんでしょ ● 単純な名前つけてるよ ● bool を返すメソッドは Is でいいんでしょ ●やっていることは全部書いているよ

Slide 22

Slide 22 text

5. 命名 要は見やすければいいんでしょ ● 単純な名前つけてるよ ➔ 意味を持たない Get/Service/Manager が氾濫してません? ● bool を返すメソッドは Is でいいんでしょ ➔ そのメソッドはもっと大きなことしてません ? ●やっていることは全部書いているよ ➔ 説明過多になっていません?

Slide 23

Slide 23 text

5. 命名 要は見やすければいいんでしょ ● 単純な名前だけで構成されている Get だけで意図を表現できる? function version() { $database = DataBase::get(); $handler = $database->getHandler('environment'); $entity = $handler->getEntity(); return $entity->getVersion(); }

Slide 24

Slide 24 text

5. 命名 要は見やすければいいんでしょ ● 単純な名前だけで構成されている Get だけで意図を表現できる? function version() { $database = DataBase::instance(); $handler = $database->createHandler('environment'); $entity = $handler->fetchEntity(); return $entity->getVersion(); }

Slide 25

Slide 25 text

5. 命名 要は見やすければいいんでしょ ● 名前以上のことをやっている bool うんぬんより検証作業の意味合いが強い class Entity { private $id; public function isEnable() { return STATUS_OK === DataBase::instance() ->createHandler('entity') ->fetch($this->id) ->status(); } }

Slide 26

Slide 26 text

5. 命名 要は見やすければいいんでしょ ● 名前以上のことをやっている bool うんぬんより検証作業の意味合いが強い class Entity { private $id; public function validate() { return STATUS_OK === DataBase::instance() ->createHandler('entity') ->fetch($this->id) ->status(); } }

Slide 27

Slide 27 text

5. 命名 要は見やすければいいんでしょ ● やたらと説明的 ( 引数被り / 冗長 ) 引数で説明できません? function createBurgerFromBreadAndCheese( Bread $bread, Cheese $cheese ){ /* 処理いろいろ */ }

Slide 28

Slide 28 text

5. 命名 要は見やすければいいんでしょ ● やたらと説明的 ( 引数被り / 冗長 ) 引数で説明できません? function createBurger( Bread $bread, Cheese $cheese ){ /* 処理いろいろ */ }

Slide 29

Slide 29 text

5. 命名 要は見やすければいいんでしょ ● 内部ロジックの露出 モンスターの持つ処理としてメモリ解放はどうでしょう ? class Monster { private $buffer; public function freeMemory() { Memory::free($this->buffer); } }

Slide 30

Slide 30 text

5. 命名 要は見やすければいいんでしょ ● 内部ロジックの露出 モンスターの持つ処理としてメモリ解放はどうでしょう ? class Monster { private $buffer; public function destroy() { Memory::free($this->buffer); } }

Slide 31

Slide 31 text

5. 命名 いろいろな意見 ● 名前考えるのだるくて ● パッと見のまとまりを大事にしたい ● チームルールと違うしね・・・

Slide 32

Slide 32 text

5. 命名 いろいろな意見 ● 名前考えるのだるくて ➔ 変な名前だと読む方はもっとだるいので ● パッと見のまとまりを大事にしたい ➔ 違う処理まで同じに見えるのは危険 ● チームルールと違うしね・・・ ➔ 自分で一から考えてみませんか?

Slide 33

Slide 33 text

6. 最後に 本読めばいいじゃない ● リーダブルコードとか ● コードコンプリートとか ● リファクタリング本とか

Slide 34

Slide 34 text

6. 最後に 本読めばいいじゃない ● リーダブルコードとか ● コードコンプリートとか ● リファクタリング本とか いっぱい出ているということはそれだけ需要がある

Slide 35

Slide 35 text

6. 最後に 本読めばいいじゃない ● リーダブルコードとか ● コードコンプリートとか ● リファクタリング本とか いっぱい出ているということはそれだけ需要がある 自分がしゃべったっていいじゃないか !!

Slide 36

Slide 36 text

7. 予定 どんな話するの? ● 明示的な名前 ● 名前から構造をつくる ● 階層による名前の変化 ● 名前の省略

Slide 37

Slide 37 text

7. 予定 どんな話するの? ● 明示的な名前 ● 名前から構造をつくる ● 階層による名前の変化 ● 名前の省略 注 : あくまでも予定 !

Slide 38

Slide 38 text

7. 予定 どんな話するの? ● 明示的な名前 ● 名前から構造をつくる ● 階層による名前の変化 ● 名前の省略 どうぞお付き合いください !!

Slide 39

Slide 39 text

8. 会社紹介 インフィニットループ仙台支社

Slide 40

Slide 40 text

8. 会社紹介 インフィニットループ仙台支社 炊飯器が導入されました!

Slide 41

Slide 41 text

8. 会社紹介 インフィニットループ仙台支社ではプログラマを募集してい ます。ぜひお声がけください! 是非、同じ釜の飯を食いましょう!!