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

PHP Conference Sendai 2019 presentation slides

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
Avatar for memory memory PRO
January 26, 2019

PHP Conference Sendai 2019 presentation slides

PHP Conference Sendai / 2019
Presentation slides

Avatar for memory

memory PRO

January 26, 2019
Tweet

More Decks by memory

Other Decks in Programming

Transcript

  1. θϩϕʔε͔Βͷ։ൃͰҙࣝͨ͜͠ͱ • ҙࣝͨ͜͠ͱ͸5఺ • ᶃ ୭Ͱ΋։ൃͰ͖ΔΑ͏ʹ͢ΔϝϯλϦςΟ • ᶄ ৽͍͜͠ͱʹ௅ઓ͢ΔϝϯλϦςΟ •

    ᶅ ࠳͚ͳ͍ϝϯλϦςΟ • ᶆ ਏ͍ঢ়گΛָ͠ΉϝϯλϦςΟ • ᶇ ࢒ۀ͸͠ͳ͍ͧͱ͍͏ڧ͍ϝϯλϦςΟ
  2. ٕज़બఆͱΠϯϑϥߏ੒ • શจݕࡧΤϯδϯ͸ࢥྀʹࢥྀΛॏͶElasticsearchΛબఆͨ͠ • Groongaͱ͍͏બ୒ࢶ΋͋ͬͨ • ݕࡧੑೳ͸ Elasticsearch ΑΓ Groonga

    ͷ΄͏্͕Β͍͠ • ࢀߟ: http://blog.createfield.com/entry/2014/04/21/120023 • ৗ࣌઀ଓ͕਺ສ௒͑Δ͔΋஌Εͳ͍ͷͰݫ͍͔͠΋͠Εͳ͍ͱ͍͏ݒ೦ ͕͋Γࠓճ͸আ֎ • खܰʹεέʔϧ͔ͨͬͨ͠ • ήʔϜͷ߈ུ৘ใΛऔΓѻ͍ͬͯΔͷͰήʔϜݻ༗ͷݻ༗໊ࢺ͕සग़͢Δ͜ ͱΛߟྀͨ͠ઃܭʹ͢Δඞཁ͕͋ͬͨ
  3. ٕज़બఆͱΠϯϑϥߏ੒ • ࠷ॳ͸৽ͨͳऔΓ૊ΈͱϝϦοτΛՃຯͯ͠GoΛબ୒͠Α͏ͱ͍ͯͨ͠ • ݴޠࣗମͷύϑΥʔϚϯε͕Α͍ • ίϯύΠϧͷ࣌ؒ΋ૣ͍͠ • ͳʹΑΓॻ͘ͷָ͕ •

    APIͷσβΠϯΛ͢ΔͨΊʹ goa ͱ͍͏ϑϨʔϜϫʔΫ͕༻ҙ͞Ε͍ͯΔ • ϚΠΫϩαʔϏεͱͯ͠ఏڙ͍ͨ͠ͷʹଧͬͯ෇͚ͩͬͨ • APIυΩϡϝϯτ (Swagger) ΋উखʹు͖ग़ͯ͘͠ΕΔͷͰ • υΩϡϝϯτ͸͋Μ·Γߟྀ͠ͳͯ͘΋Αͦ͞͏
  4. ٕज़બఆͱΠϯϑϥߏ੒ • GameWith ͸ PHP ΛϝΠϯͱͯ͠ѻ͍ͬͯΔձࣾ • ͦ΋ͦ΋౰࣌͸ଞϝϯόʔ͕৽͍͠ݴޠΛֶͿ͕࣌ؒͳ͔ͬͨ • Կ͔͠ΒΠϯγσϯτ͕ൃੜͨ͠৔߹ʹରॲͰ͖Δϝϯόʔ͕ݶΒΕͯ͠

    ·͏ɻ • ࢒Γͷ։ൃظ͕ؒ͜ͷ࣌఺Ͱ 1.5 ϲ݄͘Β͍ʹͳ͍ͬͯͨ • ϨϏϡʔͰ͖Δϝϯόʔͷ͕࣌ؒऔΕͳ͍ɾϓϩδΣΫτʹδϣΠϯͰ͖ ͳ͍ • PHPͰ͋Ε͹୭Ͱ΋։ൃͰ͖Δ
  5. ٕज़બఆͱΠϯϑϥߏ੒ • GoͰ͸ͳ͘PHPΛબΜͩ • ͦ΋ͦ΋ElasticsearchͰPHP޲͚ϥΠϒϥϦ͕͋Γɺࠔͬͨͱ͖ʹࢀߟʹͳ Γͦ͏ • Πϯγσϯτ͕ൃੜͨ͠ࡍʹαʔόʔαΠυΤϯδχΞͰ͋Ε͹ɺͲΜͳϝ ϯόʔͰ΋ରԠͰ͖ɺ࠷ѱͷࣗମ͕ى͖ͯ΋αʔϏεͷ෮چ΍ҡ͕࣋଎΍͔ ʹͰ͖Δ

    • LaravelͰඞཁͦ͏ͳCRUDΛΧόʔͰ͖ΔͷͰ։ൃ޻਺ΛݮΒͤͦ͏ • ݸਓతʹ pthreads ΍ Swoole ͳͲΛ࢖ͬͨฒྻɾඇಉظॲཧ΋ࢼ͔ͨͬͨ͠ • ࢼͤ͸ͨ͠΋ͷͷύϑΥʔϚϯενϡʔχϯάʹ࣌ؒΛऔΒΕͦ͏Ͱɹ࣮ݱʹ͸ࢸ Βͣ… ݕࡧAPI͸ Elasticsearch + PHP 7.2 + Laravel 5.6 Ͱ։ൃ͢Δ͜ͱʹͳΓ·ͨ͠
  6. ٕज़બఆͱΠϯϑϥߏ੒ • ͳͥ͜ͷߏ੒ʹ͠Α͏ͱͨ͠ͷ͔ • શจݕࡧΤϯδϯ͸ΞϓϦ͔Β͸ࢀরɺμογϡϘʔυ͔Β͸ॻ͖ࠐΈ͕ߦ ΘΕΔɻ • ήʔϜͷ߈ུهࣄ͸සൟʹߋ৽͞ΕΔͨΊɺߋ৽৘ใ΍࡟আ৘ใΛΩϡʔ Ͱॲཧ͔ͨͬͨ͠ͷͰɺAmazon SQSΛՃ͑ͨ

    • Elasticsearchͷ৑௕ԽͷͨΊσʔλϊʔυ͕2୆Ҏ্ඞཁͩͬͨ • ࠓճͷϓϩμΫτͰ͸ͲΕ͚ͩͷΞΫηε਺͕͋Δ͔࢑ఆͰ͔͠ग़ͤͳ͔ͬ ͕ͨ1୆ͩͱϊʔυ͕յΕͨࡍͷରॲ͕Ͱ͖ͳͦ͞͏Ͱ͋ΔͨΊ
  7. ٕज़બఆͱΠϯϑϥߏ੒ • ։ൃ؀ڥ͸DockerͰߏ੒ͨ͠ • DockerΛ࢖͏͜ͱʹΑΓɺԿ͕؀ڥʹ͋Δͷ͔໌֬ʹΘ͔ΔΑ͏ʹͳͬͨ • GameWith ͸ Vagrant Λ࢖͏෩ை͕͋ΓɺͲ͏͍ͬͨϛυϧ΢ΣΞ͕͋

    Δ͔ɺͲ͏͍͏ߏ੒ʹͳ͍ͬͯΔͷ͔೺Ѳͮ͠Β͔ͬͨ • ։ൃ؀ڥͱϓϩμΫγϣϯ؀ڥͰඞཁͳ؀ڥͷࠩҟΛແ͔ͨͬͨ͘͠ • ϓϩμΫγϣϯ؀ڥʹ͸͋Δ͕ɺ։ൃ؀ڥʹ͸ͳ͍ɺͱ͍͏ঢ়ଶΛ࡞Γ ͨ͘ͳ͔ͬͨ • ࣾ಺ͰDockerΛϓϩμΫγϣϯʹར༻͢Δͷ͸͜ͷϓϩδΣΫτ͕ॳΊͯ • ৽͍͠௅ઓΛ͢Δ͜ͱ͸͍͍͜ͱɻ৽͍͜͠ͱʹ௅ઓΛͨ͠ͱ͍͏લྫ Λ࡞ΓपΓͷϝϯόʔ΋ɺࣗΒਐΜͰ௅ઓ͍ͯ͘͠෩౔ʹ͍͖͔ͯͨͬ͠ ͨ
  8. ٕज़બఆͱΠϯϑϥߏ੒ • σϓϩΠ͸ Deployer Ͱ • ॻ͘ͷ؆୯ͦ͏ • ։ൃ޻਺͕ 1.5

    ϲ݄ͱ୹͍ͷͰɺ͘͢͝େࣄ • PHP ͱ૬ੑ͕ྑͦ͞͏ • GameWith ࣗମ͸ rsync Ͱ͹Β·͘Α͏ʹͳ͍ͬͯͨ • Capistrano Ͱ΋͍͍ͷͰ͸ͱࢥ͕ͬͨ Ruby Λॻ͚Δϝϯόʔ͕গͳ͍ • ࣮ࡍ͍ͯ͠Δͷ͸ pull ͚ͩ • ͨͩɺ Elasticsearch Ͱ࢖༻͢ΔϢʔβʔࣙॻͷϏϧυͳͲ΋σϓϩΠί Ϛϯυʹೖ͍ͬͯΔ
  9. ࣮ࡍͷ։ൃ • ݕࡧγεςϜࣗମͷνʔϜߏ੒͸4໊ମ੍ • αʔόʔαΠυΤϯδχΞ × 1 • GameWith ͷ΢Σϒ໘ͷ։ൃ΍վम΋݉຿

    • ΠϯϑϥΤϯδχΞ × 1 • ଞͷΠϯϑϥ໘ͷλεΫ΋݉຿ • σΟϨΫλʔ × 1 • GameWith ͷ΢Σϒ໘ͷσΟϨΫγϣϯ΋݉຿ • ίʔυϨϏϡϫʔ × 1 • ෦௕ • ଞʹiOS, AndroidΤϯδχΞ
  10. ࣮ࡍͷ։ൃ • طʹ GameWith ΞϓϦಠࣗͷ API ͕ଘࡏ͍ͯ͠Δ • ݕࡧγεςϜଆ΋࢓༷Λ߹ΘͤΑ͏͔೰Μͩ΋ͷͷɺԼهͷ pros,

    cons ͔ ΒɺಠࣗͰσβΠϯ͢Δ͜ͱʹ͠·ͨ͠ɻ • pros • Ϟμϯͳ API σβΠϯ͕Ͱ͖Δ • Laravel ͷϧʔςΟϯάָ͕ʹͳΔʢ㲈։ൃ޻਺ͷ୹ॖʣ • GameWith ຊମαΠτͱ͸ҧͬͨ΋ͷͱͯ͠ѻ͍͔ͨͬͨʢ㲈ϚΠΫ ϩαʔϏεԽʣ • cons • ϞϊϦγοΫʹͳͬͯ͠·͏ͱɺطʹ͋Δٕज़తෛ࠴ʹߋʹٕज़తෛ ࠴͕ੵΈॏͳͬͯख஗ΕʹͳΔ • ͜ͷͱ͖ɺಉ࣌ʹ GameWith ຊମαΠτ͸ PHP 7.x ʹҠߦ͢Δ४උ Λ͍ͯͨͨ͠Ίɺ৮Εͨ͘ͳ͔ͬͨ
  11. ࣮ࡍͷ։ൃ • طʹ GameWith ΞϓϦಠࣗͷ API ͕ଘࡏ͍ͯ͠Δ • ݕࡧγεςϜͷ API

    ͷઃܭ͸͜͏͍ͨ͠ͱ͍͏***ҙࢥදࣔ***Λͯ͠ɺઃܭʹ ؔͯ͠ͷσΟεΧογϣϯΛۃྗݮΒ͠։ൃ޻਺ͷ࡟ݮΛߦ͏ ※͋͘·ͰҙࢥදࣔͳͷͰɺͦͷ͋ͱ͍͔ͭ͘ͷ࣮૷Մ൱΍ຊ౰ʹAPI σβΠϯ͸Ϟμϯ͔ɺͳͲؚΊͯͷσΟεΧογϣϯ͸ߦͬͯ·͢
  12. ࣮ࡍͷ։ൃ • PHPUnit Λ࢖͍ϢχοτςετΛඞͣॻ͍ͨ • ϢχοτςετΛॻ͍ͯɺ࣮૷ͨ͠ API ͷΤϯυϙΠϯτ͕ઈରʹಈ࡞͢Δ อূ͕΄͔ͬͨ͠ •

    ͨͩɺ޻਺ͷ໰୊΋͋Γॻ͍ͨͷ͸ϛογϣϯΫϦςΟΧϧͳՕॴͩ ͚ɻ • ͜ͷΤϯυϙΠϯτ͸ઈରʹಈ͘ͱ͍͏৺ཧత҆શੑɻ
  13. ϓϩμΫγϣϯʹϦϦʔε͢Δ·Ͱ • ϓϩμΫγϣϯ؀ڥΛߏங • QA (Quality Assurance) Λ࣮ࢪ͢ΔͨΊʹϓϩμΫγϣϯ؀ڥͷߏஙΛ͢Δඞ ཁ͕͋ͬͨ •

    iOS, AndroidΤϯδχΞɺσΟϨΫλʔ͔Β࣮ࡍͷσʔλΛݟͯ֬ೝΛ͠ ͍ͨཁ๬ʹ౴͑ΔͨΊ • ϓϩμΫγϣϯ؀ڥͷ Elasticsearch ʹهࣄΛ౤ೖ͍ͯ͘͠ • هࣄͷ݅਺͕਺ेສ݅͋Γ͕͔͔࣌ؒΔ͠ɺࣦഊ͢Δͱ౤ೖ͠௚͠ͳͷ Ͱਏ͔ͬͨ
  14. ϓϩμΫγϣϯʹϦϦʔε͢Δ·Ͱ • QA (Quality Assurance) ͷ࣮ࢪ • ΠϯςάϨʔγϣϯςετ ΋݉Ͷͯ iOS,

    Android ΤϯδχΞɺαʔόʔαΠ υΤϯδχΞɺσΟϨΫλʔɺ෦௕ͷશһ͕ू݁ͯ͠ɺ࣮ࡍʹεϚϗΛ৮Δɻ ͜͜Ͱग़ͨόά΍ػೳͷ࣮૷ʹ͍ͭͯͷϑΟʔυόοΫΛड͚ͯ ௐ੔Λ͍ͯ͘͠
  15. ·ͱΊ • ࠓճ͸։ൃʹҙࣝͨ͜͠ͱʹଇͬͯɺٕज़બఆͷࡍʹ୭Ͱ΋Ͱ͖Δ΋ͷΛબΜͩ • ͦͷ্Ͱͦͷ෼໺ͷ৽͍͠΋ͷΛऔΓೖΕ͍ͯͬͨʢDocker΍ PHP 7.2ͳͲʣ • ໌೔ɺࣗ෼͕ަ௨ࣄނʹ͋ͬͨΒʁͱ͍͏͜ͱΛߟ͑ͳ͕ΒਐΊΔͱࣗવͱ୭ʹͰ΋Ͱ ͖Δ΋ͷʹͳ͍ͬͯ͘ײ͕͋͡Δ

    • ඞཁͦ͏ͳλεΫ͸ Issue ʹϝϞΛ࢒ͨ͠΄͏͕͍͍ • ಛʹ݉೚ͷ৔߹ͩͱ๨ΕΔ͜ͱ΋͋ͬͨΓ͢Δ • ͋Δఔ౓୭͔͕ਐΊͳ͍ͱϓϩδΣΫτ͸ਐ·ͳ͍ • ୭ͷ࢓ࣄ͚ͩͬʁͱଞਓ͝ͱʹ͢ΔͷͰ͸ͳ͘ɺԼ஍Λࣗ෼͔Β཰ઌͯ͠࡞͍ͬͯ͘ • APIσβΠϯΛઌʹܾΊ͍ͯͳ͚Ε͹ɺϓϩδΣΫτ͕੒ޭ͔ͨ͠Ͳ͏͔΋ո͍͠ • Πϯϑϥͷߏ੒Λߟ͑ͭͭίʔυΛॻ͍͍ͯ͘ • Πϯϑϥͷߏ੒ʹΑͬͯॻ͘ίʔυ͕ҟͳΔͷͰɺઌʹΠϯϑϥͷઃܭΛ಄ʹࢥ͍ු͔ ΂Δ
  16. ·ͱΊ • ίʔυΛॻ͘͜ͱΛ᪳᪯͠ͳ͍ • ᪳᪯͢ΔͱɺͦΕ͚ͩͰ͕࣌ؒͳ͘ͳͬͯ͠·͏ͷͰɺ᪳᪯͠ͳͯ͘΋͍͍Α͏ͳ࢓૊ ΈΛ࡞ΔɻʢϢχοτςετΛॻ͘ͳΓɺQAΛ࣮ࢪ͢ΔͳΓʣ • ผνʔϜͱԁ׈ͳ࿈ܞΛ͢ΔͨΊʹυΩϡϝϯτΛॻ͘ • API͕Ͳ͏ͳ͍ͬͯΔ͔͸ɺΞϓϦνʔϜ͸஌Βͳ͍ɻ͔ͩΒͦ͜ɺϢϏΩλ

    εݴޠͰ͋ΔυΩϡϝϯτ͸࢒͓ͯ͘͠ɻ • υΩϡϝϯτ͕ͳ͚Ε͹ΞϓϦνʔϜ͸αʔόʔαΠυͷίʔυΛಡΉɺฉ ͘ͱ͍͏ίετ͕ൃੜͯ͠͠·͍ɺ͕࣌ؒ΋͍ͬͨͳ͍ • ͦΕʹɺ͋ͱ͔ΒಡΈฦͤΔ͠ɺ໌೔ަ௨ࣄނʹ͋ͬͯ΋҆৺Ͱ͖Δ • θϩϕʔεͷ։ൃʹ͸ෛՙςετ͸࣮ࢪ͠Α͏ • ϦϦʔε௚ޙʹαʔόʔ͕མͪΔͷ͸൵͍͠ؾ࣋ͪʹͳΔͷͰ • MTG͸அࣺ཭͠Α͏