Slide 1

Slide 1 text

オブジェクト指向×思考×試行 ムー ムー ドメイン エンジニア K osu ke N akamur a(@lit encatt) 1

Slide 2

Slide 2 text

自己紹介 所属: ホスティング事業部 ムー ムー ドメイングルー プ エンジニア 名前: K osu ke N akamur a (@lit encatt) その他: 7月生まれの R u by ist 2

Slide 3

Slide 3 text

最近やっていること インフラ業 おさいぽ! への WAF (W eb A pp licat ion F ierw all)導入 おさいぽ! の API サー バの移設 開発業 ムー ムー ドメインのカー ト統合へ向けた開発 WP ホスティングオプションの更新バッチ開発 運用業 毎月の売上差異調査の自動化へ向けた取り組み 3

Slide 4

Slide 4 text

ここから本題 4

Slide 5

Slide 5 text

皆さん OOP してますか!? 5

Slide 6

Slide 6 text

オブジェクト指向プログラミング (O bject O riented P rogramming) => オブジェクト指向設計されたコー ドを書くこと 6

Slide 7

Slide 7 text

オブジェクト指向とは? スティー ブ・ ジョブズいわく もし僕が君の洗濯屋(lau ndry)オブジェクトだとすると、 君は僕に 汚れ物を渡し、「 服を洗濯してくれ」 とメッセー ジを送ることがで きる。 たまたまサンフランシスコで一番いいクリー ニング屋がどこ かを僕は知っている …(中略) きれいになった服を君に渡して「 こちらが洗濯済みの服です」 と僕 は言う。 どうやって僕が洗濯したかは君はわからない。… 引用元: https://y akst.com/ja/p osts/3420 7

Slide 8

Slide 8 text

オブジェクト指向とは? スティー ブ・ ジョブズいわく …(続き) 君はそのやり方を知る必要はないんだ。 すべての複雑なことは僕の 中に隠されていて、 僕たちは非常に高い抽象度でやりとりができ る。 引用元: https://y akst.com/ja/p osts/3420 8

Slide 9

Slide 9 text

オブジェクト指向との出会い 僕がオブジェクト指向と出会うきっかけ R uby & R ails R u by はオブジェクト指向言語 ムー ムー ドメインの開発言語/フレー ムワー クとして採用されている つまりオブジェクト指向を学ぶ上でベストな環境 ( 大学時代に J av aを習った記憶はノー カウントとする ) 9

Slide 10

Slide 10 text

オブジェクト指向との出会い まだ僕が手続き型少年ボウイだった頃の話 ムー ムー での開発で R ails の開発をやりはじめた頃 C ontr oller 内に必要な処理全部書いちゃう少年ボウイだった 思いっきり R ailから外れた行為 10

Slide 11

Slide 11 text

オブジェクト指向との出会い そんな感じだったので… チー ムのコー ドレビュー にて 僕より OOP (O bject O r ient ed P eop le)なチー ムメンバー たち コー ドレレビュー でいろいろ設計のアドバイスもらった R ails における適切な設計とは? モデルなどへ適切に処理(ビジネスロジック)を分離させること つまりオブジェクト指向な考え方 => オブジェクト指向の重要性・ 必要性に気づいた 11

Slide 12

Slide 12 text

手続き型指向から オブジェクト指向になろう 12

Slide 13

Slide 13 text

オブジェクト思考(S tudy) 13

Slide 14

Slide 14 text

オブジェクト思考(S tudy) オブジェクト指向設計を学ぶためにやったこと オブジェクト指向設計実践ガイド S andi M etz 氏による R u by によるオブジェクト指向設計指南書 オブジェクト指向による設計について基礎から学べる 本書の例に自転車のパー ツや種類が多数出てくることでも有名? 14

Slide 15

Slide 15 text

オブジェクト指向設計実践ガイド 本の内容を一部紹介 15

Slide 16

Slide 16 text

オブジェクト指向設計実践ガイド 例) 自転車旅行会社 旅行者(C ust omer)に対して最適な自転車旅行(T r ip と B icy cle)を提供する 登場人物(クラスになりそうなものたち) 参加者 (C ust omer) 旅行 (T r ip) 自転車 (B icy cle) 工程 (R out e) 整備士 (M echanic) 16

Slide 17

Slide 17 text

ユー スケー ス例 参加者(C ust omer)は旅行(T r ip)を選ぶために、 適切な難易度かつ特定の 日付において、 自転車(B icy cle)を借りられる旅行の一覧が欲しい 17

Slide 18

Slide 18 text

ユー スケー ス例 参加者(C ust omer)は旅行(T r ip)を選ぶために、 適切な難易度かつ特定の 日付において、 自転車(B icy cle)を借りられる旅行の一覧が欲しい シー ケンス図1 18

Slide 19

Slide 19 text

最初の段階の設計(シー ケンス図1)をみると C ust omer がsu it able_tr ips メッセー ジを T r ip に対して送っている このままでも目的であった最適な旅行を見つけられるかも知れない シー ケンス図1 19

Slide 20

Slide 20 text

オブジェクト指向設計的考え方 適切な責任を請け負うのは誰か? オブジェクトではなく送るメッセー ジに目を向ける su it able_tr ips を受け取るべき相手は誰が適切なのか? C ust omer が欲しいのはいい感じの旅行一覧 シー ケンス図1では C ust omer がいろいろ知りすぎてるし、 やりすぎ ている 20

Slide 21

Slide 21 text

シー ケンス図2 おそらく T r ipF ider クラスがsu it able_st eps を受け取るべき T r ipF inder は C ust omer の代わりに T r ip や B icy cleとやり取りをして結 果を C ust omer に返してくれる シー ケンス図2 21

Slide 22

Slide 22 text

オブジェクト指向との出会い~ オブジェクト思考 まとめ オブジェクト指向を学ぶためのベストな環境にいた チー ムメンバー の OOP 力高くて自分も意識するきっかけになった 良い本にも出会えて基礎から学ぶことが出来た 22

Slide 23

Slide 23 text

オブジェクト試行(T ry) オブジェクト指向、 思考を経て取り組んだ開発について紹介します 23

Slide 24

Slide 24 text

オブジェクト試行(T ry1) ムー ムー は決済フロー をカー ト化しようとしていた ドメインを一度に複数購入できるようにしたい 新たな購入フロー を R ails で設計・ 構築しようとしていた そこでオブジェクト指向的考えをもとに購入処理や決済処理をそれ ぞれmodu le化した 24

Slide 25

Slide 25 text

購入処理や決済処理をそれぞれmodule化した 何が嬉しいのか? R u by の場合多重継承がない class にmodu leをmix‑inして使う modu le化 = 着脱可能なユニット化であり、 使いたいclass 内で inclu deすれば使用可能なコー ドになった カー ト以外にも使い回すことができる 25

Slide 26

Slide 26 text

ムー ムー は決済フロー をカー ト化しようとしていた 登場人物 U s er : ユー ザー C art : カー トモデルオブジェクト O r der able : ドメインやオプションの注文処理を扱う P ay ment able : 決済処理を扱う 26

Slide 27

Slide 27 text

カー ト化した決済フロー のシー ケンス図(略図) 27

Slide 28

Slide 28 text

オブジェクト試行(T ry2) WP ホスティングオプションの更新バッチ開発 28

Slide 29

Slide 29 text

WP ホスティングオプションの更新バッチ開発 更新バッチでやりたいことは、 昨日契約が終了した WP ホスティングオプションが入ったカー トデー タ を作り、 そのカー トの更新処理を実行する 登場人物 B at ch : 更新バッチ O pt ion : オプションモデル C art : カー トモデルオブジェクト O r der able : ドメインやオプションの注文処理を扱う P ay ment able : 決済処理を扱う 29

Slide 30

Slide 30 text

シー ケンス図 30

Slide 31

Slide 31 text

WP ホスティングオプションの更新バッチ開発 オブジェクト指向的考え方 B at chが送るメッセー ジ O pt ionへ契約終了したオプションを要求 C art へカー ト作成依頼 C art へカー トの決済依頼 それぞれが役割をいい感じにやってくれている 31

Slide 32

Slide 32 text

まとめ 32

Slide 33

Slide 33 text

まとめ オブジェクト指向(OOP )との出会い オブジェクト思考(S tu dy) オブジェクト試行(T ry1, 2) 33

Slide 34

Slide 34 text

今後のやっていき オブジェクト指向力を高めながら以下のことに挑戦していく ムー ムー の決済フロー を全てカー トへ天下統一する 各言語の V ers ion U p とメンテナンス 運用自動化を更に進める 34

Slide 35

Slide 35 text

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