Upgrade to Pro — share decks privately, control downloads, hide ads and more …

PHPのmiddlewareを 使いこなすために

PHPのmiddlewareを 使いこなすために

PHPカンファレンス仙台2019での発表資料です。
https://phpcon-sendai.net/2019/

YAMAOKA Hiroyuki

January 26, 2019
Tweet

More Decks by YAMAOKA Hiroyuki

Other Decks in Technology

Transcript

  1. 1)1ͷNJEEMFXBSFΛ
    ࢖͍͜ͳͨ͢Ίʹ
    1)1ΧϯϑΝϨϯεઋ୆

    ߹ಉձࣾςϯϚυɹࢁԬ޿޾

    View Slide

  2. ࣗݾ঺հ
    ࢁԬ޿޾[email protected]
    1)1ͱ͔/PEFKTͷΤϯδχΞ
    1)1͸ͷ͜Ζ͔Β
    ߹ಉձࣾςϯϚυ୅දࣾһ

    View Slide

  3. ɹɹ߹ಉձࣾςϯϚυ!!
    Ϗδωεࢧԉࣄۀ
    ࣾ֎$50ͱ͔ΞυόΠβʔ
    *OOPWBUPS+BQBO64&/.FEJBͳͲ
    αʔϏε։ൃࣄۀ
    JSVDBNJNFNPDPOBTV

    View Slide

  4. ࠓճͷ͓࿩ͷΰʔϧ
    NJEEMFXBSFͱ͍͏ߟ͑ํ͕Θ͔Δ
    ฉ͍ͨͱ͖ʹΠϝʔδ͕ු͔Ϳ
    ར༻γʔϯ͕૝૾Ͱ͖Δ
    ϑϨʔϜϫʔΫͰ࢖͑Δ͔Θ͔Δ

    View Slide

  5. ͓࿩Λ࢝ΊΔલʹ

    View Slide

  6. લճ·Ͱͷ͋Β͢͡
    1)1ΧϯϑΝϨϯεؔ੢
    4MJN'SBNFXPSLͰ࢝ΊΔ1)1ͷ
    NJEEMFXBSF
    1)1ΧϯϑΝϨϯε
    1)1'*(ͷ)551ॲཧඪ४ͷઃܭ
    ͸ͳͥ143ʹͳͬͨͷ͔

    View Slide

  7. Ͱ͸ɺ͋ΒͨΊͯ

    View Slide

  8. XFCΞϓϦͱ͸
    ϦΫΤετΛड͚औΓʢೖྗʣ
    ͍Ζ͍ΖॲཧΛͯ͠
    ೝূͱ͔%#ͷॲཧͱ͔
    ϨεϙϯεΛฦ͢ʢग़ྗʣ

    View Slide

  9. ؆୯ʹඳ͘ͱ͜͏

    View Slide

  10. XFCΞϓϦͷલॲཧ
    શϦΫΤετڞ௨Ͱ͍ͨ͠ॲཧ
    ϩάΠϯೝূ
    %#͔ΒͷσʔλऔಘɹͳͲ

    ΞϓϦέʔγϣϯຊମͷલʹ

    ॲཧΛڬΊΔΑ͏ʹ͢Ε͹Α͍ͷͰ͸

    View Slide

  11. ϑΟϧλʔʢલॲཧʣ

    View Slide

  12. XFCΞϓϦͷޙॲཧ
    શϦΫΤετڞ௨ͷॲཧɺ·ͩ͋Δ
    ϩάग़ྗ
    ॲཧޙʹ·ͱΊͯϝʔϧૹ৴

    ΞϓϦέʔγϣϯຊମͷޙʹ΋

    ॲཧΛڬΊΔΑ͏ʹͰ͖ΔͱΑͦ͞͏

    View Slide

  13. ϑΟϧλʔʢޙॲཧʣ

    View Slide

  14. ͯ͞ɺͪΐͬͱ
    ൃ૝Λస׵͢Δ࿩

    View Slide

  15. ೖΕࢠߏ଄
    ೖΕࢠࣜʹॲཧΛ

    ͭͳ͍Ͱ͍͘࢓૊ΈΛߟ͑Δ
    ྫؔ਺"ͱؔ਺#Λ࣮૷͢Δ
    ؔ਺"͸ͦͷॲཧͷதͰؔ਺#Λ

    ࣮ߦɺͦͷ݁ՌΛฦ͢Α͏ʹ͢Δ

    View Slide

  16. 1)1Ͱॻ͍ͯΈΔͱ
    $a = function (string $str, \Closure $next) : string {
    echo 'A'; // લॲཧΆ͍

    $result = $next($str); // ࣍ΛݺͿ
    echo 'C'; // ޙॲཧΆ͍
    return $result;
    };

    $b = function (string $str) : string {
    echo 'B';

    return strtoupper($str);
    };

    $a('hoge', $b); // ABC

    View Slide

  17. ೖΕࢠߏ଄

    View Slide

  18. ͞ΒʹೖΕࢠߏ଄

    View Slide

  19. λϚωΪΈ͍ͨʁ
    QIPUPCZEBSXJO#FMMMJDFOTFEVOEFS$$#:

    IUUQTXXXqJDLSDPNQIPUPTEBSXJOCFMM

    View Slide

  20. ೖΕࢠߏ଄ͷಛ௃
    ΞϓϦຊମΛแΉΑ͏ʹ࣮૷
    ֎ଆ͔Β৽͍͠;Δ·͍Λ௥ՃͰ͖Δ
    ࢀߟ"01ʢΞεϖΫτࢦ޲ϓϩάϥϛϯάʣ
    ڞ௨ͷॲཧΛԣஅతʹݺͼग़͠
    લॲཧɾޙॲཧΛࢦఆͰ͖Δ

    View Slide

  21. XFCΞϓϦʹద༻

    View Slide

  22. 1)1ʹ͓͚Δྺ࢙

    View Slide

  23. 4UBDL1)1
    IUUQTTUBDLQIQDPN
    l$PNQPTJOH)UUQ,FSOFM*OUFSGBDF
    NJEEMFXBSFTTJODFz
    l8IBUEPXFXBOU 3FVTFBUUIF
    XFCMBZFSz
    4ZNGPOZͷ)UUQ,FSOFM*OUFSGBDF

    View Slide

  24. 4UBDL1)1

    View Slide

  25. 143ͱ͸ʁ
    IUUQTXXXQIQpHPSHQTS
    l1)14UBOEBSET3FDPNNFOEBUJPOTz
    ܾఆతͳʮඪ४ʯͰ͸ͳ͍
    ͋͘·ͰΦεεϝɺקࠂ
    ίϛϡχςΟʔͰ͸Өڹྗେ

    View Slide

  26. Α͘ฉ͘143
    143#BTJD$PEJOH4UBOEBSE
    143$PEJOH4UZMF(VJEF
    143-PHHFS*OUFSGBDF
    143"VUPMPBEJOH4UBOEBSE

    View Slide

  27. 143
    IUUQTXXXQIQpHPSHQTSQTS
    )551NFTTBHFJOUFSGBDFT
    1TSa)UUQa.FTTBHFa3FRVFTU*OUFSGBDF
    1TSa)UUQa.FTTBHFa3FTQPOTF*OUFSGBDF
    XFCΞϓϦͷೖग़ྗͷඪ४Խ

    View Slide

  28. 143
    IUUQTXXXQIQpHPSHQTSQTS
    )5514FSWFS3FRVFTU)BOEMFST
    1TSa)UUQa4FSWFSa3FRVFTU)BOEMFS*OUFSGBDF
    1TSa)UUQa4FSWFSa.JEEMFXBSF*OUFSGBDF
    XFCΞϓϦͷඪ४Խ

    View Slide

  29. ઌ΄Ͳͷਤ

    View Slide

  30. 143143

    View Slide

  31. .JEEMFXBSF*OUFSGBDF
    interface MiddlewareInterface
    {
    public function process(
    ServerRequestInterface $request,
    RequestHandlerInterface $handler
    ): ResponseInterface;
    }

    View Slide

  32. 3FRVFTU)BOEMFS
    interface RequestHandlerInterface
    {
    public function handle(
    ServerRequestInterface $request
    ): ResponseInterface;
    }

    View Slide

  33. ࠷ۙͷ143ͷ࿩୊
    IUUQTUXJUUFSDPNGBCQPUTUBUVT

    3FNPWF4ZNGPOZCZGBCQPUu1VMM
    3FRVFTUuQIQpHpHTUBOEBSET

    View Slide

  34. ϑϨʔϜϫʔΫͱ
    NJEEMXBSFͷؔ܎

    View Slide

  35. 4MJN'SBNFXPSLW
    IUUQTXXXTMJNGSBNFXPSLDPN
    )5513PVUFS
    .JEEMFXBSF
    1434VQQPSU
    %FQFOEFODZ*OKFDUJPO 143

    View Slide

  36. 4MJN

    class ExampleMiddleware
    {
    public function __invoke(
    ServerRequestInterface $request,
    ResponseInterface $response,
    callable $next
    ): ResponseInterface {
    return $next($request, $response);
    }
    }

    View Slide

  37. 4MJN'SBNFXPSLW
    IUUQTHJUIVCDPNTMJNQIQ4MJN
    CMPCY$)"/(&-0(NE
    4MJNOPMPOHFSTIJQTXJUIB143
    JNQMFNFOUBUJPO
    1433FRVFTU)BOEMFSTDBOOPX
    CFVTFEBTSPVUFDBMMBCMFT

    View Slide

  38. ;FOE&YQSFTTJWF
    IUUQTEPDT[FOEGSBNFXPSLDPN
    [FOEFYQSFTTJWF
    1431433PVUJOH143
    ඪ४Λҙࣝ

    View Slide

  39. -BSBWFM
    IUUQTMBSBWFMDPNEPDT
    NJEEMFXBSF
    143ͷ࣮૷Ͱ͸ͳ͍
    ैདྷͷDPOUSPMMFSͷิॿతͳ໾ׂ
    ڞ௨ॲཧΛ࣮૷͢ΔͨΊͷ࢓૊Έ

    View Slide

  40. -BSBWFM

    class ExampleMiddleware
    {
    public function handle(
    \Illuminate\Http\Request $request,
    \Closure $next
    ) {
    return $next($request);
    }
    }

    View Slide

  41. 4ZNGPOZ
    NJEEMFXBSFʹ૬౰͢Δػೳ͸ͳ͍
    ػೳͱͯ͠͸ϑΟϧλʔ͕͋Δ
    IUUQTTZNGPOZDPNEPDDVSSFOU
    [email protected]
    [email protected]@pMUFSTIUNM

    View Slide

  42. $BLF1)1
    IUUQTCPPLDBLFQIQPSHFO
    DPOUSPMMFSTNJEEMFXBSFIUNM
    ͔Β143ʹରԠ
    $43'τʔΫϯνΣοΫͷ࣮૷ͳͲ͕
    NJEEMFXBSFͰͳ͞Ε͍ͯΔ

    View Slide

  43. $BLF1)1

    class ExampleMiddleware
    {
    public function handle(
    ServerRequestInterface $request,
    ResponseInterface $response,
    callable $next
    ): \Cake\Http\Response {
    return $next($request, $response);
    }
    }

    View Slide

  44. ͯ͞ɺ·ͱΊ

    View Slide

  45. ͪΐͬͱେ͛͞ͳ࿩

    View Slide

  46. ͦ΋ͦ΋ϑϨʔϜϫʔΫͱ͸
    ϦΫΤετΛड͚औΔ
    SPVUJOHΛݩʹߦ͏ॲཧΛબ୒͢Δ
    ॲཧΛݺͼग़͠ɺ࣮ߦ
    ݁ՌΛϨεϙϯεͱͯ͠ग़ྗ͢Δ

    View Slide

  47. ϑϨʔϜϫʔΫ
    ࡞Εͦ͏͡Όͳ͍Ͱ͔͢ʁ

    View Slide

  48. ϑϨʔϜϫʔΫϨγϐ
    143ͷ࣮૷ʢ[FOEEJBDUPSPTͳͲʣ
    SPVUJOH࣮૷ʢ'BTU3PVUFͳͲʣ
    NJEEMFXBSFͷ࣮ߦʢ.JEEMFMBOEͳͲʣ
    ग़ྗʢ[FOEIUUQIBOEMFSSVOOFSͳͲʣ

    View Slide

  49. ࣮ྫ
    IUUQTMPHNJKQUFDIBSUJDMFT
    ϩάϛʔͷϦχϡʔΞϧ
    lࠓճͷϦχϡʔΞϧͰ͸͜ͷ143
    Λར༻͢Δ͜ͱͰɺಛఆͷ8FCϑϨʔ
    ϜϫʔΫΛར༻ͤͣʹΞϓϦΛ࣮૷͢
    Δ͜ͱʹ͠·ͨ͠z

    View Slide

  50. ΦϨΦϨϑϨʔϜϫʔΫ
    ϑϨʔϜϫʔΫ؆୯ʹ࡞ΕΔ
    143ʹ४ڌ͓͚ͯ͠͹ɺޙ͔Β;FOE
    &YQSFTTJWFͳͲʹ৐Γ׵͑Δ͜ͱ΋Մೳ
    ΋ͪΖΜɺٯ΋
    બ୒ࢶͷҰͭͱͯ͠ɺ͋Γ͔΋

    View Slide

  51. NJEEMFXBSF
    ͍͔͕Ͱ͔ͨ͠ʁ

    View Slide

  52. ·ͱΊ
    ॲཧΛNJEEMFXBSFͰ෼ׂ
    هड़͕؆ܿʹɺςετ༰қʹ
    143Ͱඪ४Խ͞ΕΔ͜ͱͰࠩ͠ସ͑Մೳʹ
    %*ίϯςφͱͷ૊Έ߹Θͤ΋ศར
    ίϯετϥΫλΠϯδΣΫγϣϯ

    View Slide

  53. ͋Γ͕ͱ͏͍͟͝·ͨ͠

    View Slide