Slide 1

Slide 1 text

初めてのプロジェクト参加とDIの話 株式会社 FABRIC TOKYO システム開発部 真嶋

Slide 2

Slide 2 text

Fabric Tokyo inc All rights reserved . 自己紹介 名前: 真嶋 汐美(マシマ シオミ) 経歴: 長崎造船所の工事担当    ↓ 2019/5~ FABRIC TOKYO サーバーサイドエンジニア 最近始めたこと: ヨガ(4回) 山登り(3回) laravel(5ヶ月) 勉強会参加(初)←new! LT登壇(初)←new!

Slide 3

Slide 3 text

Fabric Tokyo inc All rights reserved . FABRIC TOKYOの新サービス「FABRIC TOKYO 100」!

Slide 4

Slide 4 text

遡ること2ヶ月前

Slide 5

Slide 5 text

「FABRIC TOKYO100のマイページ周辺の 処理を作っておいて。」

Slide 6

Slide 6 text

「あ、そうそう。 他の処理と合わせてDIで実装してね」

Slide 7

Slide 7 text

「(DI?)」

Slide 8

Slide 8 text

Fabric Tokyo inc All rights reserved . まずはDIについて勉強してみた。

Slide 9

Slide 9 text

DIってなんだ? ※Dependency Injection(訳:依存性の注入)

Slide 10

Slide 10 text

車で例えてみた

Slide 11

Slide 11 text

Fabric Tokyo inc All rights reserved . DIを使用しない設計パターン マツダのエンジン 他の作業ができないので困っ た。 もっと良いエンジン見つけたけ れど、工数ばかり増えて困った

Slide 12

Slide 12 text

Fabric Tokyo inc All rights reserved . DIを使用しない設計パターン 依存

Slide 13

Slide 13 text

Fabric Tokyo inc All rights reserved . DIを使用してみる エンジン 載せるところ 搭載 仕様 エンジンのことを気にせず作 業を進められるよ いらすとや製 エンジン マツダ製 エンジン

Slide 14

Slide 14 text

DIとは クラスやメソッド内で利用する機能を 外部から渡す設計パターンのこと

Slide 15

Slide 15 text

Fabric Tokyo inc All rights reserved . DI で実装してみる 継承 UserService クラス コンストラクタ 引数:SenderInterfaceのインスタンス SenderInterface インターフェイス  メソッド send MailSender クラス  メソッド send メール送信処理 引数としてインスタンスを渡す 注入

Slide 16

Slide 16 text

Fabric Tokyo inc All rights reserved . UserService クラス コンストラクタ 引数:MailSenderInterfaceのインスタンス MailSender クラス SenderInterface インターフェイス

Slide 17

Slide 17 text

Fabric Tokyo inc All rights reserved . UserServiceクラスを使用するには Controllers/UserServiceController.php Providers/AppServiceProvider.php

Slide 18

Slide 18 text

Fabric Tokyo inc All rights reserved . DI で実装するメリット①: Senderクラスの進捗に関わらず、 UserServiceクラスの実装を進めることができる! (車の場合:エンジンの進捗に関わらず、自動車の他の部分の実装ができる)

Slide 19

Slide 19 text

Fabric Tokyo inc All rights reserved . UserService クラス コンストラクタ 引数:MailSenderInterfaceのインスタンス MailSender クラス SenderInterface インターフェイス Mailを送信する処理を他の人に 頼んだり、あとから実装できる

Slide 20

Slide 20 text

Fabric Tokyo inc All rights reserved . DI で実装するメリット② 急な変更にも対応しやすい! (車の場合:いらすとや製エンジンからマツダ製エンジンに変更できる。)

Slide 21

Slide 21 text

Fabric Tokyo inc All rights reserved . SlackSender クラス MailSenderInterfaceのモックを渡 してやれば良いので実際にメール は送信されない。 Providers/AppServiceProvider.php

Slide 22

Slide 22 text

Fabric Tokyo inc All rights reserved . DI で実装するメリット③ テストが簡単! (車の場合:エンジンの検査と車の検査を切り離して実施することができて簡単。)

Slide 23

Slide 23 text

Fabric Tokyo inc All rights reserved . UserService クラス コンストラクタ 引数:MailSenderInterfaceのインスタンス MailSender クラス SenderInterface インターフェイス 進捗を気にせず、UserServiceク ラスのテストを作成できる! MailSenderInterfaceのモックを渡 してやれば良いので実際にメール は送信されない。

Slide 24

Slide 24 text

Fabric Tokyo inc All rights reserved . まとめ DIで実装するのは少し大変だったけど、 機能を変更するときは便利だし、 テストも楽になるし、 作業も分担しやすいし、 いいことばかりだった。 DIを勉強してよかった!

Slide 25

Slide 25 text

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

Slide 26

Slide 26 text

Fabric Tokyo inc All rights reserved . おまけ

Slide 27

Slide 27 text

Fabric Tokyo inc All rights reserved . DIを使用しない実装方法 UserServiceクラスのメソッドnotice →MailSenderクラスをインスタンス化 →sendメソッド呼び出し