Slide 1

Slide 1 text

© - BASE, Inc. 社内勉強会で OOPと CleanArchitectureと DDDを 勉強し始めたというお話 川島 慧 / BASE, Inc. / / PHPカンファレンス沖縄

Slide 2

Slide 2 text

© - BASE, Inc. Product Division 川島 慧 @nazonohito

Slide 3

Slide 3 text

© - BASE, Inc. これは何? • 社内で勉強会とか始めた話 • 何持ち帰れるの? • 弊社のOOP/CleanArchitecture/DDDに対する学習アプローチ と勉強会を設計について考えたことを共有 • OOP/CleanArchitecture/DDDそのものについては話しません • 開催して間もないため結果などはほとんど話せません

Slide 4

Slide 4 text

経緯

Slide 5

Slide 5 text

© - BASE, Inc. 「OOPの勉強会したい」

Slide 6

Slide 6 text

© - BASE, Inc. じゃあやるか

Slide 7

Slide 7 text

© - BASE, Inc. 翌⽇にカレンダー登録

Slide 8

Slide 8 text

© - BASE, Inc. ノープランで当⽇

Slide 9

Slide 9 text

photos by Rick Cogley https://www.flickr.com/photos/rickcogley/ 飲み会の勢いで開始

Slide 10

Slide 10 text

⽬標設定

Slide 11

Slide 11 text

© - BASE, Inc. 理論と実践をつなげる ⽬標

Slide 12

Slide 12 text

© - BASE, Inc. 経緯 • 今年のはじめにオブジェクト 指向設計読書会をやっていた

Slide 13

Slide 13 text

© - BASE, Inc. 業務で使うイメージがわかない (⼀部の)参加者の感想

Slide 14

Slide 14 text

© - BASE, Inc. オブジェクト指向設計実践ガイド • 単⼀責任のクラスを設計する • 依存関係を管理する • 柔軟なインターフェースを作る • ダックタイピングでコストを削減する • 継承によって振る舞いを獲得する • その他

Slide 15

Slide 15 text

© - BASE, Inc. 参加者の感想 • クラスとその依存関係の管理という話の中から実 Webサービスのどこにどう当てはめれば良いのかイ メージがわかなかった • 特にCakePHP には適⽤が難しい • ライブラリを作るときくらいにしか使えなさそう

Slide 16

Slide 16 text

© - BASE, Inc. ⾃分の感想 • 以前からOOPを頑張って実践していた(つもりの) ⾃分からすると有⽤だと分かっていた • だけど実Webサービスに適⽤するにはもっと多くの パーツが必要になることも分かっていた(OOPだけ でも勉強⼤変なのにね

Slide 17

Slide 17 text

じゃあOOPを実践した 開発ってやつをしてみよう

Slide 18

Slide 18 text

OOPだけで実際の開発は語れない 開発に必要なもの OOP

Slide 19

Slide 19 text

© - BASE, Inc. たくさんのものに繋がっている CleanArchitecture XP TDD パタン‧ランゲージ DDD デザインパターン OOP リファクタリング マイクロサービス

Slide 20

Slide 20 text

おすすめ!!

Slide 21

Slide 21 text

© - BASE, Inc. 動くシステムが出来るまでに必要なのはここらへんっぽい • ドメインとコードを関係付ける、ドメインを把握す る(DDD、ユースケース駆動) • ドメインモデルを技術的関⼼事から隔離する (CleanArchitecture) • ドメインモデルをコードに落とし込む(OOP、デザ インパターン)

Slide 22

Slide 22 text

どれも勉強するめっちゃ⼤変

Slide 23

Slide 23 text

でもまあ全部やるか

Slide 24

Slide 24 text

photos by Rick Cogley https://www.flickr.com/photos/rickcogley/ 飲み会の勢い

Slide 25

Slide 25 text

© - BASE, Inc. とは⾔え、 • 元々個⼈で勉強してる⼈が3⼈いた ࣗশOOPࢥय़ظ ʮũţŪŸŕŧŒţŝũƄţ…ʢ๮ಡΈʣʯ ʮCleanArchitectureԿ΋Θ͔ΒΜʯ

Slide 26

Slide 26 text

© - BASE, Inc. ⼈がたくさん集まると、知識も集まる • ⼀⼈ひとりが部分領域をカバーしあえば、全体としてある程 度の網羅率が獲得できる • 完璧でなくて良い • OOPだけでは語れない現実の開発を、語れるだけの知識を ⽤いて具体的な開発を1回やってみるという内容なので、広く て薄い感じで良い • 輪読会してから実践だといつ終わるか分からない

Slide 27

Slide 27 text

Done is better than perfect.

Slide 28

Slide 28 text

© - BASE, Inc. 5⼈で開始 @hgsgtk @fumikony @tenkoma @nazonohito @fuubit

Slide 29

Slide 29 text

photos by Rick Cogley https://www.flickr.com/photos/rickcogley/ 飲み会の勢い

Slide 30

Slide 30 text

勉強の題材

Slide 31

Slide 31 text

© - BASE, Inc. 勉強の題材 • アジャイルソフトウェア開発 の奥義 • 18章「給与システムのケース スタディ」

Slide 32

Slide 32 text

© - BASE, Inc. • 給与システムのケーススタディ • システム開発の例題として、給与システムの要件と ユースケースが書かれている章 • 本当はその後の章でデザインパターンを使って実装 するための題材 • 要件定義やらユースケース分析などをスキップして いきなり開発をスタートできそうだった

Slide 33

Slide 33 text

© - BASE, Inc. 要件(というかユーザストーリー) • 従業員の⼀部は時給である。彼らの給与は、従業員レコードが持つフィールド項⽬の ⼀つに登録されている時給をベースに⽀払われる。給与は毎週⾦曜⽇に⽀払われる。 • 従業員の⼀部は固定給である。彼らの給与は⽉末に⽀払われる。⽉給の額は、従業員 レコードのフィールド項⽬の⼀つである。 • 固定給の従業員の⼀部は、営業成績に応じて成功報酬を受ける。彼らは、売上⽇と 売上⾦額を記録したレシートを提出しなければならない。成功報酬額は、彼らの従業 員レコードのフィールド項⽬の⼀つに登録されている。彼らの給与は隔週⾦曜⽇に⽀ 払われる。 • ………(続く)

Slide 34

Slide 34 text

© - BASE, Inc. ユースケース • 新しい従業員を追加する • 従業員を削除する • タイムカードの処理を要請する • 売上レシートの処理を要請する • 組合サービス料の処理を要請する • 従業員レコードの詳細を変更する(例:時給や組合費) • 当⽇の給与⽀払い処理を⾛らせる

Slide 35

Slide 35 text

© - BASE, Inc. ユースケース1:従業員を追加する AddEmpトランザクションは新しい従業員を追加する。このトランザクションには必 ず従業員(Employee)の「登録ID(EmpID)」、「名前(name)」、「住所 (address)」が含まれる。このトランザクションには下記に⽰す3つの形式がある: 別記1:トランザクションが正しい形式で記述されていない場合 トランザクションが正しい形式で記述されていない場合は、エラーメッセージを吐き 出す。エラーメッセージを出⼒するだけで、何も処理は⾏わない。 AddEmp “” “
” H AddEmp “” “
” S AddEmp “” “
” C

Slide 36

Slide 36 text

ドメインモデリング

Slide 37

Slide 37 text

© - BASE, Inc. 付箋紙を使ったドメインモデリング

Slide 38

Slide 38 text

© - BASE, Inc. ユースケース記述

Slide 39

Slide 39 text

© - BASE, Inc. ⼯夫したこと • ドメインモデリングのやり⽅はわりと⼿探り • ドメインモデルがどうコードに繋がっていくかを最 短でイメージできるように1ユースケースの実装を最 優先とした • 実装とモデリングを何往復もする覚悟は済ませた

Slide 40

Slide 40 text

photos by Woody Zuill https://www.agilealliance.org/resources/experience-reports/mob-programming-agile2014/ モブプログラミング

Slide 41

Slide 41 text

© - BASE, Inc. モブプログラミングとは • Hunter Industies社で実施されていた取り組み • 3⼈以上で⾏うペアプログラミングみたいなもの

Slide 42

Slide 42 text

© - BASE, Inc. 参加者のロール • タイピストの役割 • モブがしてくれと頼んだことを理解すること • モブを信頼し、⾃分では試さないことも試す • モブの役割 • 問題解決につながる論理的ステップを⾒つける⼒になること • モブ全体の理解の⽔準を上げるため貢献すること

Slide 43

Slide 43 text

先⾏して勉強してたモブが、 その知識の活⽤場所を ⾒つけた場合は、 積極的に⾔語化してもらう

Slide 44

Slide 44 text

⾔語化

Slide 45

Slide 45 text

© - BASE, Inc. ⼈は⾔語にできる以上のことを知っている • 物理化学者で哲学者のMichael Polanyi⽈く、⼈は 語れる以上のことを知っている 引⽤元:エンジニアの知的⽣産術

Slide 46

Slide 46 text

© - BASE, Inc. 抽象的で分かりづらい本

Slide 47

Slide 47 text

© - BASE, Inc. 曖昧で点と点でしか無い理解 Specificationύλʔϯ υϝΠϯϞσϧ Entity ValueObject ڥք͚ͮΒΕͨ ίϯςΩετ ⾔語化出来ない ⾔語化出来る Repositoryύλʔϯ ϢϏΩλεݴޠ

Slide 48

Slide 48 text

© - BASE, Inc. やりたいこと • 先⾏して勉強していた⼈の学びをより深める機会に したい • それ以外の⼈も学びのスタート地点に⽴てるような 学習をしたい

Slide 49

Slide 49 text

最も効率的な勉強⽅法は、 ⼈に教えること

Slide 50

Slide 50 text

© - BASE, Inc. ⾔語化し、⼈に教える • ⼈に教えることで⾔語化が強制される • ⾔語化によって以下の効果が期待できる • ⾃分の知識を体系的に整理 • ⾜りなかった知識の発⾒ • 他の⼈からフィードバックがもらえる =>より深い理解へ

Slide 51

Slide 51 text

© - BASE, Inc. 教えられた⼈は • おそらく⾔語化されてもそんなに理解できない • 書籍だけでも難しい概念なので • しかし⽬の前には具象となるコードもあるので、コードと のセットによってある程度の理解が出来る • @nrslibさんのボトムアップDDDに近いアプローチ • 本を読んでなくてもこれまでの⾃分の経験と整合性のある 知識に出会えると感動する(かも)

Slide 52

Slide 52 text

© - BASE, Inc. 学びのプロセス • 情報収集‧モデル化‧検証の繰り返し 引⽤元:エンジニアの知的⽣産術

Slide 53

Slide 53 text

© - BASE, Inc. 学びのサイクル 情報収集‧体験 抽象化‧モデル化‧パターンの発⾒ 実践検証 モデル構築 (≒⾃分の中の期待) 体験 書籍 モデル 現実

Slide 54

Slide 54 text

© - BASE, Inc. 参加者のこれまでの課題と解決 • 先⾏して勉強していた⼈:書籍を通してモデルは出来上がりつつある が、検証されていないため正しさを証明できなかった • それ以外の⼈:書籍を通してもハッキリとしたモデルを脳内に作れな かった =>検証されることで次の学習ステップへ進める =>具体的なコード+⾔語による情報収集から 精度の⾼いモデル構築

Slide 55

Slide 55 text

参加者の感想

Slide 56

Slide 56 text

© - BASE, Inc. 参加者の感想 メンバーと共通の⾔語や知識ができたのでよかったです。 ずっとひとりでやっていたので、学ぶ過程で得られる知識の多さや、 気付きの多さに感動しています。 ⾃分の知識を伝えたり、伝えることで、知識が深まったりしてよいです。 参加者各⼈の⾔語化をフックに、⾃分の中で違う概念とつながり、「あっということはあれはこ う考えられるのでは」という思考の深みを掘り下げる機会になりました。 ⾔語化した結果を踏まえて、実際のコードベース内でOOPを実践しました。CakePHP の中でや るのはそれなりにフレームワークといかに付き合う必要があるかという考えを深めるきっかけに もなりよかったです ひとの操作を⾒るのはおもろい 仕事でアプリケーション開発したことがほとんどないので、ドメインモデリングみたいなことを 考えたことがそもそもないな みんなの⾔語化能⼒が⾼い ※SRE

Slide 57

Slide 57 text

モブプロ駆動学習

Slide 58

Slide 58 text

© - BASE, Inc. モブプロ駆動学習(造語) • みんなで同じコードに向き合う • コードが問題に衝突するたび書籍の知識を使⽤し、 参加者の学習のサイクルが回る • 先⾏者は⾔語化とコーディングによるモデル検証 • それ以外の⼈はコードとセットになった情報収集と モデル化が促進される

Slide 59

Slide 59 text

© - BASE, Inc. 課題 • 先⾏者ばかりが話をしてしまうことが多い • スケールしない(たぶん5⼈までが限界) • たぶんその分野である程度学習済みの⼈がいないと 成⽴しない

Slide 60

Slide 60 text

© - BASE, Inc. 課題 • 参加者が互いに信頼してないと成⽴しない(重要) • 曖昧な知識のまま実践している、という前提でやって いるのでお互い技術的な弱みを⾒せあっている状態 • ⼈の気持ちや状況を汲み取らない⼈が仮に1⼈いるとし たら、それだけ全てが根本から崩壊してしまう • 今はいません

Slide 61

Slide 61 text

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

Slide 62

Slide 62 text

We are hiring!!!