Slide 1

Slide 1 text

Ί΋Γʔ θϩϕʔε͔Β-BSBWFMΛ༻͍ͨ 
 "1*࣮૷Φʔτϝʔγϣϯ 1)1ΧϯϑΝϨϯε 1

Slide 2

Slide 2 text

ࣗݾ঺հ 2

Slide 3

Slide 3 text

@2020 Torana, Inc. @2020 Torana, Inc. Ί΋Γʔ ϓϩμΫτ։ൃ෦ Ϛωʔδϟʔ Ί΋ΓʔͪΌΜͷϑΥʔΫݩͰ͢ɻ 
 1)1Ͱ+7.Λ࣮૷ͨ͠ΓຊΛॻ͍ͯͨΓͯ͠ ·͢ɻೕ༮ࣇ޲͚͓΋ͪΌͷαϒεΫϦϓγϣ ϯαʔϏεΛఏڙ͢Δ5PSBOBͱ͍͏ձࣾʹ͍ ·͢ !NNS 3

Slide 4

Slide 4 text

@2020 Torana, Inc. ࠷ۙࢿۚௐୡ͠·ͨ͠ 4

Slide 5

Slide 5 text

΋͘͡ 5

Slide 6

Slide 6 text

@2020 Torana, Inc. ΋͘͡ τϥʔφͷ՝୊ ٕज़ͷҙࢥܾఆ Ͳ͏࡞͍͔ͬͯͬͨ ࡞͍ͬͯΔͱ͖ʹى͖ͨ՝୊ 6

Slide 7

Slide 7 text

@2020 Torana, Inc. ΋͘͡ ՝୊ΛͲ͏ղܾ͔ͨ͠ ·ͱΊ 7

Slide 8

Slide 8 text

τϥʔφͷ՝୊ 8

Slide 9

Slide 9 text

@2020 Torana, Inc. τϥʔφͷ՝୊ 4BB4ͰશͯΛ؅ཧ͍ͯͨ͠  ސ٬ͷ৘ใΛશͯ4BB4Ͱ؅ཧ͍ͯͨ͠  ͜ΕͰ΋'JMF.BLFS͔ΒҠ২ͨ͠ʢΒ͍͠ʣ  ଞػೳͱͷ࿈ܞ͸+BWB4DSJQUͰ֘౰ͷ4BB4͕ఏڙ͢Δ"1*Λ ࢖ͬͯߦ͍ͬͯͨ  "1*Λେྔʹୟͨ͘Ίސ٬ৄࡉϖʔδΛ։͘ͷʹඵఔ౓ 
 ͔͔͍ͬͯΔ 9

Slide 10

Slide 10 text

@2020 Torana, Inc. τϥʔφͷ՝୊ 4BB4ͰશͯΛ؅ཧ͍ͯͨ͠  αʔϏεͷεέʔϧͱγεςϜͷεέʔϧ͕ؒʹ߹͓ͬͯΒͣ "1*ͷ3BUF-JNJUʹසൟʹҾ͔͔ͬΔΑ͏ʹͳͬͨ  લ೚ऀ͕όϯυϧ͞Εͨ+BWB4DSJQU͚ͩΛஔ͍ͯڈ͍ͬͯͬͨ  ݩʑͷιʔείʔυ͸ͳ͍ɻ  ͦͯ͠ຊ൪؀ڥ͔͠ͳ͍ͷͰςετ͕Ͱ͖ͳ͍ 10

Slide 11

Slide 11 text

@2020 Torana, Inc. τϥʔφͷ՝୊ ಥ೗ݱΕΔ(PPHMF"QQT&OHJOF  1)1ͷ4MJNͰ࣮૷͞Ε͍ͯͨ  ޾͍೉ಡԽ͸͞Ε͍ͯͳ͔ͬͨ  ͨ·ʹ"MMPXFENFNPSZTJ[FΤϥʔΛు͍ͯࢮ͵  ΠϯελϯεΛڧԽ͠ɺۚͰղܾΛ͍ͯ͠Δ 11

Slide 12

Slide 12 text

@2020 Torana, Inc. τϥʔφͷ՝୊ ಥ೗ݱΕΔ(PPHMF"QQT&OHJOF  Ϣʔβʔ͕ਃࠐΉͱɺϝʔϧΛಛఆͷϝʔϧΞυϨεͰड৴͠ ͯDSPOͰఆظతʹड৴ͨ͠ϝʔϧΛर͍ɺ࠷ޙʹύʔεͯ͠ 4BB4ʹొ࿥͢Δػೳ͕උΘ͍ͬͯΔ  ͜Ε΋ຊ൪؀ڥ͔͠ͳ͍ͷͰςετ͕Ͱ͖ͳ͍ 12

Slide 13

Slide 13 text

͜ͷ՝୊ͰԿ͕ى͜Δͷ͔ 13

Slide 14

Slide 14 text

@2020 Torana, Inc. ՝୊ͷ໰୊఺ αʔϏε͕εέʔϧ͢Δ౓ʹαʔϏεͷ 
 ण໋͕ॖΉ 4BB4ʹϩοΫΠϯ͞Ε͗ͯ͢ϓϩμΫτͷ 
 εέʔϧ͕Ͱ͖ͳ͍ 14

Slide 15

Slide 15 text

αʔϏε͕εέʔϧ͢Δ౓ʹαʔϏεͷ 
 ण໋͕ॖΉ 15

Slide 16

Slide 16 text

@2020 Torana, Inc. αʔϏε͕εέʔϧ͢Δ౓ʹαʔϏεͷण໋͕ॖΉ ͓͔͛͞·Ͱ͝ར༻͍͍͍ͨͩͯΔ͓٬༷͸໿ ਓͱͳΓ·ͨ͠ 0 1750 3500 5250 7000 2015 2016 2018 2020 16

Slide 17

Slide 17 text

͋ͱ͸෼͔Γ·͢Ͷʁ 17

Slide 18

Slide 18 text

@2020 Torana, Inc. τϥʔφͷ՝୊ 4BB4ͰશͯΛ؅ཧ͍ͯͨ͠  ސ٬ͷ৘ใΛશͯ4BB4Ͱ؅ཧ͍ͯͨ͠  ଞػೳͱͷ࿈ܞ͸+BWB4DSJQUͰ֘౰ͷ4BB4͕ఏڙ͢Δ"1*Λ ࢖ͬͯߦ͍ͬͯͨ  "1*Λେྔʹୟͨ͘Ίސ٬ৄࡉϖʔδΛ։͘ͷʹඵఔ౓ 
 ͔͔͍ͬͯΔ 18

Slide 19

Slide 19 text

@2020 Torana, Inc. τϥʔφͷ՝୊ 4BB4ͰશͯΛ؅ཧ͍ͯͨ͠  αʔϏεͷεέʔϧͱγεςϜͷεέʔϧ͕ؒʹ߹͓ͬͯΒͣ "1*ͷ3BUF-JNJUʹසൟʹҾ͔͔ͬΔΑ͏ʹͳͬͨ  લ೚ऀ͕όϯυϧ͞Εͨ+BWB4DSJQU͚ͩΛஔ͍ͯڈ͍ͬͯͬͨ  ݩʑͷιʔείʔυ͸ͳ͍ɻ  ͦͯ͠ຊ൪؀ڥ͔͠ͳ͍ͷͰςετ͕Ͱ͖ͳ͍ 19

Slide 20

Slide 20 text

ࠁҰࠁͱഭΔαʔϏεͷण໋Λ 
 ײ͡औΕ·͔ͨ͠ʁ 20

Slide 21

Slide 21 text

4BB4ʹϩοΫΠϯ͞Ε͗ͯ͢ϓϩμΫτͷ 
 εέʔϧ͕Ͱ͖ͳ͍ 21

Slide 22

Slide 22 text

@2020 Torana, Inc. 4BB4ʹϩοΫΠϯ͞Ε͗ͯ͢ϓϩμΫτͷεέʔϧ͕Ͱ͖ͳ͍ "1*ͷ3BUF-JNJU͕͋ΔͨΊɺରࣾ֎Ϣʔβʔ ޲͚ϓϩμΫτͷ։ൃʹࢧো͕ग़ͯ͠·͍ͬͯΔ 4BB4ʹϩοΫΠϯ͍ͯ͠Διʔείʔυ͕ 
 όϯυϧ͞Εͨ+BWB4DSJQUͱ("&ͷίʔυͷΈ ͦͯ͠ςετ؀ڥ͕ͳ͍ɻຊ൪؀ڥςετ 
 22

Slide 23

Slide 23 text

@2020 Torana, Inc. τϥʔφͷ՝୊ 4BB4ͰશͯΛ؅ཧ͍ͯͨ͠  ސ٬ͷ৘ใΛશͯ4BB4Ͱ؅ཧ͍ͯͨ͠  ଞػೳͱͷ࿈ܞ͸+BWB4DSJQUͰ֘౰ͷ4BB4͕ఏڙ͢Δ"1*Λ ࢖ͬͯߦ͍ͬͯͨ  "1*Λେྔʹୟͨ͘Ίސ٬ৄࡉϖʔδΛ։͘ͷʹඵఔ౓ 
 ͔͔͍ͬͯΔ 23

Slide 24

Slide 24 text

@2020 Torana, Inc. τϥʔφͷ՝୊ 4BB4ͰશͯΛ؅ཧ͍ͯͨ͠  αʔϏεͷεέʔϧͱγεςϜͷεέʔϧ͕ؒʹ߹͓ͬͯΒͣ "1*ͷ3BUF-JNJUʹසൟʹҾ͔͔ͬΔΑ͏ʹͳͬͨ  લ೚ऀ͕όϯυϧ͞Εͨ+BWB4DSJQU͚ͩΛஔ͍ͯڈ͍ͬͯͬͨ  ݩʑͷιʔείʔυ͸ͳ͍ɻ  ͦͯ͠ຊ൪؀ڥ͔͠ͳ͍ͷͰςετ͕Ͱ͖ͳ͍ 24

Slide 25

Slide 25 text

@2020 Torana, Inc. τϥʔφͷ՝୊ ಥ೗ݱΕΔ(PPHMF"QQT&OHJOF  1)1ͷ4MJNͰ࣮૷͞Ε͍ͯͨ  ޾͍೉ಡԽ͸͞Ε͍ͯͳ͔ͬͨ  ͨ·ʹ"MMPXFENFNPSZTJ[FΤϥʔΛు͍ͯࢮ͵  ΠϯελϯεΛڧԽ͠ɺۚͰղܾΛ͍ͯ͠Δ 25

Slide 26

Slide 26 text

@2020 Torana, Inc. τϥʔφͷ՝୊ ಥ೗ݱΕΔ(PPHMF"QQT&OHJOF  Ϣʔβʔ͕ਃࠐΉͱɺϝʔϧΛಛఆͷϝʔϧΞυϨεͰड৴͠ ͯDSPOͰఆظతʹड৴ͨ͠ϝʔϧΛर͍ɺ࠷ޙʹύʔεͯ͠ 4BB4ʹొ࿥͢Δػೳ͕උΘ͍ͬͯΔ  ͜Ε΋ຊ൪؀ڥ͔͠ͳ͍ͷͰςετ͕Ͱ͖ͳ͍ 26

Slide 27

Slide 27 text

ΧΦεͷҰݴͰࣄ଍Γ·͢Ͷ 27

Slide 28

Slide 28 text

͜ͷۤ೉Λ৐Γӽ͑Δ΂͘ 
 γεςϜͷϑϧϦϓϨΠεΛ͸͡Ί·ͨ͠ 28

Slide 29

Slide 29 text

ٕज़ͷҙࢥܾఆ 29

Slide 30

Slide 30 text

ϑϧϦϓϨʔεͷ৔߹ 
 Կ͔ΒखΛ෇͚Δ΂͖͔͕೰·͍͠ 30

Slide 31

Slide 31 text

ͦͷͨΊɺखॱΛચ͍ग़ͯ͠ਐΊ͍͖ͯ·͢ 31

Slide 32

Slide 32 text

DB Ҡߦ όοΫΤϯυ࣮૷ ࡞ۀϑϩʔચ͍ग़͠ SaaS ͷ࢖༻ɾෆ࢖༻ 
 ߲໨ͷચ͍ग़͠ DB εΩʔϚͷఆٛ 32

Slide 33

Slide 33 text

ͳ͓ɺຊ೔ϝΠϯʹ࿩͢ͷ͸ͪ͜Β 33

Slide 34

Slide 34 text

DB Ҡߦ όοΫΤϯυ࣮૷ ࡞ۀϑϩʔચ͍ग़͠ SaaS ͷ࢖༻ɾෆ࢖༻ 
 ߲໨ͷચ͍ग़͠ DB εΩʔϚͷఆٛ 34

Slide 35

Slide 35 text

όοΫΤϯυͷ࣮૷ 35

Slide 36

Slide 36 text

@2020 Torana, Inc. όοΫΤϯυͷ࣮૷  ͜ͷ࣌ɺόοΫΤϯυΤϯδχΞ͕ࢲΛؚΊͯۀ຿ҕୗͷํ໊ͩͬͨ  ͕࣌ؒݶΒΕ͍ͯΔதɺݎ࣮ͳΞϓϦέʔγϣϯ࡞੒Λ໨ࢦ͍ͨ͠  ΋ͪΖΜόοΫΤϯυͷ࣮૷Ҏ֎ʹ΋ϑϩϯτΤϯυͷ࣮૷͕ඞཁ  ϑϩϯτΤϯυ͕Ͱ͖ΔͷΤϯδχΞ͕ࢲ͔͍͠ͳ͍ 36

Slide 37

Slide 37 text

΋͏Ұճݱঢ়ΛৼΓฦͬͯΈ·͢ 37

Slide 38

Slide 38 text

@2020 Torana, Inc. όοΫΤϯυͷ࣮૷ αʔϏε͕εέʔϧ͢Δ౓ʹαʔϏεͷ 
 ण໋͕ॖΉ 4BB4ʹϩοΫΠϯ͞Ε͗ͯ͢ϓϩμΫτͷ 
 εέʔϧ͕Ͱ͖ͳ͍ 38

Slide 39

Slide 39 text

ݶΒΕͨ࣌ؒͷதͰɺ͍͔ʹૣ͘ όοΫΤϯυΛ࣮૷͢Δ͔͕伴Ͱͨ͠ 39

Slide 40

Slide 40 text

ͦ͜ͰͭͷίϚϯυΛ࣮ߦ͢Δ͚ͩͰ 
 "1*ΛҰͭੜ΍ͤΔΑ͏ʹ͠Α͏ 40

Slide 41

Slide 41 text

ͲͷΑ͏ʹٕज़બఆΛߦ͔ͬͨ 41

Slide 42

Slide 42 text

@2020 Torana, Inc. ͲͷΑ͏ʹٕज़બఆΛߦͬͨͷ͔ ֶशίετ ࠾༻ࢢ৔ ϞμϯͰ͋Δ͔ ύϑΥʔϚϯε 42

Slide 43

Slide 43 text

@2020 Torana, Inc. ͲͷΑ͏ʹٕज़બఆΛߦͬͨͷ͔ ֶशίετ  υΩϡϝϯτ͕๛෋Ͱ͋Δ͔Ͳ͏͔  ϑϧλΠϜͰ࢖͏ࢲΛؚΉϝϯόʔʹͱֶͬͯश೉қ౓͕ߴ͍΋ ͷͰ͸ͳ͍͔  ଟ͘ͷਓֶ͕ΜͰ͍ͦ͏Ͱ͋Δ͔ 43

Slide 44

Slide 44 text

@2020 Torana, Inc. ͲͷΑ͏ʹٕज़બఆΛߦͬͨͷ͔ ࠾༻ࢢ৔  ౰ٕ֘ज़ΛελʔτΞοϓͷ·ͩ·໊ͩ΋߾͍͍ͯͳ͍ձ͕ࣾ ࠾༻ࢢ৔ʹೖΓࠐΊΔ༨஍͸͋Δ͔  ϑϧλΠϜͰಇ͘ਓͷϦϑΝϥϧ͕༗Γಘͦ͏͔ 44

Slide 45

Slide 45 text

@2020 Torana, Inc. ͲͷΑ͏ʹٕज़બఆΛߦͬͨͷ͔ ϞμϯͰ͋Δ͔  όοΫΤϯυͷण໋͕௕͍΋ͷͰ͋Δͱஔ͍ͨ࣌ɺࠓϞμϯͳ ٕज़Ͱ΋਺೥ޙʹ͸ރΕٕͨज़ʹͳΔՄೳੑ͕͋Δ  ͦͷͨΊɺͰ͖Δ͚ͩϞμϯͳٕज़Λબఆ͢Δ  ७ਮʹϞμϯͳ΋ͷͰ͋Ε͹࠾༻ࢢ৔΋޿͘ͳΓ͑ͦ͏ 
 ʢڵຯΛ࣋ͬͯ΋Β͑Δʣ 45

Slide 46

Slide 46 text

@2020 Torana, Inc. ͲͷΑ͏ʹٕज़બఆΛߦͬͨͷ͔ ύϑΥʔϚϯε  ͦͷٕज़Λ࢖ͬͯύϑΥʔϚϯενϡʔχϯά͕ߦ͑Δ͔Ͳ͏͔  ྫ͑͹03.ʹϩοΫΠϯ͗͢͠ΔͱύϑΥʔϚϯενϡʔχϯ άΛ͢ΔࡍʹোนʹͳΔՄೳੑ͕༧ݟ͞ΕΔ  ӈݞ্͕Γʹσʔλ͕૿͑ΔͨΊɺ๲େͳσʔλྔͰ΋ॲཧ͕Ͱ ͖Δ΋ͷΛબఆ 46

Slide 47

Slide 47 text

ͭͷίϚϯυͰ"1*Λੜ΍ͨ͢Ίʹ 
 ඞཁͳݕ౼ࣄ߲ 47

Slide 48

Slide 48 text

@2020 Torana, Inc. ඞཁͳݕ౼ࣄ߲ ڞ௨Խ ςετ υΩϡϝϯτ ύϑΥʔϚϯε 48

Slide 49

Slide 49 text

@2020 Torana, Inc. ඞཁͳݕ౼ࣄ߲ ڞ௨Խ  $36% $SFBUF 3FBE 6QEBUF %FMFUF Λओ࣠ͱͯ͠ɺ"1*࡞੒ޙʹ 
 ΄΅ฤू͢Δඞཁͷͳ͍ͱ͜Ζ·Ͱڞ௨ԽΛ͢Δ  ΋ͪΖΜҰ෦ྫ֎ͳॲཧ΋͋ΔͷͰͦΕʹରԠͰ͖ΔΑ͏ʹ 
 ॊೈੑΛ࢒͢  ςʔϒϧͷεΩʔϚͱϨεϙϯεΛ߹ΘͤΔͷΛج४ʹ  Ұ෦ฦͨ͘͠ͳ͍஋΍໊લΛม͍͑ͨ৔߹ɺςʔϒϧͷεΩʔϚʹͳ͍ ΋ͷ΋ߟྀ͢Δ 49

Slide 50

Slide 50 text

@2020 Torana, Inc. ඞཁͳݕ౼ࣄ߲ ςετ  ݎ࣮ͳΞϓϦέʔγϣϯΛ໨ࢦͨ͢Ίɺςετ΋ 
 ਖ਼ৗܥύλʔϯɺҟৗܥύλʔϯͷ྆ํΛࣗಈతʹੜ੒͢ΔΑ͏ʹ͢Δ  ༧Ίςετ༻ͷγʔυσʔλΛࣗಈతʹੜ੒͢ΔΑ͏ʹ  ༧Ί3%#ʹೖΕ͓ͯ͘΋ͷ  ΦϒδΣΫτΛม্͑ͨͰςετ͔Β3%#্ʹ౤ೖͰ͖ΔΑ͏ʹͯ͠ ͓͘΋ͷ 50

Slide 51

Slide 51 text

@2020 Torana, Inc. ඞཁͳݕ౼ࣄ߲ υΩϡϝϯτ  υΩϡϝϯτॻ͍ͨΒউखʹίʔυ͕ੜ੒͞Εͯ΄͍͠ʂ  "1*ͷఆٛॻΛݩʹউखʹ"1*Λੜ੒͢ΔΑ͏ʹ  "1*ͷఆٛॻυΩϡϝϯτͱ͍͏ܗʹ͢Δ  ͭ·ΓΤϯδχΞ͸"1*ఆٛॻ͑͞ॻ͚͹ɺ΄΅࣮૷໘ͷίʔυΛ 
 ॻ͔ͳͯ͘ࡁΈɺΑΓݎ࣮ͳΞϓϦέʔγϣϯΛ໨ࢦ͢ํ޲ͷ 
 ίʔυΛॻ͘͜ͱʹϑΥʔΧεͰ͖Δ 51

Slide 52

Slide 52 text

@2020 Torana, Inc. ඞཁͳݕ౼ࣄ߲ ύϑΥʔϚϯε  ݕࡧʹ֘౰͢Δͱ͜Ζ͸શจݕࡧΤϯδϯΛ࢖༻ͯ͠ύϑΥʔϚϯεΛ 
 ޲্͍ͤͨ͞  શจݕࡧΤϯδϯͷϚοϐϯάఆٛΛ"1*ఆٛॻΛݩʹͯࣗ͠ಈੜ੒  ςʔϒϧͷεΩʔϚ͔ΒॏΈ෇͚ΛύλʔϯʹΑͬͯ෼͚ΔΑ͏ʹ  ྫ͑͹ސ٬ͷࢯ໊ͷ৔߹͸είΞΛΑΓॏࢹ͢ΔΑ͏ʹ  ి࿩൪߸ݕࡧͷ৔߹͸ి࿩൪߸ΛΑΓॏࢹ͢ΔΑ͏ͳ෭࡞༻Λ 52

Slide 53

Slide 53 text

ͭ·ΓʜͭͷίϚϯυΛୟ͚ͩ͘Ͱʜ 53

Slide 54

Slide 54 text

@2020 Torana, Inc. ͭͷίϚϯυΛୟ͚ͩ͘Ͱʜ "1*ఆٛॻΛݩʹҎԼͷ΋ͷ͕ࣗಈతʹੜ੒͞Ε·͢  $36%ʹରԠͨ͠"1*  શจݕࡧΤϯδϯͷϚοϐϯά  ਖ਼ৗܥςετɾҟৗܥςετ  ςετ༻ͷγʔυσʔλɾϑΟΫενϟ 54

Slide 55

Slide 55 text

@2020 Torana, Inc. ͭͷίϚϯυΛୟ͚ͩ͘Ͱʜ ςετͷ਺͕ 1,011, Ξαʔγϣϯͷ਺͕ 4,577 ͱ
 ςετ͕ͳ͍؀ڥ͔Β͜͜·Ͱͷ਺ʹ େྔͷϚοϐϯά༻ͷΫϥεͱςετ 55

Slide 56

Slide 56 text

"1*ݸͭ͘Δͷʹ෼ʙ෼Ͱ׬ྃ͠ ։ൃ࣌ؒͱίετΛѹ౗తʹ୹ॖ 56

Slide 57

Slide 57 text

ͱ͍͏͜ͱͰʜ 57

Slide 58

Slide 58 text

@2020 Torana, Inc. PHP Laravel PHPUnit composer MySQL 8 elasticsearch redis AWS docker OpenAPI 58

Slide 59

Slide 59 text

@2020 Torana, Inc. swoole + laravel-swoole New Relic PagerDuty Terraform SendGrid Packer Raygun 59

Slide 60

Slide 60 text

Ҏ্͕ฐࣾͷٕज़ελοΫͰ͢ 60

Slide 61

Slide 61 text

Ͳ͏࡞͍͔ͬͯͬͨ 61

Slide 62

Slide 62 text

@2020 Torana, Inc. Ͳ͏࡞͍͔ͬͯͬͨ 0QFO"1*ͱ.PEFMͷ૒ํؒͰίϯόʔτͰ͖Δ࢓૊ΈΛ༻ҙ  ։ൃ෦Ͱ͸/PSNBMJ[FSͱݺΜͰ͍·͢  ͜ΕʹΑΓϞσϧ͕͍࣋ͬͯΔσʔλΛ0QFO"1*ʹίϯόʔτͨ͠ͱ͖ ʹނҙతʹ৘ใΛࣦΘͤΔ͜ͱ͕Ͱ͖Δ  Ծ૝ϑΟʔϧυͷ֓೦ΛऔΓೖΕΒΕΔΑ͏ʹ  ฐࣾͷγεςϜͷத֩ͱ͍ͬͯ΋աݴͰ͸ͳ͍ 62

Slide 63

Slide 63 text

@2020 Torana, Inc. Ͳ͏࡞͍͔ͬͯͬͨ 0QFO"1*ͱ.PEFMͷ૒ํؒͰίϯόʔτͰ͖Δ࢓૊ΈΛ༻ҙ  ݱ৬ʹݶΒͣ࢓༷มߋ͕ଟʑ߱Γֻ͔ͬͨ͜ͱ͕͋Γɺ࢓༷มߋ͕ 
 ൃੜͯ͠΋ॊೈʹ͔ͭૣٸʹରԠ͍ͨ͠ͱ͍͏͜ͱͰ 
 /PSNBMJ[FSͱ͍͏֓೦͕ੜ·Εͨ 63

Slide 64

Slide 64 text

@2020 Torana, Inc. 0QFO"1*ͱ.PEFMͷ૒ํؒͰίϯόʔτͰ͖Δ࢓૊ΈΛ༻ҙ Model A 
 Attributes Normalizer 
 Recipe hasMany belongsTo belongsToMany Model B 
 Attributes Model C 
 Attributes Model D 
 Attributes Model A ͷ Attribute 
 ΛϨγϐʹ͔͚Δ ϦϨʔγϣϯؔ܎ͷϞσϧΛऔಘ͢Δ Model A ͱಉ༷ʹϨγϐʹ͔͚ͯɺಉ༷ͷॲཧΛ܁Γฦ͢ Scalar Value Model ͷ Attributes ΛͲ͏ม׵͢Δ͔Λ
 ॻ͍ͨϨγϐ Model Normalizer OpenAPI ϒϥ΢β ΞϓϦέʔγϣϯ 64

Slide 65

Slide 65 text

@2020 Torana, Inc. 0QFO"1*ͱ.PEFMͷ૒ํؒͰίϯόʔτͰ͖Δ࢓૊ΈΛ༻ҙ OpenAPI Normalizer Model ΞϓϦέʔγϣϯ OpenAPI Model A 
 Attributes Normalizer 
 Recipe hasMany belongsTo belongsToMany OpenAPI Model B 
 Attributes OpenAPI Model C 
 Attributes OpenAPI Model D 
 Attributes OpenAPI Model A ͷ Attribute 
 ΛϨγϐʹ͔͚Δ ϦϨʔγϣϯؔ܎ͷϞσϧΛऔಘ͢Δ OpenAPI Model A ͱಉ༷ʹϨγϐʹ͔͚ͯɺಉ༷ͷॲཧΛ܁Γฦ͢ Scalar Value OpenAPI Model ͷ Attributes ΛͲ͏ม׵͢Δ͔Λ
 ॻ͍ͨϨγϐ ϒϥ΢β 65

Slide 66

Slide 66 text

@2020 Torana, Inc. 0QFO"1*ͱ.PEFMͷ૒ํؒͰίϯόʔτͰ͖Δ࢓૊ΈΛ༻ҙ ʢॳظͷߏ૝Ͱ͢ʣ (MADRAS ͸ࣾ಺γεςϜͷ໊લͰ͢) 66

Slide 67

Slide 67 text

@2020 Torana, Inc. 0QFO"1*ͱ.PEFMͷ૒ํؒͰίϯόʔτͰ͖Δ࢓૊ΈΛ༻ҙ ୯ҰϞσϧͷऔಘ ෳ਺Ϟσϧͷऔಘ ࣗ෼Ͱఆٛͨ͠ํ๏Ͱ஋Λऔಘ Model -> OpenAPI
 ͷϨγϐ 67

Slide 68

Slide 68 text

@2020 Torana, Inc. 0QFO"1*ͱ.PEFMͷ૒ํؒͰίϯόʔτͰ͖Δ࢓૊ΈΛ༻ҙ Model -> OpenAPI
 ͷϨγϐ Ծ૝ϑΟʔϧυͷઃఆ 
 ʢDB ͷϞσϧʹͳ͍΋ͷʣ ࣍ճͷൃૹ೔ͳͲΛฦ͢ 
 ࣗલͷϩδοΫΛॻ͚Δ 68

Slide 69

Slide 69 text

@2020 Torana, Inc. 0QFO"1*ͱ.PEFMͷ૒ํؒͰίϯόʔτͰ͖Δ࢓૊ΈΛ༻ҙ ෳ਺Ϟσϧͷऔಘ foreign key Λมߋͨ͠ 
 ୯ҰϞσϧͷऔಘ OpenAPI -> Model ͷϨγϐ 69

Slide 70

Slide 70 text

@2020 Torana, Inc. 0QFO"1*ͱ.PEFMͷ૒ํؒͰίϯόʔτͰ͖Δ࢓૊ΈΛ༻ҙ ࣗಈͰੜ੒͞Εͨ/PSNBMJ[FS͕େྔʹ͋Δ  ͭͷ"1*ʹ͖ͭͭ/PSNBMJ[FS͕ 
 ࣗಈͰੜ੒͞Ε·͢ 0QFO"1* .PEFM .PEFM0QFO"1*   ࣗಈͰੜ੒͞Εͨ΋ͷΛख௚͠Λ͢Δ ͚ͩͰඞཁͳϨεϙϯεΛ૊ΈཱͯΔ ͜ͱ͕Ͱ͖ɺผͷ։ൃʹ஫ྗͰ͖ΔΑ ͏ʹ 70

Slide 71

Slide 71 text

@2020 Torana, Inc. Ͳ͏࡞͍͔ͬͯͬͨ .PEFMͷߋ৽࣌ʹ༷ʑͳॲཧΛ͢ΔΑ͏ʹ  σʔλ࡞੒࣌ɾߋ৽࣌ɾ࡟আ࣌ʹ͸ɺ%#ͷεΩʔϚΛϕʔεʹͨ͠ &MBTUJDTFBSDIͷΠϯσοΫεʹରͯ͠ߋ৽͕͔͔ΔΑ͏ʹ͠ɺ 
 શจݕࡧʹରͯ͠Կ΋ߟ͑ͳ͍ͰࡁΉΑ͏ʹ  ϦϨʔγϣϯ͍ͯ͠ΔϞσϧ΋ࣗಈͰ࡞੒ɾߋ৽ɾ࡟আͳͲࣗಈతʹॲཧ ͞ΕΔΑ͏ʹͯ͠ɺϦϨʔγϣϯͷϞσϧʹରͯ͠Կ΋ߟ͑ͳ͍ͰࡁΉΑ ͏ʹ  Ωϟογϡ΋อଘɾ࡟আ͠ɺύϑΥʔϚϯεΛ༧Ί޲্͓ͤͯ͘͞ 71

Slide 72

Slide 72 text

@2020 Torana, Inc. .PEFMͷߋ৽࣌ʹ༷ʑͳॲཧΛ͢ΔΑ͏ʹ Model A Model::saved Create or Update Delete Model B Model::deleted ※ AppModel ͸ Model Λܧঝͨ͠ΫϥεͰ͢ɻ͢΂ͯͷϞσϧ͸ AppModel Λܧঝ͢ΔΑ͏ʹͳ͍ͬͯ·͢ɻ Elasticsearch RDB Elasticsearch ʹ΋อଘɾ࡟আ อଘɾ࡟আ࣌ʹ݁ՌΛ༧ΊΩϟογϡ͓ͯ͘͠ Model A ʹඥ෇͚ΒΕͨ 
 Model B ΋อଘ Model A ͷΈ࡟আ 
 (Model B ͸࡟আ͠ͳ͍) Redis 72

Slide 73

Slide 73 text

@2020 Torana, Inc. Ͳ͏࡞͍͔ͬͯͬͨ ݕࡧΫΤϦ͸͢΂ͯ&MBTUJDTFBSDI΁  %#εΩʔϚͱݕࡧΫΤϦΛϚοϐϯάͤ͞ɺΫΤϦจࣈྻ͔Β &MBTUJDTFBSDIͷݕࡧΫΤϦΛߏங͠ɺݕࡧͤ͞ΔΑ͏ʹ  ·ͨɺ͸͡Ί͔Β-BSBWFMͷSFTPVSDFͷJOEFY͸͢΂ͯ&MBTUJDTFBSDI Λࢀর͢ΔΑ͏ʹ͠ɺ&MBTUJDTFBSDIͷ͜ͱΛߟ͑ͳ͍Α͏ʹ  &MBTUJDTFBSDIͰݕࡧͰ͖Δ಺༰Λऔಘ͢ΔͨΊͷ"1*Λ༧Ίੜ΍͠ɺ 
 ϑϩϯτΤϯυͰݕࡧ৚݅Λ࠶ఆٛ͢ΔඞཁΛແ͘͠ɺ։ൃͷ࠷దԽ΁  ͳΔ΂͘3%#͸ࢀরͤ͞ͳ͍ 73

Slide 74

Slide 74 text

@2020 Torana, Inc. ݕࡧΫΤϦ͸͢΂ͯ&MBTUJDTFBSDI΁ /api/v1/XXX?created_at[value][start]=2020-12-12 ... + { ... query: { must: [ { range: { created_at: { gte: "2020-12-12", } } } ] } ... } Elasticsearch Ϛοϐϯά͔ΒΫΤϦͷ
 ଥ౰ੑΛධՁ͠ม׵΁ Elasticsearch Ͱݕࡧ ΫΤϦจࣈྻ͔Β Elasticsearch ͷݕࡧΫΤϦʹม׵ Ϛοϐϯάʹͳ͍΋ͷ͸
 ݕࡧͤ͞ͳ͍ ϚοϐϯάͱΫΤϦจࣈྻ
 ͰͷܕͷධՁ΋͜͜Ͱߦ͏ 74

Slide 75

Slide 75 text

@2020 Torana, Inc. ݕࡧΫΤϦ͸͢΂ͯ&MBTUJDTFBSDI΁ /api/v1/XXX + { ... query: { match_all: {} } ... } Elasticsearch ௨ৗͷ index ΋ Elasticsearch Λհ͢ Elasticsearch Ͱݕࡧ ݕࡧ৚͕݅ಛʹͳ͍৔߹͸ match_all Ͱ 75

Slide 76

Slide 76 text

@2020 Torana, Inc. ݕࡧΫΤϦ͸͢΂ͯ&MBTUJDTFBSDI΁ ݕࡧ৚݅Λࣗಈੜ੒  &MBTUJDTFBSDIͰݕࡧͰ͖Δ΋ͷΛ 
 औಘ͠ɺϑϩϯτଆ͸ͨͩͦΕΛ 
 දࣔ͢Δ͚ͩ  ݕࡧ৚݅ʹ͋ͬͨϑΥʔϜΛશը໘ʹ खͰೖΕΔͷ͸ඇޮ཰ͩ͠ے೑Τϯδ χΞ͕଍Γͳ͍  ͦΕͱ७ਮʹॻ͘ͷ͕ਏ͍ 76

Slide 77

Slide 77 text

@2020 Torana, Inc. ݕࡧΫΤϦ͸͢΂ͯ&MBTUJDTFBSDI΁ API ͷ݁Ռ͔ΒϑΥʔϜΛ࡞੒ 77

Slide 78

Slide 78 text

@2020 Torana, Inc. ݕࡧΫΤϦ͸͢΂ͯ&MBTUJDTFBSDI΁ API ͷ݁Ռ͔ΒϑΥʔϜΛ࡞੒ input ͷ text ΍ number ΛܾΊ·͢ ϦϨʔγϣϯΛϕʔεʹηϨΫτϘοΫεͷ ஋Λऔಘ͢ΔͨΊͷΤϯυϙΠϯτΛఆٛ͠ ͍ͯ·͢ type ͕ date ͷ৔߹ɺ։࢝೔ͱ 
 ऴྃ೔ΛࣗಈతʹೖΕΔΑ͏ʹ 78

Slide 79

Slide 79 text

@2020 Torana, Inc. ݕࡧΫΤϦ͸͢΂ͯ&MBTUJDTFBSDI΁ API ͷ݁Ռ͕ΤϯυϙΠϯτͩͬͨ৔߹ɺ 
 ηϨΫτϘοΫεͷ஋Λউखʹ 
 ೖΕͯ͘ΕΔΑ͏ʹ 79

Slide 80

Slide 80 text

@2020 Torana, Inc. Ͳ͏࡞͍͔ͬͯͬͨ 0QFO"1*Λఆٛͯ͠ɺίϚϯυͰϑΝΠϧΛ࡞੒  AQIQBSJTBONBLFYYYAͰඞཁͳϑΝΠϧΛࣗಈͰ࡞੒Ͱ͖ΔΑ͏ʹ  όοΫΤϯυΤϯδχΞ͸όϦσʔγϣϯϧʔϧͷఆٛͱ 
 /PSNBMJ[FS ϧʔςΟϯάͷఆٛΛ͢Δ͚ͩ  ͜ͷؒͷ࡞ۀ࣌ؒ͸໿෼͔Β෼ఔ౓ͰऴΘΔ  ΑͬͯόοΫΤϯυΤϯδχΞ͸ύϑΥʔϚϯενϡʔχϯάʹ 
 ஫ྗ͢Δ͜ͱ͕Ͱ͖Δ 80

Slide 81

Slide 81 text

@2020 Torana, Inc. 0QFO"1*Λఆٛͯ͠ɺίϚϯυͰϑΝΠϧΛ࡞੒ ςετͱϑΟΫενϟɺίϯτϩʔϥͳͲ 
 "1*ʹඞཁͳ΋ͷΛશͯࣗಈͰੜ੒  ࡞੒͞ΕΔϑΝΠϧ͸ܭϑΝΠϧ  4BB4࣌୅͔ΒͷϏδωεϩδοΫΛ੔ཧ͠ɺγϯϓϧͰΑΓந৅Խ͠΍ ͘͢ɺͨͩ"1*͝ͱʹඍົͳࠩҟ͕ੜ·ΕΔՄೳੑ΋͋ΔͨΊɺҰ෦ 
 ந৅Խ͸ͤͣɺόϥϯεΛ࣮࣋ͬͯ૷  ௨ৗͷϧʔςΟϯά͸࡞੒͞Εͨίϯτϩʔϥʔ΁ɺςετ࣌͸ϞοΫͱ ͯ͠࡞੒͞ΕͨίϯτϩʔϥʔΛࢀর͢ΔΑ͏ʹ 81

Slide 82

Slide 82 text

@2020 Torana, Inc. 0QFO"1*Λఆٛͯ͠ɺίϚϯυͰϑΝΠϧΛ࡞੒ ςετͱϑΟΫενϟɺίϯτϩʔϥͳͲ 
 "1*ʹඞཁͳ΋ͷΛશͯࣗಈͰੜ੒  ςετ͸໿ ݅͋ΓɺΞαʔγϣϯ͸ ݅͋Δ  4BB4͔͠ͳ͍ঢ়ଶ͔Β਺ϲ݄Ͱςετ͕͜͜·Ͱ͋Δͷ͸͍ͩͿ௝͍͠ 82

Slide 83

Slide 83 text

@2020 Torana, Inc. 0QFO"1*Λఆٛͯ͠ɺίϚϯυͰϑΝΠϧΛ࡞੒ ςετͱϑΟΫενϟɺίϯτϩʔϥͳͲ 
 "1*ʹඞཁͳ΋ͷΛશͯࣗಈͰੜ੒  θϩϕʔε͔ͩΒͦ͜ςετ͸ઈରʹඞཁ  2"ΤϯδχΞ͕͍ͳ͍ɺগਓ਺ɺ࢓༷͕සൟʹมΘΔ͔Βͦ͜ςετ͸ ઈରʹඞཁ  ελʔτΞοϓ͔ͩΒͦ͜ɺ৽͍͠ΤϯδχΞΛසൟʹܴ͑ೖΕΔ͜ͱʹ ͳΔ͕ɺܴ͍ೖΕͨͱ͖ʹɺӨڹൣғ͕Θ͔Βͣ࢓༷มߋʹ௥ඌͯ͠ 
 όάΛग़ͯ͠ਏ͍ࢥ͍Λ͢Δɻͦͷ఺ɺςετ͕͋Ε͹҆ṉײ͸େ͖͍ɻ 83

Slide 84

Slide 84 text

@2020 Torana, Inc. 0QFO"1*Λఆٛͯ͠ɺίϚϯυͰϑΝΠϧΛ࡞੒ ςετͱϑΟΫενϟɺίϯτϩʔϥͳͲ 
 "1*ʹඞཁͳ΋ͷΛશͯࣗಈͰੜ੒  ςετ͕͋Δ͜ͱʹΑΓ૬ରతʹ։ൃ଎౓͕޲্͢Δɻ  ςετ͕ӡ༻͞Ε͍ͯͳ͍ͱɺҎޙͷσϓϩΠ΍༷ʑͳػೳ։ൃʹ 
 ଟେͳӨڹΛٴ΅͢͸໨ʹݟ͍͑ͯΔ  ೲظ͕୹͍͔Βແཧͱ͍͏ཧ༝͕͋ΔͳΒೲظΛ৳͹͢͜ͱʹ 
 ਚྗ͢΂͖ʢͦ͏͍͏ίϛϡχέʔγϣϯΛऔΔʣ 
 84

Slide 85

Slide 85 text

@2020 Torana, Inc. 0QFO"1*Λఆٛͯ͠ɺίϚϯυͰϑΝΠϧΛ࡞੒ ίϚϯυΛ࣮ߦ 85

Slide 86

Slide 86 text

@2020 Torana, Inc. ඞཁͳ΋ͷΛશͯࣗಈͰੜ੒ OpenAPI ͷఆٛॻ ίϚϯυͷ࣮ߦ ίϯτϩʔϥʔͷ࡞੒ ςετͷ࡞੒ ϑΟΫενϟͷ 
 ࡞੒ OpenAPI ͔ΒϞσϧ΁ͷ Normalizer ࡞੒ Ϟσϧ͔Β OpenAPI ΁ͷ Normalizer ࡞੒ ϞοΫ༻ͷ 
 ίϯτϩʔϥʔͷ࡞੒ ϞοΫ༻ͷ 
 Ϟσϧͷ࡞੒ ίϚϯυͰࣗಈతʹ࡞੒͞ΕΔ΋ͷ όοΫΤϯυΤϯδχΞ͕
 ॻ͘ඞཁͷ͋Δ΋ͷ 86

Slide 87

Slide 87 text

@2020 Torana, Inc. ඞཁͳ΋ͷΛશͯࣗಈͰੜ੒ ௨ৗͷΞΫηε࣌ ςετ࣮ߦ࣌ ϞοΫ༻ 
 ίϯτϩʔϥʔ ίϯτϩʔϥʔ ίϯτϩʔϥʔΛܧঝ ֎෦෺ྲྀ API ܾࡁγεςϜ Google Developer API ϧʔςΟϯάͷ੾Γସ͑ 87

Slide 88

Slide 88 text

@2020 Torana, Inc. ඞཁͳ΋ͷΛશͯࣗಈͰੜ੒ ௨ৗͷΞΫηε࣌ ςετ࣮ߦ࣌ ϞοΫ༻ 
 ίϯτϩʔϥʔ ίϯτϩʔϥʔ ίϯτϩʔϥʔΛܧঝ ֎෦෺ྲྀ API ܾࡁγεςϜ Google Developer API ֎෦ͷγεςϜͱ࿈ܞ͢ΔΑ͏ʹ ϧʔςΟϯάͷ੾Γସ͑ 88

Slide 89

Slide 89 text

@2020 Torana, Inc. ඞཁͳ΋ͷΛશͯࣗಈͰੜ੒ ௨ৗͷΞΫηε࣌ ςετ࣮ߦ࣌ ϞοΫ༻ 
 ίϯτϩʔϥʔ ίϯτϩʔϥʔ ίϯτϩʔϥʔΛܧঝ ֎෦෺ྲྀ API ܾࡁγεςϜ Google Developer API ֎෦ͱͷ௨৴ΛϞοΫ͢Δ ϧʔςΟϯάͷ੾Γସ͑ 89

Slide 90

Slide 90 text

@2020 Torana, Inc. ඞཁͳ΋ͷΛશͯࣗಈͰੜ੒ ௨ৗͷΞΫηε࣌ App\Http\Controller ڞ௨ͷαʔϏεϓϩόΠμʔ ςετͷΞΫηε࣌ Tests\Units\Controller 90

Slide 91

Slide 91 text

@2020 Torana, Inc. ඞཁͳ΋ͷΛશͯࣗಈͰੜ੒  ϞοΫΛհ͢͜ͱͰॊೈʹίϯτϩʔϥʔ͔ΒͷϨεϙϯεʹରԠ  ྫ͑͹Ұ෦ͷϞσϧͷΈΛϞοΫʹࠩ͠ସ͍͑ͨΈ͍ͨͳधཁʹ΋ରԠ  -BSBWFMͷ5FTU$BTFʹ͋Δ७ਮͳAUIJTKTPOA΍AUIJTQPTUAΛ ݺͼग़ָͯ͠ʹςετ͔ͨͬͨ͠  ͦΕʹΘ͟Θ͟࢖༻ճ਺Λࢦఆͨ͠ΓɺฦΓ஋Λςετ͝ͱʹࢦఆ͢Δඞ ཁ͕ͳ͘ͳΔ  ͭ·Γগਓ਺Ͱͷ։ൃָ͕ʹͳΔ 91

Slide 92

Slide 92 text

@2020 Torana, Inc. 0QFO"1*Λఆٛͯ͠ɺίϚϯυͰϑΝΠϧΛ࡞੒ ςετͱϑΟΫενϟɺίϯτϩʔϥͳͲ 
 "1*ʹඞཁͳ΋ͷΛશͯࣗಈͰੜ੒  ը૾Ξοϓϩʔυ͸AJT6QMPBEBCMFAͷΑ͏ͳৗ࣌GBMTFΛ 
 ฦ͢Α͏ʹ͍ͯ͠ΔϝιουΛΦʔόʔϥΠυͯ͠USVFΛฦ͢Α͏ʹ͠ɺ ϞσϧͰΞοϓϩʔυ͕ඞཁͳϞσϧͱϚοϐϯά͢ΔΑ͏ʹ͢Δ  ͜ΕʹΑΓը૾ͷΞοϓϩʔυʹ͍ͭͯ΄΅ߟ͑ͳ͍ͰࡁΉΑ͏ʹ 92

Slide 93

Slide 93 text

@2020 Torana, Inc. ඞཁͳ΋ͷΛશͯࣗಈͰੜ੒ APIController (API ͷجఈΫϥε) Uploadable τϨΠτΛಡΈࠐΉ τϨΠτΛಡΈࠐΉ͚ͩͰ isUploadable Λ
 ΦʔόʔϥΠυ͢ΔΑ͏ʹ͢Δ 93

Slide 94

Slide 94 text

@2020 Torana, Inc. ඞཁͳ΋ͷΛશͯࣗಈͰੜ੒ ΞοϓϩʔυͷॲཧΛڞ௨Խ ఆٛͨ͠ϚοϐϯάͰΞοϓϩʔυ͕Մೳʹ Ξοϓϩʔυର৅ͷϞσϧ ඥ෇͚ΔϦΫΤετύϥϝʔλʔ໊ 94

Slide 95

Slide 95 text

@2020 Torana, Inc. Ͳ͏࡞͍͔ͬͯͬͨ ίϯτϩʔϥʔʹ͸ϩδοΫΛॻ͔ͳ͍  ҰൠతʹݴΘΕ͍ͯΔ͜ͱ͕ͩʢجఈΫϥε΋ؚΊͯʣίϯτϩʔϥʔʹ͸ ϏδωεϩδοΫΛॻ͔ͳ͍ɻ  τϥʔφ͸ඞཁͳ৘ใΛϞσϧʹॻ͖ɺίϯτϩʔϥʔ͸ͦͷ৘ใ͕͋ Δͱ͍͏લఏͰந৅Խͯ͠ॲཧΛ͍ͯ͠Δɻ  ͦΕͰ΋ओʹ૸Δͷ͸ϦΫΤετͷόϦσʔγϣϯͱอଘॲཧʢΞοϓ ϩʔυ΋ؚΊͯʣͷΈɻ  ίϯτϩʔϥʔϞσϧͷΑ͏ͳελΠϧͰॻ͍͍ͯΔ 95

Slide 96

Slide 96 text

@2020 Torana, Inc. Ͳ͏࡞͍͔ͬͯͬͨ όοΫΤϯυΤϯδχΞ͸ 
 ίϯτϩʔϥʔΛ৮Βͳ͍Α͏ʹ  จࣈ͸ͪͬͪΌ͍͕͜ͷεΫϦʔϯγϣοτ Ͱऩ·Δ͘Β͍ʹίϯτϩʔϥʔͷॲཧ͸গ ͳ͍ɻ  ͜Μͳײ͡ͷίϯτϩʔϥʔ͕େྔʹ͋Δ  جఈΫϥεͰ΋ߦ͘Β͍͔͠ͳ͍ 96

Slide 97

Slide 97 text

@2020 Torana, Inc. Ͳ͏࡞͍͔ͬͯͬͨ ඞཁͳ৘ใ͸Ϟσϧʹू໿͠ɺ
 ίϯτϩʔϥʔ͸ͦΕΛ࢖͏͚ͩ 97

Slide 98

Slide 98 text

@2020 Torana, Inc. Ͳ͏࡞͍͔ͬͯͬͨ -BSBWFMʹґଘͭͭ͠ґଘ͠ͳ͍  -BSBWFMʹґଘ͗͢͠ΔͱָͰ͸͋Δ͕ɺϩοΫΠϯ͞Ε͗͢ΔͱϑϨʔϜ ϫʔΫ΁৐Γ׵͕͑Ͱ͖ͳ͍  ͱ͸͍͑ɺ౰࣌͸։ൃ෦ͷϝϯόʔ͸ۃগͩͬͨͨΊɺґଘ͢Δͱ͜Ζ͸ґ ଘ͢ΔΑ͏ʹ͠ͳ͍ͱ։ൃ͕࣌ؒ଍Γͳ͍  ґଘ͢Δͱ͜Ζ͸ґଘ͢Δɻґଘ͠ͳ͍ͱ͜Ζ͸ґଘ͠ͳ͍όϥϯε  -BSBWFMΛࣺͯΔ࿩ʹͳͬͯ΋ࣅͨΑ͏ͳΠϯλʔϑΣʔεͰ 
 ࡞ΕΔ͔ͳͲɺڥքઢΛܾΊΔ 98

Slide 99

Slide 99 text

@2020 Torana, Inc. Ͳ͏࡞͍͔ͬͯͬͨ -BSBWFMʹґଘͭͭ͠ґଘ͠ͳ͍  ͦͷͨΊ-BSBWFMͱґଘ͢Δॲཧ͸جຊϞσϧΛհͯ͠ͷΈߦΘΕΔ  γεςϜͷण໋͸͍ͣΕ͘ΔɻͦͷͨΊɺθϩϕʔε͔ͩΒͦ͜ґଘؔ܎ ΛͳΔ΂͘औΓআ͖ɺ࣍ੈ୅ͷΞϓϦέʔγϣϯͷ։ൃʹ΋͕ۤͳ͍Α͏ ʹ͢Δ 99

Slide 100

Slide 100 text

@2020 Torana, Inc. -BSBWFMʹґଘͭͭ͠ґଘ͠ͳ͍ Controller AppModel Domain Elasticsearch ෺ྲྀγεςϜ ܾࡁγεςϜ Cache DB Mail Laravel ʹґଘ͍ͯ͠ΔՕॴ Laravel ʹґଘ͍ͯ͠ͳ͍Օॴ (ϏδωεϩδοΫ) Normalizer جຊతʹϞσϧΛ௨͢Α͏ʹ͠ɺ ґଘؔ܎Λۃྗ΁Β͢ Model Laravel ΁ͷґଘ͸ย଍ಥͬࠐΜͰ͍Δ 100

Slide 101

Slide 101 text

@2020 Torana, Inc. -BSBWFMʹґଘͭͭ͠ґଘ͠ͳ͍ Controller AppModel Domain Elasticsearch ෺ྲྀγεςϜ ܾࡁγεςϜ Cache DB Mail γεςϜͷण໋͕དྷͨͱ͖ͷϦϓϨΠε͸੺࿮Λࠩ͠ସ͑Δ͚ͩ Laravel ʹґଘ͍ͯ͠ͳ͍Օॴ (ϏδωεϩδοΫ) Normalizer جຊతʹϞσϧΛ௨͢Α͏ʹ͠ɺ ґଘؔ܎Λۃྗ΁Β͢ Model Laravel ΁ͷґଘ͸ย଍ಥͬࠐΜͰ͍Δ 101

Slide 102

Slide 102 text

@2020 Torana, Inc. Ͳ͏࡞͍͔ͬͯͬͨ 4BB4͔ΒσʔλΛҠߦ͠΍͍͢Α͏ʹ  ฐ͕ࣾ࢖͍ͬͯΔ4BB4ʹϦϨʔγϣϯͳΜ͍ͯ͏֓೦͸ͳ͍  ͱ͸͍͑3%#ʹҠߦ͢ΔΘ͚ͳͷͰɺকདྷతͳεέʔϧΛݟӽͯ͠Ϧ ϨʔγϣϯͰ͖ΔΑ͏ʹ͍࣋ͬͯ͘ɻ  ͦͷͨΊؒʹࣾ಺Ͱίϯόʔλʔͱݺ͹Ε͍ͯΔ΋ͷΛ࢖༻ͯ͠3%#΁ Ҡ২ 102

Slide 103

Slide 103 text

@2020 Torana, Inc. 4BB4͔ΒσʔλΛҠߦ͠΍͍͢Α͏ʹ SaaS CSV ΤΫεϙʔτ چγεςϜ ৽γεςϜ ίϯόʔλʔ RDB Amazon VPC (ຊ൪) RDB Amazon VPC (εςʔδϯά) ɾސ٬ΞϓϦ ɾ͓΋ͪΌΞϓϦ ɾ഑ૹΞϓϦ ɾetc... ɾސ٬ςʔϒϧ ɾetc... ɾސ٬ॅॴ ɾސ٬੥ٻઌॅॴ ɾސ٬ͷܖ໿৘ใ ɾސ٬ͷ͓ࢠ༷৘ใ ɾ഑ૹཤྺ ɾ഑ૹ͓΋ͪΌ ɾ… ɾސ٬ςʔϒϧ ɾetc... ɾސ٬ॅॴ ɾސ٬੥ٻઌॅॴ ɾސ٬ͷܖ໿৘ใ ɾސ٬ͷ͓ࢠ༷৘ใ ɾ഑ૹཤྺ ɾ഑ૹ͓΋ͪΌ ɾ… 103

Slide 104

Slide 104 text

@2020 Torana, Inc. 4BB4͔ΒσʔλΛҠߦ͠΍͍͢Α͏ʹ SaaS CSV ΤΫεϙʔτ چγεςϜ ৽γεςϜ ίϯόʔλʔ RDB Amazon VPC (ຊ൪) RDB Amazon VPC (εςʔδϯά) ɾސ٬ΞϓϦ ɾ͓΋ͪΌΞϓϦ ɾ഑ૹΞϓϦ ɾetc... SaaS ্Ͱ͸ςʔϒϧͷ୅ΘΓʹ ΞϓϦͱݺΜͰ͍·͢ ɾސ٬ςʔϒϧ ɾetc... ɾސ٬ॅॴ ɾސ٬੥ٻઌॅॴ ɾސ٬ͷܖ໿৘ใ ɾސ٬ͷ͓ࢠ༷৘ใ ɾ഑ૹཤྺ ɾ഑ૹ͓΋ͪΌ ɾ… ɾސ٬ςʔϒϧ ɾetc... ɾސ٬ॅॴ ɾސ٬੥ٻઌॅॴ ɾސ٬ͷܖ໿৘ใ ɾސ٬ͷ͓ࢠ༷৘ใ ɾ഑ૹཤྺ ɾ഑ૹ͓΋ͪΌ ɾ… ςʔϒϧͰݴ͏ͱ 1 ͭͷϨίʔυͰ ෳ਺ͷ৘ใΛ؅ཧ͍ͯͨ͠΋ͷΛ 
 ਖ਼نԽ͠ɺϦϨʔγϣϯؔ܎Λ੔ཧ 104

Slide 105

Slide 105 text

࡞͍ͬͯΔͱ͖ʹى͖ͨ՝୊ 105

Slide 106

Slide 106 text

νʔϜ໘ 106

Slide 107

Slide 107 text

@2020 Torana, Inc. ࡞͍ͬͯΔͱ͖ʹى͖ͨ՝୊νʔϜ໘ ੒Ռ͕ଞͷϝϯόʔ͔Βݟ͑ͮΒ͍  όοΫΤϯυͱ͍͏ੑ࣭͔Β͔੒Ռ͕ΤϯδχΞҎ֎ͷ 
 ϝϯόʔ͔ΒݟΔͱ੒Ռ͕ݟ͑ͮΒ͍  ཧղΛͯ͠΋Β͏Α͏ʹίϛϡχέʔγϣϯΛऔΔͷ͕େ੾  ͳͥɺ͜ΕΛ΍͍ͬͯΔͷ͔ɺͳͥඞཁͳͷ͔ΛͪΌΜͱ 
 ڞ༗͠આ໌͢Δ 107

Slide 108

Slide 108 text

@2020 Torana, Inc. ࡞͍ͬͯΔͱ͖ʹى͖ͨ՝୊νʔϜ໘ ࣗ෼ࣗ਎੒ՌΛ͋͛ΒΕ͍ͯΔ͔ෆ҆ʹͳΔ  ελʔτΞοϓ͔ͩΒͦ͜ɺεϐʔυײΛ࣋ͬͯ΍Βͳ͖Ό͍͚ͳ͍͜ͱ Λ࠷ॳ͸ਅٯͷํ޲Λ૸Δඞཁ͕͋Δ  ঃʑʹࣗ෼͕੒ՌΛ͋͛ΒΕ͍ͯΔͷ͔ͱෆ҆ʹ͔ΒΕΔ͜ͱ͕ଟʑ͋Δ  ͜ΕΛ΍Δ͜ͱʹΑΔࣗ෼ࣗ਎΁ͷೲಘ͕େ੾ 108

Slide 109

Slide 109 text

@2020 Torana, Inc. ࡞͍ͬͯΔͱ͖ʹى͖ͨ՝୊νʔϜ໘ ϏδωεαΠυͱ࣮ࡍʹඞཁͳػೳͷམͱ͠ॴ͕೉͍͠  ͔ͤͬ͘ͷϑϧϦϓϨΠεͳͷͰɺ͍ΖΜͳػೳΛ੝ΓࠐΈ͍ͨ  ϓϩμΫτ։ൃ෦ͱͯ͠΋੝ΓࠐΈ͍͕ͨɺ੝ΓࠐΈ͗͢ΔͱϦιʔε ͕଍Γͳ͍ɻ  ͱ͸͍͑ɺϏδωεαΠυͷཁ๬΋׎͍͖͍͑ͯͨ  ͜ͷઢҾ͕೉͔ͬͨ͠ɻ 109

Slide 110

Slide 110 text

@2020 Torana, Inc. ࡞͍ͬͯΔͱ͖ʹى͖ͨ՝୊νʔϜ໘ ਓ͕଍Γͳ͗͢͞Δ  ελʔτΞοϓ͋Δ͋Δ͕ͩਓ͕଍Γͳ͗͢Δ  ࢲ͕όοΫΤϯυͱΠϯϑϥͱϑϩϯτΤϯυͱ࠾༻ͱ৘γεͳͲΛ݉ ೚͍ͯͨ͠  ౰࣌͸໊ମ੍ͰҰਓ͸4BB4ͷରԠʹ௥ΘΕ͍ͯͨ  ࣮࣭ࢲҰਓͰ࣮૷͍ͯͨ͠  ୅දͱͷPO͸ຖճʮਓ͕଍Γͳ͍Ͳ͏͠Α͏ʯͱ͍͏࿩ͰऴΘΔ 110

Slide 111

Slide 111 text

@2020 Torana, Inc. ࡞͍ͬͯΔͱ͖ʹى͖ͨ՝୊νʔϜ໘ ਓ͕଍Γͳ͗͢͞Δ  ࠷ॳ୅ද͸ϋʔυ΢ΣΞ։ൃؚΊͯਓ͘Β͍ͷ૊৫ʹͳΕ͹͍͍ͱࢥ͍ͬͯͨ  ΋ͪΖΜݎ࣮Ͱ͔ͭεέʔϥϒϧͳΞϓϦέʔγϣϯΛ໨ࢦ͢ʹ͸ 
 શવ଍Γͳ͍  ࢲ͕ٳΜͩΒӡ༻͸ճΔ͚Ͳ։ൃ͕ʢຊ౰ʹʣࢭ·Δ  ΋͸΍ɺ΍͍ͬͯΔ͜ͱ͕ϚωʔδϟʔͰ͸ͳ͘$50Ͱ͸  ϓϩμΫτ։ൃ෦ͷϝϯόʔʹ$50ͱ͢ΒࢥΘΕ͍ͯͨ 111

Slide 112

Slide 112 text

ٕज़໘ 112

Slide 113

Slide 113 text

@2020 Torana, Inc. ࡞͍ͬͯΔͱ͖ʹى͖ͨ՝୊ٕज़໘ -BSBWFMͷԸܙΛͲ͜·Ͱड͚Δ͔൑அʹ໎ͬͨ  ϩοΫΠϯ͗͢͠ΔͱϦϓϨΠεͷͱ͖ͷେ͖ͳฐ֐ʹͳΔͷ͸Θ͔Γ ͖͍ͬͯΔ  ͜Ε͸ࠓ·Ͱࢲ͕ܦݧͨ͠اۀྫ֎ͳ͘શͯͰฐ֐ʹͳ͍ͬͯͨ 
 ܦݧ͕͋Δ͔Βͦ͜  ͱ͸͍͑গਓ਺Ͱ-BSBWFMͷԸܙΛ΄΅ड͚ͳ͍ঢ়ଶ͔ͭந৅ԽΛ͢Δͨ Ίͷ࣌ؒ͸͋Δͷ͔ɺͱ͍ͬͨόϥϯεΛऔΔ൑அ͕೉͔ͬͨ͠ 113

Slide 114

Slide 114 text

@2020 Torana, Inc. ࡞͍ͬͯΔͱ͖ʹى͖ͨ՝୊ٕज़໘ ۀ຿ϑϩʔ͕७ਮʹ೉ղ  ෺ྲྀͱ͍͏ಛੑ΋͋ͬͯɺ͋·Γ࢖Θͳ͍Α͏ͳ୯ޠ͕େྔʹग़ͯ͘Δ  ೖݿɺग़ݿɺ࢓ೖΕɺ୨ɺ૔ݿɺݮՁঈ٫  εςʔλεͱ͍͏֓೦͕େྔʹग़͖ͯͯɺࣅͯඇͳΔ΋ͷ͕͋Δ  ൃૹࡁΈɺൃૹதɺഇغɺෆඋɺച٫ɺӡ༻தʜͳͲͳͲ  ଞʹ΋৽͍֓͠೦͕ొ৔͢ΔՄೳੑ͕͋Δ  ݸମ؅ཧɺൃૹͷ௥੻ɺ഑ૹ୅ߦձࣾ 114

Slide 115

Slide 115 text

@2020 Torana, Inc. ࡞͍ͬͯΔͱ͖ʹى͖ͨ՝୊ٕज़໘ ۀ຿ϑϩʔ͕७ਮʹ೉ղ  ϓϥϯφʔͷϓϥϯχϯά࠷దԽʹ͍ͭͯ  ೥୅ʹ߹Θ͓ͤͨ΋ͪΌΛ͋Δఔ౓ग़ͨ͠ޙʹɺϓϥϯφʔʹΑΔ͓΋ ͪΌͷػցతʹग़ͨ͠΋ͷ͔Β࠶બఆΛߦ͏  ͲͷλΠϛϯάͰԿ͕ൃՐ͢Δ͔෼͔ΓͮΒ͍  ͦͯ͠؊৺ͷίʔυ͸όϯυϧ͞Ε͍ͯͯಡΉ͕࣌ؒͳ͍ ʢ※※※ಡΊͳ͍Θ͚Ͱ͸ͳ͍※※※ʣ 115

Slide 116

Slide 116 text

@2020 Torana, Inc. ࡞͍ͬͯΔͱ͖ʹى͖ͨ՝୊ٕज़໘ ۀ຿ϑϩʔ͕७ਮʹ೉ղ  ߋʹ͍͏ͱ࢖͍ͬͯΔεςʔλεͱ࢖͍ͬͯͳ͍εςʔλε͕ 
 ࠞࡏ͍ͯͨ͠  ΦϖϨʔγϣϯ্ඞཁͷͳ͍4BB4্ͷϑΟʔϧυ΋͋ͬͨ 116

Slide 117

Slide 117 text

@2020 Torana, Inc. ࡞͍ͬͯΔͱ͖ʹى͖ͨ՝୊ٕज़໘ εέʔϧΛݟӽͨ͠ݕ౼ࣄ߲ΛͲ͜·Ͱࢥྀ͢Δ͔  த௕ظతʹݟͯϓϩμΫτ͕εέʔϧ͞ΕΔ͜ͱ͕Θ͔Γ͖͍ͬͯΔ΋ͷ ͕͋Δ͕ɺ͜ΕΛͲ͜·Ͱ࠷ॳʹσʔλϕʔεͷεΩʔϚʹऔΓೖΕΔ͔ Λࢥྀ͢Δඞཁ͕͋Δ  େྔʹ΍ΔͱɺϦιʔεෆ଍ͱͳΔ͜ͱ΋໨ʹݟ͍͑ͯΔ  ͱ͸͍͑ઌʹ΍͓͔ͬͯͳ͍ͱ%#ͷϚΠάϨʔγϣϯ͕ൃੜ͢ΔͷͰ ീํ࠹͕Γ 117

Slide 118

Slide 118 text

@2020 Torana, Inc. ࡞͍ͬͯΔͱ͖ʹى͖ͨ՝୊ٕज़໘ ΠϯγσϯτରԠΛͲ͜·ͰରԠ͢Δ͔  ελʔτΞοϓͰΑ͘๨ΕΒΕ͕ͪͳͷ͕ΠϯγσϯτରԠ  େ͖͍ΤϯδχΞͷ૊৫ͩͱΠϯγσϯτରԠ͕طʹࢥྀ͞Ε͍ͯΔ 
 ͜ͱ͕ଟ͍ͬΆ͍  ΤϥʔϩάͷऩूɺՄࢹԽɺૣٸͳରԠͳͲΛ͍͖͍ͯͨ͠ 118

Slide 119

Slide 119 text

@2020 Torana, Inc. ࡞͍ͬͯΔͱ͖ʹى͖ͨ՝୊ٕज़໘ σʔλͷଟ͍"1*ͷύϑΥʔϚϯε͕஗͍  τΠαϒͷγεςϜͰ͸ൃૹ৘ใ͕ཁͱ͍ͬͯ΋աݴͰ͸ͳ͍  ൃૹ৘ใʹ͸ސ٬ͷ৘ใɺൃૹઌॅॴɺ੥ٻઌॅॴɺܖ໿৘ใɺൃૹ͠ ͓ͨ΋ͪΌʢ਺఺ʣɺ਌ൃૹ৘ใͳͲେྔͷσʔλ͕Ϩεϙϯε͕ฦΔ  ࠷ॳҰཡΛग़͢ͷʹඵ͔͔͍ͬͯͨ 119

Slide 120

Slide 120 text

՝୊ΛͲ͏ղܾ͔ͨ͠ 120

Slide 121

Slide 121 text

νʔϜ໘ 121

Slide 122

Slide 122 text

@2020 Torana, Inc. ՝୊ΛͲ͏ղܾ͔ͨ͠νʔϜ໘ ੒Ռ͕ଞͷϝϯόʔ͔Βݟ͑ͮΒ͍  ຖேߦ͍ͬͯΔ%BJMZ4UBOEVQͰɺͳͥʢ໨ʹݟ͑ͳ͍෦෼ʣΛॏ఺త ʹ΍Δͷ͔Λྗઆ͢Δ౒ྗΛ͢ΔΑ͏ʹ  ΤϯδχΞ͡Όͳ͍ਓͰ΋Θ͔Γ΍͍͢Α͏ʹઆ໌Λ͢ΔΑ͏ʹ৺͕͚ Δ  ͳΔ΂͘ϑϩϯτΤϯυଆͱབྷΊͯ࿩͢Α͏ʹ 122

Slide 123

Slide 123 text

@2020 Torana, Inc. ՝୊ΛͲ͏ղܾ͔ͨ͠νʔϜ໘ ࣗ෼ࣗ਎੒ՌΛ͋͛ΒΕ͍ͯΔ͔ෆ҆ʹͳΔ  4MBDLʹͻͨ͢Β(JU)VCͷίϛοτϩάΛྲྀ͠ଓ͚ΔνϟϯωϧΛ࡞੒ ͠ɺ৺ͷฏԺΛอͭ  ϦϙδτϦ΁ͷϓογϡͱίϛοτ਺Ͱ৺ͷฏԺΛอͭ 123

Slide 124

Slide 124 text

@2020 Torana, Inc. ՝୊ΛͲ͏ղܾ͔ͨ͠νʔϜ໘ ࣗ෼ࣗ਎੒ՌΛ͋͛ΒΕ͍ͯΔ͔ෆ҆ʹͳΔ  ίϛοτϝοηʔδΛؾʹͤͣͱΓ͋͑ͣ 
 ͻͨ͢Βϓογϡ͍ͯ͘͠  ίϛοτ਺Λݟͯʮࢲ͸࢓ࣄΛ 
 ͍ͯ͠ΔΜͩʯͱ҉ࣔΛ͔͚Δ 124

Slide 125

Slide 125 text

@2020 Torana, Inc. ՝୊ΛͲ͏ղܾ͔ͨ͠νʔϜ໘ ϏδωεαΠυͱ࣮ࡍʹඞཁͳػೳͷམͱ͠ॴ͕೉͍͠  4BB4ଆΛ୲౰͍ͯͨ͠ΤϯδχΞ͕1E.1K.ͷܦݧ͕͋Γɺඞཁͳػ ೳͷચ͍ग़͠Λ͓ئ͍͢Δܗ΁  εϓϨουγʔτʹԿ͕ඞཁͰԿ͕ඞཁ͡Όͳ͍ͷ͔Λॻ͖ग़͍ͯ͘͠  1E.1K.ͷΤϯδχΞ͕ϏδωεαΠυͱͷؒʹڬ·Γɺམͱ͠ॴΛ࿩ ͠ɺΤϯδχΞ͸։ൃʹूத͢Δମ੍΁ 125

Slide 126

Slide 126 text

@2020 Torana, Inc. ՝୊ΛͲ͏ղܾ͔ͨ͠νʔϜ໘ ϏδωεαΠυͱ࣮ࡍʹඞཁͳػೳͷམͱ͠ॴ͕೉͍͠ 126

Slide 127

Slide 127 text

@2020 Torana, Inc. ՝୊ΛͲ͏ղܾ͔ͨ͠νʔϜ໘ ਓ͕଍Γͳ͗͢͞Δ  ࠾༻νϟωϧ͕ݩʑ8BOUFEMZͱϦϑΝϥϧ͔͠ͳ͔͕ͬͨɺ 
 ΤʔδΣϯτΛؚΊ࠾༻νϟωϧΛ૿΍͢ಈ͖Λ͢ΔΑ͏ʹ  ͳͥਓ͕଍Γͳ͍ͷ͔ʁͲΕ͘Β͍ͷਓ͕ඞཁͳͷ͔ΛϓϩδΣΫτʹ Αͬͯ෼ੳ͠ɺݕ౼ΛॏͶΔ  ΤϯδχΞͷࢢ৔ͷ૬৔ͱٻΊΔਓ෺૾ΛυΩϡϝϯτʹચ͍ग़͠ɺ 
 ͦͷΤϯδχΞ͕ͲΕ΄ͲඞཁͰ͋Δ͔ɺͱ͍͏ͷΛߟ͑Δ 127

Slide 128

Slide 128 text

@2020 Torana, Inc. ՝୊ΛͲ͏ղܾ͔ͨ͠νʔϜ໘ ਓ͕଍Γͳ͗͢͞Δ ϓϩδΣΫτͱ༧ࢉ ࠾༻ʹ͍ͭͯ ٻΊΔ΂͖৬ೳͱ૝ఆ೥ऩ 128

Slide 129

Slide 129 text

@2020 Torana, Inc. ՝୊ΛͲ͏ղܾ͔ͨ͠νʔϜ໘ ਓ͕଍Γͳ͗͢͞Δ 0 1.75 3.5 5.25 7 2020/04 2020/06 2020/08 2020/12 ΤϯδχΞͷ਺͕૿͖͑ͯ·ͨ͠ 7 5 4 2 129

Slide 130

Slide 130 text

ٕज़໘ 130

Slide 131

Slide 131 text

@2020 Torana, Inc. ՝୊ΛͲ͏ղܾ͔ٕͨ͠ज़໘ -BSBWFMͷԸܙΛͲ͜·Ͱड͚Δ͔൑அʹ໎ͬͨ  Ϟσϧ಺Ͱ͸࢖͏Α͏ʹ͢Δ͕ɺͦΕҎ֎Ͱ͸࢖Θͳ͍Α͏ʹ͢Δͱ͍͏ ൑அΛ͠·ͨ͠ɻ  γεςϜ͸࿝ٺԽ͢ΔͷͰଞͷϑϨʔϜϫʔΫʹ৐Γ׵͑Δ͜ͱΛେલఏ ʹϑϩϯτΤϯυΛؚΊίʔυΛॻ͘ܗʹ 131

Slide 132

Slide 132 text

@2020 Torana, Inc. ՝୊ΛͲ͏ղܾ͔ٕͨ͠ज़໘ ۀ຿ϑϩʔ͕७ਮʹ೉ղ  ϏδωεαΠυͱ࿩͠߹͍Ͳ͏͍͏ۀ຿ϑϩʔͰਐΊ͍ͯΔͷ͔ΛυΩϡϝ ϯτʹ·ͱΊͯ΋Β͏Α͏ʹίϛϡχέʔγϣϯΛऔΔ  ࣮ࡍʹΦϯϥΠϯͰ4BB4ͷ࢖͍ํΛ໨ࢹɺΦϯϘʔσΟϯάͯ͠΋Β͏ɻ  ૬खʹ͍ͭ͜͠ͱࢥΘΕͯ΋͍͍ؾ࣋ͪͰίϛϡχέʔγϣϯΛ 
 औΓଓ͚Δ  ఆظతʹϏδωεαΠυͱ.5(Λߦ͍ɺ࿙Ε͕ͳ͍͔֬ೝΛ͍ͯ͘͠ 132

Slide 133

Slide 133 text

@2020 Torana, Inc. ՝୊ΛͲ͏ղܾ͔ٕͨ͠ज़໘ ۀ຿ϑϩʔ͕७ਮʹ೉ղ  ۀ຿ϑϩʔΛ෼ղͯ͠ɺγϯϓϧʹଊ͑ΒΕΔΑ͏ʹ͍ͯ͘͠  γϯϓϧʹଊ͑ͨ΋ͷΛ4BB4ͷը໘Λ૝૾͠ͳ͕Β 
 "1*ʹམͱ͍ͯ͘͠ 133

Slide 134

Slide 134 text

@2020 Torana, Inc. ՝୊ΛͲ͏ղܾ͔ٕͨ͠ज़໘ ۀ຿ϑϩʔ͕७ਮʹ೉ղ 134

Slide 135

Slide 135 text

@2020 Torana, Inc. ՝୊ΛͲ͏ղܾ͔ٕͨ͠ज़໘ εέʔϧΛݟӽͨ͠ݕ౼ࣄ߲ΛͲ͜·Ͱࢥྀ͢Δ͔  ೥εύϯͰඞཁͦ͏ͳ΋ͷ͸༧Ί੝ΓࠐΜͰ͓͘  ྫ͑͹ɺ෺ྲྀγεςϜͰ͋Ε͹ɺݱࡏฐࣾͰ͸ओʹࣾͷΈͰ͋Δ͕ɺ ͜Ε͕֦େ͢Δ͜ͱ͸༰қʹ૝૾Ͱ͖ΔͷͰɺ༧Ίෳ਺ͷ෺ྲྀγεςϜ ΛೖΕΒΕΔΑ͏ʹ૊ΈࠐΜͰ͓͘  ଞʹ΋ɺސ٬৘ใ͸Ұਓ͋ͨΓҰܖ໿લఏͱ͍͏࡞ΓͰ͋Δ͕ɺ͜ΕΛ 
 ৽γεςϜͰ͸ސ٬Ұਓ͋ͨΓͷܖ໿Λෳ਺ܖ໿࣋ͯΔܗʹ 
 Ҡߦ͢ΔͳͲ 135

Slide 136

Slide 136 text

@2020 Torana, Inc. ՝୊ΛͲ͏ղܾ͔ٕͨ͠ज़໘ εέʔϧΛݟӽͨ͠ݕ౼ࣄ߲ΛͲ͜·Ͱࢥྀ͢Δ͔  ͨͩ͠ྫ͑͹lকདྷ͜͏͍͏৽ػೳ͕΄͍͠ΜͩΑͶz͸ରԠ͠ͳ͍  ৽ػೳʹରԠ͍ͯͨ͠ΒΩϦ͕ͳ͍ͨΊ  ༧ΊϏδωεαΠυ΍ଞͷϝϯόʔ͔Βཉ͍͠ػೳΛٵ͍ग़ͯ͠ 
 %#εΩʔϜ͕ͲͷΑ͏ʹมΘ͍ͬͯ͘ͷ͔Λ૝ఆ͓ͯ͘͜͠ͱ͸ඞཁ  ͦͷͨΊʹϑϩϯτΤϯυͰϓϩτλΠϓΛઌʹ࡞࣮ͬͯࡍʹ 
 ৮ͬͯ΋Βͬͨ 136

Slide 137

Slide 137 text

@2020 Torana, Inc. ՝୊ΛͲ͏ղܾ͔ٕͨ͠ज़໘ εέʔϧΛݟӽͨ͠ݕ౼ࣄ߲ΛͲ͜·Ͱࢥྀ͢Δ͔ 137

Slide 138

Slide 138 text

@2020 Torana, Inc. ՝୊ΛͲ͏ղܾ͔ٕͨ͠ज़໘ ΠϯγσϯτରԠΛͲ͜·ͰରԠ͢Δ͔  ΠϯγσϯτରԠ͸༧Ί૊ΈࠐΜͰ͓͘͜ͱͱͨ͠ɻ  ελʔτΞοϓͩͱʮ࢓ࣄ͕๩ͦ͠͏ʯͱ͍͏͜ͱͰԕྀͯ͠͠·ͬ ͯɺڞ༗Λड͚ΒΕͣॏཁͳ໰୊ΛऔΓಀ͕ͯ͠͠·͍ɺձࣾͱͯ͠ͷ ੜ໋͕ऴΘͬͯ͠·͏͜ͱ΋͋Γ͏Δɻ  ͦͷͨΊΠϯγσϯτରԠ͸༧Ίෳ਺ͷखஈͰରԠ͢Δ͜ͱΛॳΊ͔Β औΓ૊Ή͜ͱʹͨ͠ 138

Slide 139

Slide 139 text

@2020 Torana, Inc. ՝୊ΛͲ͏ղܾ͔ٕͨ͠ज़໘ ΠϯγσϯτରԠΛͲ͜·ͰରԠ͢Δ͔  ΠϯγσϯτରԠΛॳΊ͔Β૊ΈࠐΜͰ͓͘͜ͱʹΑΓ  طଘͷΞϓϦέʔγϣϯͷ໰୊఺Λຒ΋Εͤ͞ͳ͍Α͏ʹ͢Δ  ྫ͑͹4MPX2VFSZͩͱ͔  Τϥʔ͕ग़ͯΔ͚Ͳɺճආࡦ͕͔͋ͬͨΒɺͯ͞͠ॏཁ͡Όͳ͍ ͱ൑அ͞Εͯڞ༗͞Εͳ͍ͳͲ 139

Slide 140

Slide 140 text

@2020 Torana, Inc. swoole + laravel-swoole New Relic PagerDuty Terraform SendGrid Packer Raygun 140

Slide 141

Slide 141 text

@2020 Torana, Inc. swoole + laravel-swoole New Relic PagerDuty Terraform SendGrid Packer Raygun NewRelic ͔Βͷ௨஌Λ Slack ΍ి࿩ʹ ΤϥʔϩάऩूͷͨΊ ΞϓϦέʔγϣϯͷ 
 ύϑΥʔϚϯε؂ࢹ 141

Slide 142

Slide 142 text

@2020 Torana, Inc. ՝୊ΛͲ͏ղܾ͔ٕͨ͠ज़໘ σʔλͷଟ͍"1*ͷύϑΥʔϚϯε͕஗͍  4XPPMFͱMBSBWFMTXPPMFΛ࢖༻ͯ͠಺෦ͷ1%0Λߴ଎Խ  4XPPMFʹΑͬͯ1%0͕ஔ͖׵͑ΒΕωοτϫʔΫ*0ͷ࠷దԽ͕ߦ ΘΕΔ  ೖΕΔσϝϦοτ͸ϗοτϦϩʔυ͕Ͱ͖ͳ͘ͳΔͷͱQIQGQNΛ 
 ೖΕସ͑Δඞཁ͕͋Δ͘Β͍  ͜ΕͰඵ͔Βඵ͘Β͍ʹͳͬͨͷͰ໿ഒߴ଎ԽͰ͖ͨ 142

Slide 143

Slide 143 text

@2020 Torana, Inc. ՝୊ΛͲ͏ղܾ͔ٕͨ͠ज़໘ σʔλͷଟ͍"1*ͷύϑΥʔϚϯε͕஗͍  औಘ͢ΔϑΟʔϧυɺ/PSNBMJ[FSͷ֊૚Λ੍ݶ͠ɺύϥϝʔλʔͰ 
 ໘౗ͯ͘͘͞΋ௐ੔͢ΔΑ͏ʹ  ͜ΕͰඵ͔Βdඵ͋ͨΓʹͳΓɺ໿ഒૣ͘ͳΓ·ͨ͠  ΋ͪΖΜऔಘ͢Δύϥϝʔλʔ͕૿͑Δͱͦͷ෼஗͘ͳΓ·͕͢ʜ  ݱࡏਐߦܥͰΫΤϦͷ࣮ߦΛݮΒͨ͢Ίʹɺෳ਺݅औಘ͢Δ৔߹͸ 
 ༧Ίඞཁͳ৘ใΛ͔͖ूΊ͓ͯ͘&BHFS-PBEJOHͷΑ͏ͳ΋ͷΛ 
 ࣮૷͠ύϑΥʔϚϯε޲্Λ໨ࢦ͍ͯ͠·͢ 143

Slide 144

Slide 144 text

@2020 Torana, Inc. ՝୊ΛͲ͏ղܾ͔ٕͨ͠ज़໘ σʔλͷଟ͍"1*ͷύϑΥʔϚϯε͕஗͍  औಘ͢ΔϑΟʔϧυɺ/PSNBMJ[FSͷ֊૚Λ੍ݶ͠ɺύϥϝʔλʔͰ 
 ໘౗ͯ͘͘͞΋ௐ੔͢ΔΑ͏ʹ  ͜ΕͰඵ͔Βdඵ͋ͨΓʹͳΓɺ໿ഒૣ͘ͳΓ·ͨ͠  ΋ͪΖΜऔಘ͢Δύϥϝʔλʔ͕૿͑Δͱͦͷ෼஗͘ͳΓ·͕͢ʜ  ݱࡏਐߦܥͰΫΤϦͷ࣮ߦΛݮΒͨ͢Ίʹɺෳ਺݅औಘ͢Δ৔߹͸ 
 ༧Ίඞཁͳ৘ใΛ͔͖ूΊ͓ͯ͘&BHFS-PBEJOHͷΑ͏ͳ΋ͷΛ 
 ࣮૷͠ύϑΥʔϚϯε޲্Λ໨ࢦ͍ͯ͠·͢ 144

Slide 145

Slide 145 text

@2020 Torana, Inc. σʔλͷଟ͍"1*ͷύϑΥʔϚϯε͕஗͍ /api/v1/shipments ਌ൃૹ৘ใ ൃૹํ๏ ഑ૹۀऀ໊ ൃૹ͓΋ͪΌ ͓΋ͪΌৄࡉ ϝʔΧʔ αϓϥΠϠʔ ݸମ৘ใ ୨৘ใ ൃૹ͓΋ͪΌ ͓΋ͪΌৄࡉ ϝʔΧʔ αϓϥΠϠʔ ૔ݿৄࡉ 145

Slide 146

Slide 146 text

@2020 Torana, Inc. σʔλͷଟ͍"1*ͷύϑΥʔϚϯε͕஗͍ /api/v1/shipments ਌ൃૹ৘ใ ൃૹํ๏ ഑ૹۀऀ໊ ൃૹ͓΋ͪΌ ͓΋ͪΌৄࡉ ϝʔΧʔ αϓϥΠϠʔ ݸମ৘ใ ୨৘ใ ൃૹ͓΋ͪΌ ͓΋ͪΌৄࡉ ϝʔΧʔ αϓϥΠϠʔ ૔ݿৄࡉ ԣ͕࣠Ϩεϙϯεͷ֊૚ͷਂ͞ → ↓ॎ͕࣠ϑΟʔϧυ 146

Slide 147

Slide 147 text

@2020 Torana, Inc. σʔλͷଟ͍"1*ͷύϑΥʔϚϯε͕஗͍ /api/v1/shipments ਌ൃૹ৘ใ ൃૹํ๏ ഑ૹۀऀ໊ ൃૹ͓΋ͪΌ ͓΋ͪΌৄࡉ ϝʔΧʔ αϓϥΠϠʔ ݸମ৘ใ ୨৘ใ ൃૹ͓΋ͪΌ ͓΋ͪΌৄࡉ ϝʔΧʔ αϓϥΠϠʔ ૔ݿৄࡉ ৔߹ʹΑͬͯ͸ϑΟʔϧυΛߜͬͯਂ͞Λ૿΍͢ͳͲͰରࡦ 147

Slide 148

Slide 148 text

@2020 Torana, Inc. ՝୊ΛͲ͏ղܾ͔ٕͨ͠ज़໘ σʔλͷଟ͍"1*ͷύϑΥʔϚϯε͕஗͍  ࣮ࡍͷBQJWTIJQNFOUT͸͜ΕҎ্ʹ৘ใ͕͋Δ  ͦͷը໘ʹΑͬͯ࢖͏࢖Θͳ͍Λબผ͢Δखؒ͸૿͑Δ͕ 
 ύϑΥʔϚϯε͕௿Լ͢ΔΑΓ͸Ϛγ 148

Slide 149

Slide 149 text

@2020 Torana, Inc. ՝୊ΛͲ͏ղܾ͔ٕͨ͠ज़໘ σʔλͷଟ͍"1*ͷύϑΥʔϚϯε͕஗͍ ༧ΊϑΟʔϧυͱਂ͞ΛߜΔ 149

Slide 150

Slide 150 text

@2020 Torana, Inc. ՝୊ΛͲ͏ղܾ͔ٕͨ͠ज़໘ σʔλͷଟ͍"1*ͷύϑΥʔϚϯε͕஗͍ ϑΟʔϧυΛߜΔίʔυ͕ 
 ϑϩϯτΤϯυʹେྔʹ͋Δ 150

Slide 151

Slide 151 text

·ͱΊ 151

Slide 152

Slide 152 text

@2020 Torana, Inc. ·ͱΊ  "1*࣮૷ͷΦʔτϝʔγϣϯԽͷ࣮ݱͷͨΊʹ͸ɺٕज़తͳ 
 ՝୊͚ͩͰ͸ͳ͘ɺΦϖϨʔγϣϯ໘ͰͷΤϯδχΞϦϯά΋ඞཁ  ΦʔτϝʔγϣϯԽͷͨΊʹ͸͍͔ͭ͘ߟྀ͠ͳ͚Ε͹͍͚ͳ͍ 
 ఺͕͋Δ  ΦʔτϝʔγϣϯԽ͸੒Ռ͕ݟ͑ͮΒ͍ͷͰϝϯλϧΛอͭ౒ྗΛ ੯͠·ͳ͍Α͏ʹ͠Α͏  ϥΫ͞ͱύϑΥʔϚϯε͸τϨʔυΦϑ  ΦʔτϝʔγϣϯԽͯ͠΋ɺ͠ͳͯ͘΋ਓ͕଍Γͳ͍ͷ͸มΘΒͳ ͍ͷͰ࠾༻͸͍ͯ͜͠͏ 152

Slide 153

Slide 153 text

5)"/,:06'03:063 -*45&/*/( 153

Slide 154

Slide 154 text

8&"3&)*3*/( 154