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

PHP Conference Sendai 2019 presentation slides

Avatar for memory memory
January 26, 2019

PHP Conference Sendai 2019 presentation slides

PHP Conference Sendai / 2019
Presentation slides

Avatar for memory

memory

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͸அࣺ཭͠Α͏