Slide 1

Slide 1 text

1 golang.tokyo #15 ੒௕Մೳੑʹ GoΛαʔϏε౤ೖͯ͠ 1೥΄Ͳͷ్தܦա May 30, 2018 Yoshihiro Takahashi Development Unit Cluex Co.,Ltd.

Slide 2

Slide 2 text

$PQZSJHIU© $MVFY$P -UE"MM3JHIUT3FTFSWFE 2 ໊લ: ߴڮ Ղ໻ (Takahashi Yoshihiro) Github: @yoshi42662 Twitter: @yoshi_xxxxxiiii # ॴଐ גࣜձࣾCluex (Ϋϧʔ) ࣗݾ঺հ # TODO Go޷͖ͳͷʹ࠷ۙ৮Ε͍ͯͳ͍ʂ # FIXME ࣾ಺Ͱ͋͝ͻ͛ۚ൅ͱݺ͹ΕΔ

Slide 3

Slide 3 text

$PQZSJHIU© $MVFY$P -UE"MM3JHIUT3FTFSWFE 3 ࣗݾ঺հ

Slide 4

Slide 4 text

ࢠҭͯʹ೰ΉϚϚୡͷҝͷʮࢠҭͯ૯߹ϝσΟΞʯ ࢠҭͯʹؔ͢ΔΑ͋͘Δ೰Έ͔Βͪΐͬͱ໘ന͍ࢠҭͯΤϐιʔυɺ ·ͨ࢈්ਓՊݕࡧ·ͰΛൃ৴ɻ ৘ใΛൃ৴͢Δ͚ͩͰ͸ͳ͘ɺ࢈්ਓՊ΍খࣇՊΫνίϛɺ ·͓ͨࢠ༷࿈ΕͰ΋ར༻͠΍͍͓͢ళͷ৘ใͳͲɺ ͨͩͷϝσΟΞʹཹ·Βͳ͍ɺϚϚ͞Μ͕ʮຊ౰ʹཉ͍͠৘ใʯΛ ൃ৴͢Δࢠҭͯ૯߹ϝσΟΞͰ͢ɻ https://mamanoko.jp 4

Slide 5

Slide 5 text

ϚϚͷજࡏతͳ೰ΈΛղܾ͢ΔʮࢠҭͯΞϓϦʯ · · ͷ ͯ 5

Slide 6

Slide 6 text

$PQZSJHIU© $MVFY$P -UE"MM3JHIUT3FTFSWFE 6 Application Ruby on Rails 5.1.4 React / Redux / Webpack Infrastructure AWS Docker on ECS ٕज़ελοΫ · · ͷ ͯ ࢠҭͯʹ೰ΉϚϚୡͷҝͷʮࢠҭͯ૯߹ϝσΟΞʯ ϚϚͷજࡏతͳ೰ΈΛղܾ͢ΔʮࢠҭͯΞϓϦʯ iOS Swift Clean Architecture Android Kotlin Clean Architecture Architecture Components API Go / echo / GORM

Slide 7

Slide 7 text

7 ࣾ಺ʹ͓͚ΔGoݴޠͷಋೖࣄྫ 1 ωΠςΟϒΞϓϦ༻API

Slide 8

Slide 8 text

$PQZSJHIU© $MVFY$P -UE"MM3JHIUT3FTFSWFE 8 ࣾ಺ʹGopher͍ͳ͍ Goྺ1िؒఔ౓Ͱ࣮૷։࢝ 3ϲ݄΄ͲͰॳϦϦʔε GoͷϥΠϒϥϦબͼ೉͍͠ ࣾ಺ʹ͓͚Δ(Pݴޠͷಋೖࣄྫ ωΠςΟϒΞϓϦ༻ APIΛϑϧεΫϥον Go / echo / gorm MVCΞʔΩςΫνϟ firebase / Postgres / Elasticsearch AWS ECS / Blue-Green Deployment ߏ੒

Slide 9

Slide 9 text

$PQZSJHIU© $MVFY$P -UE"MM3JHIUT3FTFSWFE 9 * ϑϧεΫϥονͰ։ൃ → αʔϏε౤ೖͯ͠1೥ऑ * ػೳ௥ՃͱϦϑΝΫλϦϯάΛͻͨ͢Β܁Γฦ͢ * ϓογϡ௨஌ͷόονʹΰϧʔνϯΛಋೖ * ruby gemΛgoͰॻ͖௚͠ * ϧʔςΟϯάϨϕϧͰgo-cacheʹΑΔΩϟογϡ ࣾ಺ʹ͓͚Δ(Pݴޠͷಋೖࣄྫ ͜Ε·Ͱʹओʹ΍ͬͨ͜ͱ ΞϓϦAPIʹٻΊΒΕ͍ͯΔ͜ͱ * jsonΛ͍͔ʹ଎͘ΫϥΠΞϯτ΁ฦ͔͢

Slide 10

Slide 10 text

$PQZSJHIU© $MVFY$P -UE"MM3JHIUT3FTFSWFE 10 ػೳతཁ݅ * SQL4ճ → ࣌ؒܭࢉ → json΁ม׵ → σʔλྔ͕ଟ͘300~600ms / req. ͔͔Δ * ೔෇͕มΘͬͨॠؒʹΩϟογϡΛexpire͢Δඞཁੑ * ࠷খߏ੒ͰՄೳͳݶΓͷ଎౓޲্Λ໨ࢦ͢ ΍ͬͨ͜ͱ * go-cacheΛಋೖ (·ͩΩϟογϡαʔόʔཱͯͨ͘ͳ͍) * routingϨϕϧͰͷΩϟογϡઃఆ͕Ͱ͖ΔΑ͏ʹͨ͠ * cacheΛอ࣋͢ΔࡍʹɺόΠφϦͰอଘ͢ΔΑ͏ʹมߋ * ฏۉ 30ms / req. ·Ͱվળ ࣾ಺ʹ͓͚Δ(Pݴޠͷಋೖࣄྫ

Slide 11

Slide 11 text

$PQZSJHIU© $MVFY$P -UE"MM3JHIUT3FTFSWFE 11 ݁Ռ * ΫϥΠΞϯταΠυͷΤϯδχΞ͔Βۤ৘͕͘Δ → LoadingදࣔΛ࣮૷ͨ͠ͷʹLoading͕ग़ͳ͍ ࠓޙ * TickerΛ࢖ͬͯࣄલʹϨεϙϯεΛΩϟογϡʹ৐ͤΔ * singleflightͰಉ࣌ଟൃΞΫηεͷෛՙ؇࿨ ࣾ಺ʹ͓͚Δ(Pݴޠͷಋೖࣄྫ

Slide 12

Slide 12 text

12 ࣾ಺ʹ͓͚ΔGoݴޠͷಋೖࣄྫ 2 Go on Rails

Slide 13

Slide 13 text

$PQZSJHIU© $MVFY$P -UE"MM3JHIUT3FTFSWFE 13 Ruby on RailsͷΞϓϦέʔγϣϯͷߴෛՙϩδοΫ → ruby࣮૷ʹΑΔtextlint(೔ຊޠͷจࣈྻॲཧ) → ཁ্݅ɺΩϟογϡΛ࢖༻Ͱ͖ͳ͍ → appαʔόʔͷworker͕ॲཧதͣͬͱ઎༗͞ΕΔ → 60 sec. / req. ࣾ಺ʹ͓͚Δ(Pݴޠͷಋೖࣄྫ × ϒϥ΢βଆͰॲཧͤ͞Δ × αʔόʔϨε (AWS lambda etc.)

Slide 14

Slide 14 text

$PQZSJHIU© $MVFY$P -UE"MM3JHIUT3FTFSWFE 14 → ߴෛՙϩδοΫ෦෼ΛGo࣮૷ʹϦϓϨΠε → C༻όΠφϦʹม׵ͯ͠Railsଆ͔Βffiܦ༝Ͱcall → 1sec. / req. ·Ͱվળ (60ഒͷ଎౓޲্) ࣾ಺ʹ͓͚Δ(Pݴޠͷಋೖࣄྫ Go࣮૷ + ffi (gem) 3VCZPO3BJMT %# #JOBSZ (P࣮૷ ⒏ ⒏ ˞'PSFJHO'VODUJPO*OUFSGBDFͷུ

Slide 15

Slide 15 text

$PQZSJHIU© $MVFY$P -UE"MM3JHIUT3FTFSWFE 15 8F`SFIJSJOH ͝੩ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠