Slide 1

Slide 1 text

ݫൿɿຊࢿྉͷҰ෦·ͨ͸શ෦ΛɺNatureגࣜձࣾͷڐՄͳ͠ʹɺෳ੡ɺసࡌ͢Δ͜ͱΛې͡·͢ɻ Introduce about September 3, 2019 Natureגࣜձࣾ Go ͱ Nature Bath vol.6 ʮGo։ൃɾӡ༻ͷݱ৔ʯ 19th November, 2020 ~ Nature Remoͷཪଆ

Slide 2

Slide 2 text

2 Me • দ໦ խ޾ (id:Songmu) • Nature גࣜձࣾ औక໾CTO • https://songmu.jp/riji • https://github.com/Songmu • ޷͖ͳݴޠ͸GoͱPerlͱதࠃޠ • 3 Times ISUCON Winner • ஶॻʹʮΈΜͳͷGoݴޠʯ౳ • झຯ͸OSS׆ಈͰ͢

Slide 3

Slide 3 text

3 Created Miscellaneous Go Tools • maltmill • πʔϧΛ؆୯ʹhomebrewͰ഑෍͢ΔͨΊͷπʔϧ • horenso • όονδϣϒͷͨΊͷϥούʔ • peep • ϓϩηεͷऴྃ௨஌Λͯ͘͠ΕΔ܅ • gocredits • Goͷπʔϧ഑෍࣌ʹґଘϥΠϒϥϦͷLICENSEΛಉࠝ • etc. • ref. ʮGoͰπʔϧΛྔ࢈͢Δ๻ͷํ๏ʯ • https://junkyard.song.mu/slides/gocon2019-fukuoka/#0

Slide 4

Slide 4 text

4 Maintaining major Go tools • ghq (github.com/x-motemen/ghq) • ιʔείʔυϦϙδτϦ؅ཧπʔϧ • ghq handbook • https://leanpub.com/ghq-handbook • ghr (github.com/tcnksm/ghr) • GitHub΁ͷόΠφϦϦϦʔε༻πʔϧ

Slide 5

Slide 5 text

5 Recent Works • Let's Encryptͷϧʔτূ໌ॻมߋ໰୊ • Android7.1ҎલͰLet's Encryptূ໌ॻͷαΠτ͕ݟΒ Εͳ͘ͳΔ • https://songmu.jp/riji/entry/2020-09-22-letsencrypt.html • Let's Encryptͷূ໌ॻ੾ସपΓͦͷޙ • https://songmu.jp/riji/entry/2020-09-22-letsencrypt.html

Slide 6

Slide 6 text

6 Recent Works • GoͷΫϥΠΞϯτ΁ͷରԠ • ͝ར༻͍ͩ͘͞

Slide 7

Slide 7 text

7 ৽࡞ • github.com/Songmu/gotesplit • github.com/Songmu/ecschedule • ޙͰղઆ͠·͢

Slide 8

Slide 8 text

8 We are Hiring • GoΤϯδχΞઈࢍืूதͰ͢ʂ • ݱࡏ3໊ • ιϑτ΢ΣΞΤϯδχΞ͸7໊

Slide 9

Slide 9 text

ࠓ೔࿩͢͜ͱ Agenda 9

Slide 10

Slide 10 text

10 Agenda • ܰ͘Nature Remoͷ঺հ • Nature RemoͱGo • ೔ʑͷGo׆༻΍OSS׆ಈͳͲ

Slide 11

Slide 11 text

ձࣾͱ੡඼ Company and Product 11

Slide 12

Slide 12 text

Mission 12 Mission ⾃然との共⽣を テクノロジーでドライブする

Slide 13

Slide 13 text

Product

Slide 14

Slide 14 text

֎ग़ઌ͔ΒεϚϗͰΤΞίϯΛON εϚʔτεϐʔΧʔͱ࿈ܞͯ͠੠ͰՈిΛૢ࡞ 14 Features

Slide 15

Slide 15 text

How It Works

Slide 16

Slide 16 text

Traction 20ສ୆ಥഁ ೝ஌ˍγΣΞۀքNo.1 ʢ2020೥2݄࣮ࢪɺࣗࣾௐ΂ʣ

Slide 17

Slide 17 text

Nature RemoͱGo Nature Remo and Go 17

Slide 18

Slide 18 text

API Stream Worker Amazon ECS Subscribe Publish WS WS Pub/Sub System Diagram

Slide 19

Slide 19 text

Nature Remoͷཪଆ • αʔόʔαΠυ͸΄΅શͯGo • ࣮͸ׂͱී௨ͷWebٕज़Λ࢖࣮ͬͯݱ͍ͯ͠Δ • WebSocketͷ઀ଓ؅ཧपΓ͕νϟϨϯδϯά • αʔϏε΋ٸ੒௕த

Slide 20

Slide 20 text

Components • API • εϚϗΞϓϦ΍εϚʔτεϐʔΧʔͱͷ௨৴ • Stream • Nature RemoͱͷWebSocket௨৴ • Worker • ϧʔϧͷ࣮ߦ ͢΂ͯGo੡ͰAmazon ECS্Ͱಈ͔͍ͯ͠Δ

Slide 21

Slide 21 text

Remarkable Points • ૉ๿ͳGo੡ͷWebΞϓϦέʔγϣϯ • Redis Pub/SubΛ༻͍ͨɺAPI - Streamؒͷ΍ΓͱΓ • Nature Remo͸ALBΛܦ༝ͯ͠streamαʔόʔʹ WebSocket઀ଓ͍ͯ͠Δ • AlexaͷΧελϜεΩϧ͸AWS Lambdaܦ༝Λ࢖࣮ͬͯߦ ͞ΕΔ

Slide 22

Slide 22 text

Simple Web Applications with Go • ී௨ͷWebΞϓϦέʔγϣϯ • ΋ͱ΋ͱherokuͰϗετ໊͍ͯͨ͠࢒΋ • ϑϨʔϜϫʔΫ • github.com/nbio/hitch • Gorilla web toolkitΛ෦෼తʹར༻ • MySQL/Redis • gorp/redigo • guregu/dynamo

Slide 23

Slide 23 text

Utilize Redis Pub/Sub • Redis Pub/SubΛ׆༻͍ͯ͠Δ • API͔Β͸RedisʹPublish • Stream͸RedisΛSubscribe • ૬ޓ௨৴͠ͳ͍ૄ݁߹Λ࣮ݱ͍ͯ͠Δ • Streamଆ͸͋͘·ͰWebSocketͱRedis͔ΒͷSubscribeͰ ड͚෇໋͚ͨྩͷ࣮ߦ͔͓͜͠ͳΘͣঢ়ଶΛ࣋ͨͳ͍

Slide 24

Slide 24 text

WebSocket connection via ALB • Nature Remo͸ALBΛܦ༝ͯ͠streamαʔϏεʹ WebSocket઀ଓ͍ͯ͠Δ • ҰͭͷGoΞϓϦͷίϯςφͰ਺ສ઀ଓ͞͹͚Δʂ • Goͷ͓खܰͳྑ͞Λ࣮ײ • Go͸खܰʹͦΕͳΓͷύϑΥʔϚϯε͕ग़ͤΔͷ͕͔ͳΓ ྑ͍

Slide 25

Slide 25 text

೔ʑͷ։ൃɾӡ༻ Go Topics 25

Slide 26

Slide 26 text

೔ʑͷۀ຿ • GitHub্Ͱ։ൃ • CircleCI্ͰCI/CD • developϒϥϯν͔ΒfeatureϒϥϯνΛ੾Δ • ϨϏϡʔͯ͠Ϛʔδ • renovateʹΑΔϥΠϒϥϦࣗಈΞοϓσʔτ • developϒϥϯν͔Βmasterϒϥϯν΁ͷpull request • git-pr-releaseʹΑͬͯࣗಈ࡞੒ • Ϛʔδ͞ΕͨΒࣗಈͰຊ൪deploy

Slide 27

Slide 27 text

CI/CD Pipelines git-pr-release git push go test go build docker build docker push ecspresso deploy 1 2 3 4

Slide 28

Slide 28 text

ECSͷdeployʹecspressoಋೖ • github.com/kayac/ecspresso • ecs-deploy͔Β৐Γ׵͑ • ৐Γ׵͑ઌͱͯͪ͠ΐ͏ͲΑ͔ͬͨ • طଘͷTask DefinitionΛར༻ͯͦ͠ͷ··γʔϜϨεʹ ҠߦՄೳ • CircleCI͔Βdeploy͍ͯ͠Δ • ଞʹ΋ kayac/go-katsubushi ͳͲkayac OSSΛ׆༻

Slide 29

Slide 29 text

ECS Task Definition͕reviewableʹ • Task΁ͷαΠυΧʔ௥Ճ΍ύϥϝʔλʔมߋ͕reviewable ʹͳͬͨͷ͸ྑ͔ͬͨ

Slide 30

Slide 30 text

github.com/Songmu/flextime • ςετͰ࣌ࠁܥΛࠩ͠ସ͑ΔͨΊͷϥΠϒϥϦ • timeύοέʔδͱಉ༷ͷΠϯλʔϑΣʔεΛඋ͑Δ

Slide 31

Slide 31 text

github.com/Songmu/smartcache • ϓϦϑΣον͢ΔΠϯϝϞϦΩϟογϡ • Ωϟογϡߋ৽ॲཧ͕ • ॏෳ͠ͳ͍Α͏ʹɾϒϩοΫ͠ͳ͍Α͏ʹ

Slide 32

Slide 32 text

ECS Scheduled Task؅ཧͷͨΊͷπʔϧecschedule • github.com/Songmu/ecschedule • όονྨ͸ɺECSͷScheduled TaskΛར༻͍ͯ͠Δ͕ͦΕ Λόʔδϣϯ؅ཧ͍ͨ͠ͱ͍͏ಈػ

Slide 33

Slide 33 text

খωλ: όονྨͷಈ͔͠ํ • APIͱworkerͱόον͸ಉ͡GoόΠφϦɺಉ͡ίϯςφ • Task Definition͸ҧ͏΋ͷ΋ • αϒίϚϯυͰॲཧΛ෼͚Δ • nature server: APIαʔόʔͷىಈ • nature squadrons: ϫʔΧʔͷىಈ • nature batch hoge ... : όονྨͷىಈ

Slide 34

Slide 34 text

34 ςετߴ଎ԽͷͨΊͷgotesplit • github.com/Songmu/gotesplit • CI؀ڥͰͷςετฒྻ࣮ߦΛ؆୯ʹ࣮ݱ • CircleCI / GitHub Actions • ࣾ಺ͷςετ͕࣌ؒ15෼->5෼ʹ • ͔ͳΓศརͳͷͰͥͻ͝ར༻͍ͩ͘͞

Slide 35

Slide 35 text

35 @soh335࡞ͷOSS • github.com/soh335/go-test-redisserver • github.com/soh335/shukujitsu (new!) • github.com/schemalex/schemalex • ← ͜Ε͸·ͩಋೖग़དྷ͍ͯͳ͍

Slide 36

Slide 36 text

36 github.com/soh335/shukujitsu • ࡢ൩஀ੜ • ҎԼͷσʔλΛ΋ͱʹ೔ຊͷॕ೔൑ఆ • https://www8.cao.go.jp/chosei/shukujitsu/syukujitsu.csv • ͜Ε͸typoͰ͸͋Γ·ͤΜ • σʔλϑΥʔϚοτ͸ឯ༨ۂં͋ͬͨΑ͏͕ͩࠓ͸ׂͱ·ͱ΋

Slide 37

Slide 37 text

37 ࣗ࡞OSSΛຊ൪ʹಋೖ͢Δ • ͱΓ͋͑ͣOSSͰ࡞ͬͯΈΔ • ࢼ͠ʹຊ൪౤ೖͯ͠͠·͏

Slide 38

Slide 38 text

OSS΁ͷpull request 38

Slide 39

Slide 39 text

39 nbio/hitch#11

Slide 40

Slide 40 text

40 nbio/hitch#12

Slide 41

Slide 41 text

41 kayac/go-katsubushi#40

Slide 42

Slide 42 text

42 blang/semver#56

Slide 43

Slide 43 text

43 pressly/goose#180

Slide 44

Slide 44 text

44 pressly/goose#181

Slide 45

Slide 45 text

45 kayac/ecspresso#37

Slide 46

Slide 46 text

46 kayac/ecspresso#38

Slide 47

Slide 47 text

47 kayac/ecspresso#161

Slide 48

Slide 48 text

48 guregu/dynamo#106

Slide 49

Slide 49 text

49 goccy/go-yaml#23

Slide 50

Slide 50 text

50 goccy/go-yaml#36

Slide 51

Slide 51 text

51 go-gorp/gorp#411

Slide 52

Slide 52 text

52 manifoldco/promptui#132

Slide 53

Slide 53 text

53 shogo82148/go-sql-proxy#42

Slide 54

Slide 54 text

54 OSS΁ͷpull request • ʮڠௐʯͰ͖Δ͔Λॏࢹ • pull requestΛૹͬͯΈͯ୳ΓΛೖΕΔ • ࢥ૝͕Ϛον͍ͯͦ͠͏͔ • ϝϯςφϯε͕ΞΫςΟϒ͔ • ϝϯςφϯε͕ࢭ·ͬͯΔͱࢥ͍͖΍͙͢ʹ ରԠͯ͘͠ΕΔ͜ͱ΋ • 1೥ܦ͔ͬͯΒϚʔδ͞ΕΔ͜ͱ΋

Slide 55

Slide 55 text

·ͱΊ 55

Slide 56

Slide 56 text

Natureͷ։ൃ • αʔόʔαΠυ͸΄΅શ෦Go • 10ສ୆௒͑ͷIoTσόΠεΛϋϯυϦϯά͢ΔWebSocketίϯςφ܈ • αʔόʔଆͷ੍ޚ͕݁ߏϔϏʔͰ໘ന͍ • ૊ΈࠐΈ΍Appͱͷ࿈ܞͷ໘ന͞ • OSSΛͪΌΜͱ׆༻͍ͨ͠ • ڠௐͰ͖ΔOSSΛબΜͰߩݙ΋͍ͯ͘͠ • OSSʹͰ͖Δ΋ͷ͸ͯ͠͠·͏

Slide 57

Slide 57 text

We are Hiring! ੵۃ࠾༻தͰ͢ʂ • όοΫΤϯυΤϯδχΞ • εϚʔτϑΥϯΤϯδχΞ • ϑϩϯτΤϯυΤϯδχΞ • ػցֶशΤϯδχΞ • ૊ΈࠐΈΤϯδχΞ