Slide 1

Slide 1 text

How to make the dependent system with Laravel Takuma Seno @ MatchinGood Inc.

Slide 2

Slide 2 text

自己紹介 妹尾卓磨 マッチングッド株式会社エンジニアアルバイト 学部3年生 普段の業務 Laravel を利用したアプリケー ション開発 フルスタックエンジニア

Slide 3

Slide 3 text

マッチングッド株式会社とは 人材紹介会社様と人材派遣会社様向けの業務管理システムを 開発しています。

Slide 4

Slide 4 text

現在稼働しているシステム MatchinGood ( レガシー) フレー ムワー クなし jQuery オンプレミス環境 WorkinGood Laravel5.3 React with TypeScript AWS

Slide 5

Slide 5 text

WorkinGood とは 今年の4月ごろから開始したサー ビス レガシー プロジェクトと比べてAWS、Docker やデプロイ自動 化などフレー ムワー クの有無以上の進化!

Slide 6

Slide 6 text

レガシー プロジェクトさよなら! と思いきや

Slide 7

Slide 7 text

WorkinGood を取り巻く環境

Slide 8

Slide 8 text

問題 レガシー プロジェクトをバックエンドに置いて通信を行う必 要がある!

Slide 9

Slide 9 text

レガシー プロジェクトをいちいち繋げる のメンドくさい!

Slide 10

Slide 10 text

解決方法 通信部分はサー ビス層として分離する ユニットテストで動作を確認する Guzzle をクライアントに利用するとテストが楽できる

Slide 11

Slide 11 text

通信部分はサー ビス層として分離

Slide 12

Slide 12 text

Guzzle とは star7800 越えのPHP 向けHttp クライアント

Slide 13

Slide 13 text

サー ビス層とGuzzle u s e G u z z l e H t t p \ C l i e n t ; c l a s s S e r v i c e { p r o t e c t e d $ c l i e n t ; p u b l i c f u n c t i o n _ _ c o n s t r u c t ( C l i e n t $ c l i e n t ) { $ t h i s - > c l i e n t = $ c l i e n t ; } p u b l i c f u n c t i o n g e t ( ) { $ r e s p o n s e = $ t h i s - > c l i e n t - > r e q u e s t ( ' G E T ' , ' / ' ) ; . / / t r a n s f o r m t h e r e s p o n s e i n t o t h e m o d e l s . r e t u r n $ m o d e l s } }

Slide 14

Slide 14 text

サー ビスの動作を確認 Guzzle はユニットテスト向けの機能が充実 $ m o c k = n e w M o c k H a n d l e r ( [ n e w R e s p o n s e ( 2 0 0 , [ ] , ' r e s p o n s e . . . ' ) ] ) ; $ h a n d l e r = H a n d l e r S t a c k : : c r e a t e ( $ m o c k ) ; $ c l i e n t = n e w C l i e n t ( [ ' h a n d l e r ' = > $ h a n d l e r ] ) ; $ s e r v i c e = n e w S e r v i c e ( $ c l i e n t ) ; $ m o d e l s = $ s e r v i c e - > g e t ( ) ; . / / c h e c k t h e r e s p o n s e . .

Slide 15

Slide 15 text

サー ビス層はコントロー ラで 使われるわけだけど コントロー ラの動作確認はどうするの?

Slide 16

Slide 16 text

コントロー ラのユニットテスト Mockery を使ってインスタンスをモックする c l a s s C o n t r o l l e r T e s t e x t e n d s T e s t C a s e { p u b l i c f u n c t i o n t e s t G e t ( ) { $ m o c k = M o c k e r y : : m o c k ( ' o v e r l o a d : A p p \ S e r v i c e ' ) ; $ m o c k - > s h o u l d R e c e i v e ( ' g e t ' ) - > a n d R e t u r n ( ' i d e a l m o d e l s ' ) ; $ t h i s - > v i s i t ( ' / s e r v i c e ' ) - > s e e J s o n ( [ / / i d e a l A P I r e s p o n s e ] ) ; } }

Slide 17

Slide 17 text

結果 レガシー プロジェクトを用意する必要がなくなった ユニットテストがしっかりした コントロー ラも含めてTDD したくなった 他の外部サー ビスとの連携でも活かせた

Slide 18

Slide 18 text

Thank you for listening!