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

Laravel でも非同期処理が扱える!? PHP 8 から初める非同期処理 〜Laravel...

Avatar for memory memory
October 02, 2021

Laravel でも非同期処理が扱える!? PHP 8 から初める非同期処理 〜Laravel Octane〜

English: Can we use asynchronous processing on Laravel? We can start to use asynchronous processing on PHP8 with Laravel Octane
At: 2021/10/03 PHP Conference 2021

Avatar for memory

memory

October 02, 2021
Tweet

More Decks by memory

Other Decks in Programming

Transcript

  1. @2020 Torana, Inc. @2020 Torana, Inc. Ί΋Γʔ ϓϩμΫτ։ൃ෦ Ϛωʔδϟʔ݉ςοΫϦʔυ 1)1Ͱ+7.Λ࣮૷ͨ͠ΓຊΛॻ͍ͯͨΓ

    ͯ͠·͢ɻೕ༮ࣇ޲͚஌ҭ؝۩ͷαϒεΫϦ ϓγϣϯαʔϏεΛఏڙ͢Δ5PSBOBͱ͍͏ ձࣾʹ͍·͢ !NNS 2
  2. @2020 Torana, Inc. -BSBWFM0DUBOFͱ͸ʁ  A0DUBOFDPODVSSFOUMZA ฒߦॲཧ ΍A0DUBOFUJDLA +BWB4DSJQUͷ TFU*OUFSWBMͷΑ͏ͳ΋ͷ

    ͕ఏڙ͞Ε͓ͯΓɺ೉ͳ͘࢖༻Ͱ͖·͢ɻ  ·ͨσʔλϕʔε΍,74Λܦ༝ͤͣʹɺϝϞϦ্ʹϦΫΤετؒͰͷ σʔλΛڞ༗͢ΔͨΊͷA$BDIFTUPSF PDUBOF A΋༻ҙ͞Ε͓ͯΓɺ ωοτϫʔΫ*0Λߟྀ͢Δඞཁ͕ͳ͍ͨΊɺߴ଎ͳσʔλͷग़͠ೖΕ ͕Մೳʹͳ͍ͬͯ·͢ɻ 8
  3. @2020 Torana, Inc. -BSBWFM0DUBOFͱ͸ʁ 3PBE3VOOFSͱ͸ʁ  (P੡ΞϓϦέʔγϣϯɾαʔόʔͰߴ଎ʹ1)1ΛॲཧΛ͢Δͨ Ίͷ΋ͷͰ͢ɻ  ༧Ίىಈͯ͋͠Δ1)1ϫʔΧʔ΁ϦΫΤετ͕དྷͨ࣌ʹ31$Λ

    ༻͍Δ͜ͱͰɺॲཧͨ݁͠ՌΛϨεϙϯεͱͯ͠ฦ͢࢓૊ΈͰ͢ɻ  ༧Ίϓϩηε͕ىಈ͍ͯ͠ΔͨΊʢ͍ΘΏΔϓϩηε͕ϓʔϧ͞Ε ͍ͯΔঢ়ଶʣɺॳճىಈίετΛݮΒ͠ɺϦΫΤετΛߴ଎ʹࡹ ͘͜ͱ͕Ͱ͖Δͷ͕ಛ௃Ͱ͢ɻ ࢀর: https://roadrunner.dev/docs/intro-about 9
  4. @2020 Torana, Inc. -BSBWFM0DUBOFͱ͸ʁ 4XPPMFͱ͸ʁ  1)1ͰฒߦॲཧɺฒྻॲཧͳͲΛఏڙ͢ΔͨΊͷ 
 1)1ͷ֦ுͷͭͰ͢ɻ 

    1)1͔Β'JCFS͕औΓೖΕΒΕ͍ͯ·͕͢'JCFSΑΓ΋ 
 ؆қతʹ࢖༻Ͱ͖ΔϥΠϒϥϦͰ͢ɻ  ༻్ͱͯ͠͸ΞϓϦέʔγϣϯɾαʔόʔʹཹ·Βͣɺ 
 ؆୯ͳεΫϦϓτ͔Βॏ͍ͨόονॲཧͳͲʹ΋޲͍͍ͯ·͢ɻ ࢀর: https://www.swoole.co.uk/article/php- fi bers-rfc-vs-swoole-co https://www.swoole.co.uk/ 11
  5. @2020 Torana, Inc. -BSBWFM0DUBOFͱ͸ʁ 4XPPMFͱ͸ʁ  (PϥΠΫʹAHP GO  Aͱॻ͘ͱɺ4XPPMF୯ମͰඇಉ

    ظʹॲཧ͕ՄೳͰ͢ɻ  (Pʹ͋Δ8BJU(SPVQ΍$IBOOFMͳͲ΋උ͑ΒΕ͓ͯΓɺ -BSBWFM0DUBOF͚ͩͷ༻్ʹཹ·Βͳ͍΄Ͳͷ 
 ϙςϯγϟϧ͕ߴ͍ϥΠϒϥϦͰ͢ɻ ࢀর: https://www.swoole.co.uk/article/php- fi bers-rfc-vs-swoole-co https://www.swoole.co.uk/ 12
  6. @2020 Torana, Inc. -BSBWFM0DUBOFͰԿ͕Ͱ͖Δͷʁ  ैདྷͷ/(*/9 1)1'1.ͷ૊Έ߹Θͤ΍"QBDIF NPE@QIQͳͲͷ૊Έ߹ ΘͤͰ͸ͳ͘ɺߴੑೳΞϓϦέʔγϣϯɾαʔόʔΛ࢖͏͜ͱͰɺࠓ·ͰҎ্ʹ ύϑΥʔϚϯεೳྗͷߴ͍αʔϏεΛ1)1Ͱఏڙ͢Δ͜ͱ͕Ͱ͖ΔΑ͏ʹͳΓ

    ·͢ɻ  ·ͨ3PBE3VOOFSͩͱ-BSBWFM0DUBOF͸ػೳʹେ෯ͳ੍ݶ͕͋Γ·͕͢ɺΞϓ ϦέʔγϣϯɾαʔόʔͷछྨΛ4XPPMFͱ͢Δ͜ͱͰɺ 
 ࣍ͷϖʔδͷΑ͏ͳԸܙΛڗडͰ͖·͢ɻ  ্هͷΑ͏ͳཧ༝΋͋ΓɺຊτʔΫ͸-BSBWFM0DUBOFͱ4XPPMFΛத৺ʹ 
 ৄղ͍͖ͯ͠·͢ɻ 14
  7. @2020 Torana, Inc. -BSBWFM0DUBOFͰԿ͕Ͱ͖Δͷʁ  4XPPMF͕ఏڙ͍ͯ͠Δαʔόʔ  )551 ؚΉ αʔόʔ

     8FC4PDLFUαʔόʔ  5$16%1αʔόʔ  .255αʔόʔ  -BSBWFM0DUBOF͸4XPPMFͷҎԼͷػೳΛ࢖༻͍ͯ͠·͢  )551 ؚΉ αʔόʔ 15
  8. @2020 Torana, Inc. -BSBWFM0DUBOFͰԿ͕Ͱ͖Δͷʁ  0DUBOFDPODVSSFOUMZ  ฒߦॲཧΛѻ͏ͨΊͷػೳͰ͢ɻத਎ࣗମ͸)551ϦΫΤετΛ 
 λεΫαʔόʔͱݺ͹ΕΔ΋ͷͰॲཧΛͤ͞Δ࣮૷ʹͳ͍ͬͯ·͢ɻ

    
 ಺෦Ͱ4XPPMFͷDPSPVUJOF͸࢖༻͞Ε͍ͯ·ͤΜɻ  0DUBOFUJDL  Ұఆ࣌ؒޙʹίʔϧόοΫΛ࣮ߦ͢ΔͨΊͷ࢓૊ΈΛఏڙ͍ͯ͠· ͢ɻ+BWB4DSJQUͰ͍͏ͱ͜ΖͷTFU*OUFSWBMͱಈ࡞͕ࣅ͍ͯ·͢ɻ 17
  9. @2020 Torana, Inc. -BSBWFM0DUBOFͰԿ͕Ͱ͖Δͷʁ  $BDIFTUPSF PDUBOF   ΩϟογϡΛσʔλϕʔε΍,74Ͱ͸ͳ͘ϝϞϦ্ʹஔͨ͘Ίͷ΋ͷ

    Ͱ͢ɻ࣮૷ࣗମ͸0DUBOFUBCMFͱେࠩͳ͘4XPPMFa5BCMFΛ༻͍ͯ ࣮૷͞Ε͍ͯ·͢ɻ  0DUBOFUBCMF  ϋΠύϑΥʔϚϯεʹϝϞϦ্ʹσʔλΛอ࣋ɾऔಘ͢ΔͨΊͷ 
 ࢓૊ΈΛఏڙ͍ͯ͠·͢ɻ 18
  10. @2020 Torana, Inc. ࠓ·Ͱͱ͸Կ͕ҧ͏ͷ͔ ैདྷ 22  "QBDIF NPE@QIQͷΑ͏ͳΑ͘ݟΒΕΔߏ੒Ͱ͢ɻ 


    "QBDIFͷखલʹϩʔυόϥϯαʔ͕ډͨΓ͠·͢ɻ ϦΫΤετ PHP Ͱॲཧ Ϩεϙϯε Ϩεϙϯε
  11. @2020 Torana, Inc. ϓϩμΫγϣϯ؀ڥ·ͰͷಓͷΓ %*ͷରԠ  -BSBWFM0DUBOFΛ࢖༻͢Δࡍʹ஫ҙ͢΂͖఺ͷҰͭͱͯ͠ɺ%*ͷ ରԠ͕ڍ͛ΒΕ·͢ɻ  ैདྷͰ͋Ε͹ɺ઀ଓͷͨͼʹ৽͘͠TJOHMFUPO΁ͷొ࿥͕࣮ߦ

    ͞ΕΔͨΊɺߟྀ͢Δඞཁ͕͋Γ·ͤΜͰͨ͠ɻ  ͔͠͠-BSBWFM0DUBOF͸1)1ࣗମ͕Πϕϯτϧʔϓͷର৅ͱͳ ΔͨΊɺຊདྷ1)1ऴྃ࣌ʹಈ࡞͢ΔΑ͏ͳΠϕϯτ͕ 
 ى͜Γ·ͤΜɻ 28
  12. @2020 Torana, Inc. ϓϩμΫγϣϯ؀ڥ·ͰͷಓͷΓ %*ͷରԠ  ͦͷͨΊϦΫΤετ#͕ϦΫΤετ"ͷม਺Λࢀরͯ͠͠·͏ ͜ͱ͕͋Γ͑·͢ɻ 29 γϯάϧτϯ

    X ϦΫΤετ A Λ࢖͍ͬͯΔ 
 Πϯελϯε ϦΫΤετ A ϦΫΤετ B γϯάϧτϯX Λࢀর γϯάϧτϯX Λࢀর ↑ ಉ͡γϯάϧτϯΛࢀর ↓ ↑ ϦΫΤετ A ͷॲཧ͕ऴྃͯ͠΋γϯάϧτϯ X ͸࢒Γଓ͚ΔͨΊ ϦΫΤετ B ͕ϦΫΤετ A ޲͚ͷγϯάϧτϯ X Λࢀরͯ͠͠·͏
  13. @2020 Torana, Inc. ϓϩμΫγϣϯ؀ڥ·ͰͷಓͷΓ %*ͷରԠ  ͜ΕΛ๷͙ͨΊʹɺ-BSBWFM0DUBOFެ্ࣜͰ͸ɺγϯάϧτϯ ͱͯ͠ొ࿥͠ͳ͍ͨΊɺΠϯελϯεΛৗʹղܾ͢Δํ๏ΛఏҊ ͍ͯ͠·͢ɻ 

    ฐࣾ͸ͦ΋ͦ΋ଞϦΫΤετͱڞ௨ͯ͠΋͍͍΋ͷҎ֎͸ɺαʔ ϏείϯςφΛ΄΅࢖͍ͬͯͳ͍ͷͰɺ࢖Θͳ͍Α͏ʹ͢Δͱ͍ ͏ελϯεͰ΋໰୊ͳ͍͔ͱࢥ͍·͢ɻ 30
  14. @2020 Torana, Inc. ϓϩμΫγϣϯ؀ڥ·ͰͷಓͷΓ 4XPPMFͷઃఆνϡʔχϯά  4XPPMFͷઃఆνϡʔχϯά΋"QBDIF΍/(*/9Ͱ͖ͯͨ͠Α͏ͳ νϡʔχϯά͕ඞཁʹͳΓ·͢ɻ  ྫ͑͹ͭͷϓϩηε͋ͨΓͰ࢖༻Ͱ͖Δίϧʔνϯͷ্ݶͰ͋ͬͨ

    ΓɺϦΫΤετͷѹॖ཰ H[JQDPNQSFTTJPO ͳͲઃఆ͕ՄೳͰ͢ɻ  ಛʹʮԿճϦΫΤετ͕ߦΘΕͨΒϫʔΧʔΛ࠶ىಈ͢Δ͔ʯͱ͍͏ ઃఆʢNBY@SFRVFTUʣ͸ɺϑΝΠϧͷΦʔϓϯ਺΍ϝϞϦ࢖༻཰ʹ΋ Өڹ͢ΔͨΊඞਢͰ͢ɻ 35
  15. @2020 Torana, Inc. ϓϩμΫγϣϯ؀ڥ·ͰͷಓͷΓ ϝϞϦϦʔΫରࡦ  ͜ͷΑ͏ͳ৔߹ANFNPSZ-FBL7BMVFTA͕ແݶʹ૿͍͖͑ͯ· ͢ɻ  ͦͷͨΊɺͲ͔͜ͷλΠϛϯάͰANFNPSZ-FBL7BMVFTAΛۭʹ

    ͯɺղ์͢ΔΑ͏ͳॲཧ͕ඞཁʹͳΓ·͢ɻ  ΋ͪΖΜ͜͏͍͏༻్Ҏ֎Ͱ΋ى͜ΓಘΔͷͰɺଞݴޠಉ༷ɺৗ ʹม਺͕ϝϞϦ͔Βղ์͞ΕΔ͔Ͳ͏͔Λࢥྀ͢Δඞཁ͕͋Γ· ͢ɻ๨ΕΔͳVOTFUɻ 38
  16. @2020 Torana, Inc. ϓϩμΫγϣϯ؀ڥ·ͰͷಓͷΓ ͦͷଞ  ࣮͸-BSBWFM0DUBOFͰ͸FOBCMF@DPSPVUJOFGBMTF ˞ ͱͳͬ ͍ͯΔͨΊ4XPPMFඋ͑෇͚ͷDPSPVUJOFΛ࢖͏͜ͱ͕Ͱ͖·ͤ

    Μɻ  ୅ΘΓʹ0DUBOFDPODVSSFOUMZ͕༻ҙ͞Ε͍ͯ·͢ɻ  FOBCMF@DPSPVUJOFΛ༗ޮʹ͢Δͱɺσʔλϕʔε΍,74ͳͲ ͷίωΫγϣϯϦιʔε͕յΕͨΓηογϣϯ͕ଞϦΫΤετ ͱೖΕସΘΔͳͲ͕ى͜Γ·͢ɻ 40 ࢀর: https://github.com/laravel/octane/blob/64a1c3c2ac191581dd73b486463e707f56984e6b/src/Commands/StartSwooleCommand.php#L124
  17. @2020 Torana, Inc. ϓϩμΫγϣϯ؀ڥ·ͰͷಓͷΓ ͦͷଞ  /FXSFMJD"1.͕ೖΕΒΕͳ͍  ೖΕΒΕͳ͍ͱ͍͏ΑΓ΋4XPPMFͰ΄͔ͬͨ͠ύϑΥʔϚ ϯε͕ಘΒΕͳ͘ͳΔ

     %BUBEPH"1.ͳͲ΋ಉ༷ɻཁ͸طଘͷؔ਺ΛϑοΫ͢ΔΑ ͏ͳαʔυύʔςΟͷಋೖ͕೉͍͠ɻͦͷͨΊɺ 
 ฐࣾ͸%BUBEPH"HFOUͷΈΛ࢖༻͍ͯ͠·͢ɻ 42
  18. @2020 Torana, Inc. ϓϩμΫγϣϯ؀ڥ·ͰͷಓͷΓ ͦͷଞ  4XPPMFWܥͱWܥͰେ෯ͳࠩҟ͕͋Δ  WܥͩͱD63-Λ࢖͏ϥΠϒϥϦʢBXTTEL (V[[MFͳͲʣ͕͏·͘ಈ࡞͠·ͤ

    Μɻ  ٯʹWͰ1)1Ҏ߱ʢ1)1ؚΉʣͩͱಈ࡞͠·ͤΜɻ1)1ͩͱ ಈ࡞Λ͢Δͱ͍ͬͨෆ۩߹͕͋Γ·͢ɻ  ฐࣾͰ͸1)1 4XPPMFWܥΛ࢖༻͍ͯ͠·͢ɻ  ઌ೔मਖ਼͞Εͯɺ1)1 4XPPMFWܥΛ࢖༻͢ΔΑ͏ʹ͠·ͨ͠ɻ 
 ʢࠓظதʹ1)1΁Ҡߦ༧ఆʣ 44
  19. @2020 Torana, Inc. ࣮ࡍʹϓϩμΫγϣϯͰӡ༻ͯ͠Έͯ  ϓϩμΫγϣϯϩʔϯν·Ͱʹ༷ʑͳ໰୊͕͋ͬͨ  D63-ͰσʔλΛऔಘ͍ͯ͠ΔͱɺଞͷϦΫΤετͰ΋ͦͷӨڹΛϞ ϩʹड͚ͯD63-͕ऴΘΔ·Ͱ଴ػঢ়ଶʹͳΔ 

    ฐࣾͰ͸3FEJTϩάΠϯηογϣϯͱ௨ৗͷΩϟογϡͰECΛ෼ ཭͍ͯ͠Δ͕ɺଞͷϦΫΤετͷECׂΓৼΓͷม਺Λࢀরͯ͠͠· ͏ෆ۩߹͕͋Γɺຊ൪؀ڥͰͬͪ͝Όʹͳͬͯ͠·ͬͨ 49