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

ゼロベースから Laravel を用いた
 API 実装オートメーション

218473ff7abad0fcd72865da2b23bb5b?s=47 memory
December 12, 2020
3k

ゼロベースから Laravel を用いた
 API 実装オートメーション

PHP Conference 2020 online
English Title:
How to implement automatically generation APIs with the Laravel based from full-scratch

218473ff7abad0fcd72865da2b23bb5b?s=128

memory

December 12, 2020
Tweet

Transcript

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

  2. ࣗݾ঺հ 2

  3. @2020 Torana, Inc. @2020 Torana, Inc. Ί΋Γʔ ϓϩμΫτ։ൃ෦ Ϛωʔδϟʔ Ί΋ΓʔͪΌΜͷϑΥʔΫݩͰ͢ɻ

    
 1)1Ͱ+7.Λ࣮૷ͨ͠ΓຊΛॻ͍ͯͨΓͯ͠ ·͢ɻೕ༮ࣇ޲͚͓΋ͪΌͷαϒεΫϦϓγϣ ϯαʔϏεΛఏڙ͢Δ5PSBOBͱ͍͏ձࣾʹ͍ ·͢ !NNS 3
  4. @2020 Torana, Inc. ࠷ۙࢿۚௐୡ͠·ͨ͠ 4

  5. ΋͘͡ 5

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

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

  8. τϥʔφͷ՝୊ 8

  9. @2020 Torana, Inc. τϥʔφͷ՝୊ 4BB4ͰશͯΛ؅ཧ͍ͯͨ͠  ސ٬ͷ৘ใΛશͯ4BB4Ͱ؅ཧ͍ͯͨ͠  ͜ΕͰ΋'JMF.BLFS͔ΒҠ২ͨ͠ʢΒ͍͠ʣ 

    ଞػೳͱͷ࿈ܞ͸+BWB4DSJQUͰ֘౰ͷ4BB4͕ఏڙ͢Δ"1*Λ ࢖ͬͯߦ͍ͬͯͨ  "1*Λେྔʹୟͨ͘Ίސ٬ৄࡉϖʔδΛ։͘ͷʹඵఔ౓ 
 ͔͔͍ͬͯΔ 9
  10. @2020 Torana, Inc. τϥʔφͷ՝୊ 4BB4ͰશͯΛ؅ཧ͍ͯͨ͠  αʔϏεͷεέʔϧͱγεςϜͷεέʔϧ͕ؒʹ߹͓ͬͯΒͣ "1*ͷ3BUF-JNJUʹසൟʹҾ͔͔ͬΔΑ͏ʹͳͬͨ  લ೚ऀ͕όϯυϧ͞Εͨ+BWB4DSJQU͚ͩΛஔ͍ͯڈ͍ͬͯͬͨ

     ݩʑͷιʔείʔυ͸ͳ͍ɻ  ͦͯ͠ຊ൪؀ڥ͔͠ͳ͍ͷͰςετ͕Ͱ͖ͳ͍ 10
  11. @2020 Torana, Inc. τϥʔφͷ՝୊ ಥ೗ݱΕΔ(PPHMF"QQT&OHJOF  1)1ͷ4MJNͰ࣮૷͞Ε͍ͯͨ  ޾͍೉ಡԽ͸͞Ε͍ͯͳ͔ͬͨ 

    ͨ·ʹ"MMPXFENFNPSZTJ[FΤϥʔΛు͍ͯࢮ͵  ΠϯελϯεΛڧԽ͠ɺۚͰղܾΛ͍ͯ͠Δ 11
  12. @2020 Torana, Inc. τϥʔφͷ՝୊ ಥ೗ݱΕΔ(PPHMF"QQT&OHJOF  Ϣʔβʔ͕ਃࠐΉͱɺϝʔϧΛಛఆͷϝʔϧΞυϨεͰड৴͠ ͯDSPOͰఆظతʹड৴ͨ͠ϝʔϧΛर͍ɺ࠷ޙʹύʔεͯ͠ 4BB4ʹొ࿥͢Δػೳ͕උΘ͍ͬͯΔ 

    ͜Ε΋ຊ൪؀ڥ͔͠ͳ͍ͷͰςετ͕Ͱ͖ͳ͍ 12
  13. ͜ͷ՝୊ͰԿ͕ى͜Δͷ͔ 13

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

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

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

    7000 2015 2016 2018 2020 16
  17. ͋ͱ͸෼͔Γ·͢Ͷʁ 17

  18. @2020 Torana, Inc. τϥʔφͷ՝୊ 4BB4ͰશͯΛ؅ཧ͍ͯͨ͠  ސ٬ͷ৘ใΛશͯ4BB4Ͱ؅ཧ͍ͯͨ͠  ଞػೳͱͷ࿈ܞ͸+BWB4DSJQUͰ֘౰ͷ4BB4͕ఏڙ͢Δ"1*Λ ࢖ͬͯߦ͍ͬͯͨ

     "1*Λେྔʹୟͨ͘Ίސ٬ৄࡉϖʔδΛ։͘ͷʹඵఔ౓ 
 ͔͔͍ͬͯΔ 18
  19. @2020 Torana, Inc. τϥʔφͷ՝୊ 4BB4ͰશͯΛ؅ཧ͍ͯͨ͠  αʔϏεͷεέʔϧͱγεςϜͷεέʔϧ͕ؒʹ߹͓ͬͯΒͣ "1*ͷ3BUF-JNJUʹසൟʹҾ͔͔ͬΔΑ͏ʹͳͬͨ  લ೚ऀ͕όϯυϧ͞Εͨ+BWB4DSJQU͚ͩΛஔ͍ͯڈ͍ͬͯͬͨ

     ݩʑͷιʔείʔυ͸ͳ͍ɻ  ͦͯ͠ຊ൪؀ڥ͔͠ͳ͍ͷͰςετ͕Ͱ͖ͳ͍ 19
  20. ࠁҰࠁͱഭΔαʔϏεͷण໋Λ 
 ײ͡औΕ·͔ͨ͠ʁ 20

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

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

    
 22
  23. @2020 Torana, Inc. τϥʔφͷ՝୊ 4BB4ͰશͯΛ؅ཧ͍ͯͨ͠  ސ٬ͷ৘ใΛશͯ4BB4Ͱ؅ཧ͍ͯͨ͠  ଞػೳͱͷ࿈ܞ͸+BWB4DSJQUͰ֘౰ͷ4BB4͕ఏڙ͢Δ"1*Λ ࢖ͬͯߦ͍ͬͯͨ

     "1*Λେྔʹୟͨ͘Ίސ٬ৄࡉϖʔδΛ։͘ͷʹඵఔ౓ 
 ͔͔͍ͬͯΔ 23
  24. @2020 Torana, Inc. τϥʔφͷ՝୊ 4BB4ͰશͯΛ؅ཧ͍ͯͨ͠  αʔϏεͷεέʔϧͱγεςϜͷεέʔϧ͕ؒʹ߹͓ͬͯΒͣ "1*ͷ3BUF-JNJUʹසൟʹҾ͔͔ͬΔΑ͏ʹͳͬͨ  લ೚ऀ͕όϯυϧ͞Εͨ+BWB4DSJQU͚ͩΛஔ͍ͯڈ͍ͬͯͬͨ

     ݩʑͷιʔείʔυ͸ͳ͍ɻ  ͦͯ͠ຊ൪؀ڥ͔͠ͳ͍ͷͰςετ͕Ͱ͖ͳ͍ 24
  25. @2020 Torana, Inc. τϥʔφͷ՝୊ ಥ೗ݱΕΔ(PPHMF"QQT&OHJOF  1)1ͷ4MJNͰ࣮૷͞Ε͍ͯͨ  ޾͍೉ಡԽ͸͞Ε͍ͯͳ͔ͬͨ 

    ͨ·ʹ"MMPXFENFNPSZTJ[FΤϥʔΛు͍ͯࢮ͵  ΠϯελϯεΛڧԽ͠ɺۚͰղܾΛ͍ͯ͠Δ 25
  26. @2020 Torana, Inc. τϥʔφͷ՝୊ ಥ೗ݱΕΔ(PPHMF"QQT&OHJOF  Ϣʔβʔ͕ਃࠐΉͱɺϝʔϧΛಛఆͷϝʔϧΞυϨεͰड৴͠ ͯDSPOͰఆظతʹड৴ͨ͠ϝʔϧΛर͍ɺ࠷ޙʹύʔεͯ͠ 4BB4ʹొ࿥͢Δػೳ͕උΘ͍ͬͯΔ 

    ͜Ε΋ຊ൪؀ڥ͔͠ͳ͍ͷͰςετ͕Ͱ͖ͳ͍ 26
  27. ΧΦεͷҰݴͰࣄ଍Γ·͢Ͷ 27

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

  29. ٕज़ͷҙࢥܾఆ 29

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

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

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

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

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

    34
  35. όοΫΤϯυͷ࣮૷ 35

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

     ϑϩϯτΤϯυ͕Ͱ͖ΔͷΤϯδχΞ͕ࢲ͔͍͠ͳ͍ 36
  37. ΋͏Ұճݱঢ়ΛৼΓฦͬͯΈ·͢ 37

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

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

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

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

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

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

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

    44
  45. @2020 Torana, Inc. ͲͷΑ͏ʹٕज़બఆΛߦͬͨͷ͔ ϞμϯͰ͋Δ͔  όοΫΤϯυͷण໋͕௕͍΋ͷͰ͋Δͱஔ͍ͨ࣌ɺࠓϞμϯͳ ٕज़Ͱ΋਺೥ޙʹ͸ރΕٕͨज़ʹͳΔՄೳੑ͕͋Δ  ͦͷͨΊɺͰ͖Δ͚ͩϞμϯͳٕज़Λબఆ͢Δ

     ७ਮʹϞμϯͳ΋ͷͰ͋Ε͹࠾༻ࢢ৔΋޿͘ͳΓ͑ͦ͏ 
 ʢڵຯΛ࣋ͬͯ΋Β͑Δʣ 45
  46. @2020 Torana, Inc. ͲͷΑ͏ʹٕज़બఆΛߦͬͨͷ͔ ύϑΥʔϚϯε  ͦͷٕज़Λ࢖ͬͯύϑΥʔϚϯενϡʔχϯά͕ߦ͑Δ͔Ͳ͏͔  ྫ͑͹03.ʹϩοΫΠϯ͗͢͠ΔͱύϑΥʔϚϯενϡʔχϯ άΛ͢ΔࡍʹোนʹͳΔՄೳੑ͕༧ݟ͞ΕΔ

     ӈݞ্͕Γʹσʔλ͕૿͑ΔͨΊɺ๲େͳσʔλྔͰ΋ॲཧ͕Ͱ ͖Δ΋ͷΛબఆ 46
  47. ͭͷίϚϯυͰ"1*Λੜ΍ͨ͢Ίʹ 
 ඞཁͳݕ౼ࣄ߲ 47

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

  49. @2020 Torana, Inc. ඞཁͳݕ౼ࣄ߲ ڞ௨Խ  $36% $SFBUF 3FBE 6QEBUF

    %FMFUF Λओ࣠ͱͯ͠ɺ"1*࡞੒ޙʹ 
 ΄΅ฤू͢Δඞཁͷͳ͍ͱ͜Ζ·Ͱڞ௨ԽΛ͢Δ  ΋ͪΖΜҰ෦ྫ֎ͳॲཧ΋͋ΔͷͰͦΕʹରԠͰ͖ΔΑ͏ʹ 
 ॊೈੑΛ࢒͢  ςʔϒϧͷεΩʔϚͱϨεϙϯεΛ߹ΘͤΔͷΛج४ʹ  Ұ෦ฦͨ͘͠ͳ͍஋΍໊લΛม͍͑ͨ৔߹ɺςʔϒϧͷεΩʔϚʹͳ͍ ΋ͷ΋ߟྀ͢Δ 49
  50. @2020 Torana, Inc. ඞཁͳݕ౼ࣄ߲ ςετ  ݎ࣮ͳΞϓϦέʔγϣϯΛ໨ࢦͨ͢Ίɺςετ΋ 
 ਖ਼ৗܥύλʔϯɺҟৗܥύλʔϯͷ྆ํΛࣗಈతʹੜ੒͢ΔΑ͏ʹ͢Δ 

    ༧Ίςετ༻ͷγʔυσʔλΛࣗಈతʹੜ੒͢ΔΑ͏ʹ  ༧Ί3%#ʹೖΕ͓ͯ͘΋ͷ  ΦϒδΣΫτΛม্͑ͨͰςετ͔Β3%#্ʹ౤ೖͰ͖ΔΑ͏ʹͯ͠ ͓͘΋ͷ 50
  51. @2020 Torana, Inc. ඞཁͳݕ౼ࣄ߲ υΩϡϝϯτ  υΩϡϝϯτॻ͍ͨΒউखʹίʔυ͕ੜ੒͞Εͯ΄͍͠ʂ  "1*ͷఆٛॻΛݩʹউखʹ"1*Λੜ੒͢ΔΑ͏ʹ 

    "1*ͷఆٛॻυΩϡϝϯτͱ͍͏ܗʹ͢Δ  ͭ·ΓΤϯδχΞ͸"1*ఆٛॻ͑͞ॻ͚͹ɺ΄΅࣮૷໘ͷίʔυΛ 
 ॻ͔ͳͯ͘ࡁΈɺΑΓݎ࣮ͳΞϓϦέʔγϣϯΛ໨ࢦ͢ํ޲ͷ 
 ίʔυΛॻ͘͜ͱʹϑΥʔΧεͰ͖Δ 51
  52. @2020 Torana, Inc. ඞཁͳݕ౼ࣄ߲ ύϑΥʔϚϯε  ݕࡧʹ֘౰͢Δͱ͜Ζ͸શจݕࡧΤϯδϯΛ࢖༻ͯ͠ύϑΥʔϚϯεΛ 
 ޲্͍ͤͨ͞ 

    શจݕࡧΤϯδϯͷϚοϐϯάఆٛΛ"1*ఆٛॻΛݩʹͯࣗ͠ಈੜ੒  ςʔϒϧͷεΩʔϚ͔ΒॏΈ෇͚ΛύλʔϯʹΑͬͯ෼͚ΔΑ͏ʹ  ྫ͑͹ސ٬ͷࢯ໊ͷ৔߹͸είΞΛΑΓॏࢹ͢ΔΑ͏ʹ  ి࿩൪߸ݕࡧͷ৔߹͸ి࿩൪߸ΛΑΓॏࢹ͢ΔΑ͏ͳ෭࡞༻Λ 52
  53. ͭ·ΓʜͭͷίϚϯυΛୟ͚ͩ͘Ͱʜ 53

  54. @2020 Torana, Inc. ͭͷίϚϯυΛୟ͚ͩ͘Ͱʜ "1*ఆٛॻΛݩʹҎԼͷ΋ͷ͕ࣗಈతʹੜ੒͞Ε·͢  $36%ʹରԠͨ͠"1*  શจݕࡧΤϯδϯͷϚοϐϯά 

    ਖ਼ৗܥςετɾҟৗܥςετ  ςετ༻ͷγʔυσʔλɾϑΟΫενϟ 54
  55. @2020 Torana, Inc. ͭͷίϚϯυΛୟ͚ͩ͘Ͱʜ ςετͷ਺͕ 1,011, Ξαʔγϣϯͷ਺͕ 4,577 ͱ
 ςετ͕ͳ͍؀ڥ͔Β͜͜·Ͱͷ਺ʹ

    େྔͷϚοϐϯά༻ͷΫϥεͱςετ 55
  56. "1*ݸͭ͘Δͷʹ෼ʙ෼Ͱ׬ྃ͠ ։ൃ࣌ؒͱίετΛѹ౗తʹ୹ॖ 56

  57. ͱ͍͏͜ͱͰʜ 57

  58. @2020 Torana, Inc. PHP Laravel PHPUnit composer MySQL 8 elasticsearch

    redis AWS docker OpenAPI 58
  59. @2020 Torana, Inc. swoole + laravel-swoole New Relic PagerDuty Terraform

    SendGrid Packer Raygun 59
  60. Ҏ্͕ฐࣾͷٕज़ελοΫͰ͢ 60

  61. Ͳ͏࡞͍͔ͬͯͬͨ 61

  62. @2020 Torana, Inc. Ͳ͏࡞͍͔ͬͯͬͨ 0QFO"1*ͱ.PEFMͷ૒ํؒͰίϯόʔτͰ͖Δ࢓૊ΈΛ༻ҙ  ։ൃ෦Ͱ͸/PSNBMJ[FSͱݺΜͰ͍·͢  ͜ΕʹΑΓϞσϧ͕͍࣋ͬͯΔσʔλΛ0QFO"1*ʹίϯόʔτͨ͠ͱ͖ ʹނҙతʹ৘ใΛࣦΘͤΔ͜ͱ͕Ͱ͖Δ

     Ծ૝ϑΟʔϧυͷ֓೦ΛऔΓೖΕΒΕΔΑ͏ʹ  ฐࣾͷγεςϜͷத֩ͱ͍ͬͯ΋աݴͰ͸ͳ͍ 62
  63. @2020 Torana, Inc. Ͳ͏࡞͍͔ͬͯͬͨ 0QFO"1*ͱ.PEFMͷ૒ํؒͰίϯόʔτͰ͖Δ࢓૊ΈΛ༻ҙ  ݱ৬ʹݶΒͣ࢓༷มߋ͕ଟʑ߱Γֻ͔ͬͨ͜ͱ͕͋Γɺ࢓༷มߋ͕ 
 ൃੜͯ͠΋ॊೈʹ͔ͭૣٸʹରԠ͍ͨ͠ͱ͍͏͜ͱͰ 


    /PSNBMJ[FSͱ͍͏֓೦͕ੜ·Εͨ 63
  64. @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
  65. @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
  66. @2020 Torana, Inc. 0QFO"1*ͱ.PEFMͷ૒ํؒͰίϯόʔτͰ͖Δ࢓૊ΈΛ༻ҙ ʢॳظͷߏ૝Ͱ͢ʣ (MADRAS ͸ࣾ಺γεςϜͷ໊લͰ͢) 66

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


    ͷϨγϐ 67
  68. @2020 Torana, Inc. 0QFO"1*ͱ.PEFMͷ૒ํؒͰίϯόʔτͰ͖Δ࢓૊ΈΛ༻ҙ Model -> OpenAPI
 ͷϨγϐ Ծ૝ϑΟʔϧυͷઃఆ 


    ʢDB ͷϞσϧʹͳ͍΋ͷʣ ࣍ճͷൃૹ೔ͳͲΛฦ͢ 
 ࣗલͷϩδοΫΛॻ͚Δ 68
  69. @2020 Torana, Inc. 0QFO"1*ͱ.PEFMͷ૒ํؒͰίϯόʔτͰ͖Δ࢓૊ΈΛ༻ҙ ෳ਺Ϟσϧͷऔಘ foreign key Λมߋͨ͠ 
 ୯ҰϞσϧͷऔಘ

    OpenAPI -> Model ͷϨγϐ 69
  70. @2020 Torana, Inc. 0QFO"1*ͱ.PEFMͷ૒ํؒͰίϯόʔτͰ͖Δ࢓૊ΈΛ༻ҙ ࣗಈͰੜ੒͞Εͨ/PSNBMJ[FS͕େྔʹ͋Δ  ͭͷ"1*ʹ͖ͭͭ/PSNBMJ[FS͕ 
 ࣗಈͰੜ੒͞Ε·͢ 0QFO"1*

    .PEFM .PEFM0QFO"1*   ࣗಈͰੜ੒͞Εͨ΋ͷΛख௚͠Λ͢Δ ͚ͩͰඞཁͳϨεϙϯεΛ૊ΈཱͯΔ ͜ͱ͕Ͱ͖ɺผͷ։ൃʹ஫ྗͰ͖ΔΑ ͏ʹ 70
  71. @2020 Torana, Inc. Ͳ͏࡞͍͔ͬͯͬͨ .PEFMͷߋ৽࣌ʹ༷ʑͳॲཧΛ͢ΔΑ͏ʹ  σʔλ࡞੒࣌ɾߋ৽࣌ɾ࡟আ࣌ʹ͸ɺ%#ͷεΩʔϚΛϕʔεʹͨ͠ &MBTUJDTFBSDIͷΠϯσοΫεʹରͯ͠ߋ৽͕͔͔ΔΑ͏ʹ͠ɺ 
 શจݕࡧʹରͯ͠Կ΋ߟ͑ͳ͍ͰࡁΉΑ͏ʹ

     ϦϨʔγϣϯ͍ͯ͠ΔϞσϧ΋ࣗಈͰ࡞੒ɾߋ৽ɾ࡟আͳͲࣗಈతʹॲཧ ͞ΕΔΑ͏ʹͯ͠ɺϦϨʔγϣϯͷϞσϧʹରͯ͠Կ΋ߟ͑ͳ͍ͰࡁΉΑ ͏ʹ  Ωϟογϡ΋อଘɾ࡟আ͠ɺύϑΥʔϚϯεΛ༧Ί޲্͓ͤͯ͘͞ 71
  72. @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
  73. @2020 Torana, Inc. Ͳ͏࡞͍͔ͬͯͬͨ ݕࡧΫΤϦ͸͢΂ͯ&MBTUJDTFBSDI΁  %#εΩʔϚͱݕࡧΫΤϦΛϚοϐϯάͤ͞ɺΫΤϦจࣈྻ͔Β &MBTUJDTFBSDIͷݕࡧΫΤϦΛߏங͠ɺݕࡧͤ͞ΔΑ͏ʹ  ·ͨɺ͸͡Ί͔Β-BSBWFMͷSFTPVSDFͷJOEFY͸͢΂ͯ&MBTUJDTFBSDI

    Λࢀর͢ΔΑ͏ʹ͠ɺ&MBTUJDTFBSDIͷ͜ͱΛߟ͑ͳ͍Α͏ʹ  &MBTUJDTFBSDIͰݕࡧͰ͖Δ಺༰Λऔಘ͢ΔͨΊͷ"1*Λ༧Ίੜ΍͠ɺ 
 ϑϩϯτΤϯυͰݕࡧ৚݅Λ࠶ఆٛ͢ΔඞཁΛແ͘͠ɺ։ൃͷ࠷దԽ΁  ͳΔ΂͘3%#͸ࢀরͤ͞ͳ͍ 73
  74. @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
  75. @2020 Torana, Inc. ݕࡧΫΤϦ͸͢΂ͯ&MBTUJDTFBSDI΁ /api/v1/XXX + { ... query: {

    match_all: {} } ... } Elasticsearch ௨ৗͷ index ΋ Elasticsearch Λհ͢ Elasticsearch Ͱݕࡧ ݕࡧ৚͕݅ಛʹͳ͍৔߹͸ match_all Ͱ 75
  76. @2020 Torana, Inc. ݕࡧΫΤϦ͸͢΂ͯ&MBTUJDTFBSDI΁ ݕࡧ৚݅Λࣗಈੜ੒  &MBTUJDTFBSDIͰݕࡧͰ͖Δ΋ͷΛ 
 औಘ͠ɺϑϩϯτଆ͸ͨͩͦΕΛ 


    දࣔ͢Δ͚ͩ  ݕࡧ৚݅ʹ͋ͬͨϑΥʔϜΛશը໘ʹ खͰೖΕΔͷ͸ඇޮ཰ͩ͠ے೑Τϯδ χΞ͕଍Γͳ͍  ͦΕͱ७ਮʹॻ͘ͷ͕ਏ͍ 76
  77. @2020 Torana, Inc. ݕࡧΫΤϦ͸͢΂ͯ&MBTUJDTFBSDI΁ API ͷ݁Ռ͔ΒϑΥʔϜΛ࡞੒ 77

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

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

    79
  80. @2020 Torana, Inc. Ͳ͏࡞͍͔ͬͯͬͨ 0QFO"1*Λఆٛͯ͠ɺίϚϯυͰϑΝΠϧΛ࡞੒  AQIQBSJTBONBLFYYYAͰඞཁͳϑΝΠϧΛࣗಈͰ࡞੒Ͱ͖ΔΑ͏ʹ  όοΫΤϯυΤϯδχΞ͸όϦσʔγϣϯϧʔϧͷఆٛͱ 


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

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

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

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

    ςετ͕ӡ༻͞Ε͍ͯͳ͍ͱɺҎޙͷσϓϩΠ΍༷ʑͳػೳ։ൃʹ 
 ଟେͳӨڹΛٴ΅͢͸໨ʹݟ͍͑ͯΔ  ೲظ͕୹͍͔Βແཧͱ͍͏ཧ༝͕͋ΔͳΒೲظΛ৳͹͢͜ͱʹ 
 ਚྗ͢΂͖ʢͦ͏͍͏ίϛϡχέʔγϣϯΛऔΔʣ 
 84
  85. @2020 Torana, Inc. 0QFO"1*Λఆٛͯ͠ɺίϚϯυͰϑΝΠϧΛ࡞੒ ίϚϯυΛ࣮ߦ 85

  86. @2020 Torana, Inc. ඞཁͳ΋ͷΛશͯࣗಈͰੜ੒ OpenAPI ͷఆٛॻ ίϚϯυͷ࣮ߦ ίϯτϩʔϥʔͷ࡞੒ ςετͷ࡞੒ ϑΟΫενϟͷ

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

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

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

    ίϯτϩʔϥʔΛܧঝ ֎෦෺ྲྀ API ܾࡁγεςϜ Google Developer API ֎෦ͱͷ௨৴ΛϞοΫ͢Δ ϧʔςΟϯάͷ੾Γସ͑ 89
  90. @2020 Torana, Inc. ඞཁͳ΋ͷΛશͯࣗಈͰੜ੒ ௨ৗͷΞΫηε࣌ App\Http\Controller ڞ௨ͷαʔϏεϓϩόΠμʔ ςετͷΞΫηε࣌ Tests\Units\Controller 90

  91. @2020 Torana, Inc. ඞཁͳ΋ͷΛશͯࣗಈͰੜ੒  ϞοΫΛհ͢͜ͱͰॊೈʹίϯτϩʔϥʔ͔ΒͷϨεϙϯεʹରԠ  ྫ͑͹Ұ෦ͷϞσϧͷΈΛϞοΫʹࠩ͠ସ͍͑ͨΈ͍ͨͳधཁʹ΋ରԠ  -BSBWFMͷ5FTU$BTFʹ͋Δ७ਮͳAUIJTKTPOA΍AUIJTQPTUAΛ

    ݺͼग़ָͯ͠ʹςετ͔ͨͬͨ͠  ͦΕʹΘ͟Θ͟࢖༻ճ਺Λࢦఆͨ͠ΓɺฦΓ஋Λςετ͝ͱʹࢦఆ͢Δඞ ཁ͕ͳ͘ͳΔ  ͭ·Γগਓ਺Ͱͷ։ൃָ͕ʹͳΔ 91
  92. @2020 Torana, Inc. 0QFO"1*Λఆٛͯ͠ɺίϚϯυͰϑΝΠϧΛ࡞੒ ςετͱϑΟΫενϟɺίϯτϩʔϥͳͲ 
 "1*ʹඞཁͳ΋ͷΛશͯࣗಈͰੜ੒  ը૾Ξοϓϩʔυ͸AJT6QMPBEBCMFAͷΑ͏ͳৗ࣌GBMTFΛ 


    ฦ͢Α͏ʹ͍ͯ͠ΔϝιουΛΦʔόʔϥΠυͯ͠USVFΛฦ͢Α͏ʹ͠ɺ ϞσϧͰΞοϓϩʔυ͕ඞཁͳϞσϧͱϚοϐϯά͢ΔΑ͏ʹ͢Δ  ͜ΕʹΑΓը૾ͷΞοϓϩʔυʹ͍ͭͯ΄΅ߟ͑ͳ͍ͰࡁΉΑ͏ʹ 92
  93. @2020 Torana, Inc. ඞཁͳ΋ͷΛશͯࣗಈͰੜ੒ APIController (API ͷجఈΫϥε) Uploadable τϨΠτΛಡΈࠐΉ τϨΠτΛಡΈࠐΉ͚ͩͰ

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

  95. @2020 Torana, Inc. Ͳ͏࡞͍͔ͬͯͬͨ ίϯτϩʔϥʔʹ͸ϩδοΫΛॻ͔ͳ͍  ҰൠతʹݴΘΕ͍ͯΔ͜ͱ͕ͩʢجఈΫϥε΋ؚΊͯʣίϯτϩʔϥʔʹ͸ ϏδωεϩδοΫΛॻ͔ͳ͍ɻ  τϥʔφ͸ඞཁͳ৘ใΛϞσϧʹॻ͖ɺίϯτϩʔϥʔ͸ͦͷ৘ใ͕͋

    Δͱ͍͏લఏͰந৅Խͯ͠ॲཧΛ͍ͯ͠Δɻ  ͦΕͰ΋ओʹ૸Δͷ͸ϦΫΤετͷόϦσʔγϣϯͱอଘॲཧʢΞοϓ ϩʔυ΋ؚΊͯʣͷΈɻ  ίϯτϩʔϥʔϞσϧͷΑ͏ͳελΠϧͰॻ͍͍ͯΔ 95
  96. @2020 Torana, Inc. Ͳ͏࡞͍͔ͬͯͬͨ όοΫΤϯυΤϯδχΞ͸ 
 ίϯτϩʔϥʔΛ৮Βͳ͍Α͏ʹ  จࣈ͸ͪͬͪΌ͍͕͜ͷεΫϦʔϯγϣοτ Ͱऩ·Δ͘Β͍ʹίϯτϩʔϥʔͷॲཧ͸গ

    ͳ͍ɻ  ͜Μͳײ͡ͷίϯτϩʔϥʔ͕େྔʹ͋Δ  جఈΫϥεͰ΋ߦ͘Β͍͔͠ͳ͍ 96
  97. @2020 Torana, Inc. Ͳ͏࡞͍͔ͬͯͬͨ ඞཁͳ৘ใ͸Ϟσϧʹू໿͠ɺ
 ίϯτϩʔϥʔ͸ͦΕΛ࢖͏͚ͩ 97

  98. @2020 Torana, Inc. Ͳ͏࡞͍͔ͬͯͬͨ -BSBWFMʹґଘͭͭ͠ґଘ͠ͳ͍  -BSBWFMʹґଘ͗͢͠ΔͱָͰ͸͋Δ͕ɺϩοΫΠϯ͞Ε͗͢ΔͱϑϨʔϜ ϫʔΫ΁৐Γ׵͕͑Ͱ͖ͳ͍  ͱ͸͍͑ɺ౰࣌͸։ൃ෦ͷϝϯόʔ͸ۃগͩͬͨͨΊɺґଘ͢Δͱ͜Ζ͸ґ

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

    ʹ͢Δ 99
  100. @2020 Torana, Inc. -BSBWFMʹґଘͭͭ͠ґଘ͠ͳ͍ Controller AppModel Domain Elasticsearch ෺ྲྀγεςϜ ܾࡁγεςϜ

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

    Cache DB Mail γεςϜͷण໋͕དྷͨͱ͖ͷϦϓϨΠε͸੺࿮Λࠩ͠ସ͑Δ͚ͩ Laravel ʹґଘ͍ͯ͠ͳ͍Օॴ (ϏδωεϩδοΫ) Normalizer جຊతʹϞσϧΛ௨͢Α͏ʹ͠ɺ ґଘؔ܎Λۃྗ΁Β͢ Model Laravel ΁ͷґଘ͸ย଍ಥͬࠐΜͰ͍Δ 101
  102. @2020 Torana, Inc. Ͳ͏࡞͍͔ͬͯͬͨ 4BB4͔ΒσʔλΛҠߦ͠΍͍͢Α͏ʹ  ฐ͕ࣾ࢖͍ͬͯΔ4BB4ʹϦϨʔγϣϯͳΜ͍ͯ͏֓೦͸ͳ͍  ͱ͸͍͑3%#ʹҠߦ͢ΔΘ͚ͳͷͰɺকདྷతͳεέʔϧΛݟӽͯ͠Ϧ ϨʔγϣϯͰ͖ΔΑ͏ʹ͍࣋ͬͯ͘ɻ

     ͦͷͨΊؒʹࣾ಺Ͱίϯόʔλʔͱݺ͹Ε͍ͯΔ΋ͷΛ࢖༻ͯ͠3%#΁ Ҡ২ 102
  103. @2020 Torana, Inc. 4BB4͔ΒσʔλΛҠߦ͠΍͍͢Α͏ʹ SaaS CSV ΤΫεϙʔτ چγεςϜ ৽γεςϜ ίϯόʔλʔ

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

    RDB Amazon VPC (ຊ൪) RDB Amazon VPC (εςʔδϯά) ɾސ٬ΞϓϦ ɾ͓΋ͪΌΞϓϦ ɾ഑ૹΞϓϦ ɾetc... SaaS ্Ͱ͸ςʔϒϧͷ୅ΘΓʹ ΞϓϦͱݺΜͰ͍·͢ ɾސ٬ςʔϒϧ ɾetc... ɾސ٬ॅॴ ɾސ٬੥ٻઌॅॴ ɾސ٬ͷܖ໿৘ใ ɾސ٬ͷ͓ࢠ༷৘ใ ɾ഑ૹཤྺ ɾ഑ૹ͓΋ͪΌ ɾ… ɾސ٬ςʔϒϧ ɾetc... ɾސ٬ॅॴ ɾސ٬੥ٻઌॅॴ ɾސ٬ͷܖ໿৘ใ ɾސ٬ͷ͓ࢠ༷৘ใ ɾ഑ૹཤྺ ɾ഑ૹ͓΋ͪΌ ɾ… ςʔϒϧͰݴ͏ͱ 1 ͭͷϨίʔυͰ ෳ਺ͷ৘ใΛ؅ཧ͍ͯͨ͠΋ͷΛ 
 ਖ਼نԽ͠ɺϦϨʔγϣϯؔ܎Λ੔ཧ 104
  105. ࡞͍ͬͯΔͱ͖ʹى͖ͨ՝୊ 105

  106. νʔϜ໘ 106

  107. @2020 Torana, Inc. ࡞͍ͬͯΔͱ͖ʹى͖ͨ՝୊νʔϜ໘ ੒Ռ͕ଞͷϝϯόʔ͔Βݟ͑ͮΒ͍  όοΫΤϯυͱ͍͏ੑ࣭͔Β͔੒Ռ͕ΤϯδχΞҎ֎ͷ 
 ϝϯόʔ͔ΒݟΔͱ੒Ռ͕ݟ͑ͮΒ͍ 

    ཧղΛͯ͠΋Β͏Α͏ʹίϛϡχέʔγϣϯΛऔΔͷ͕େ੾  ͳͥɺ͜ΕΛ΍͍ͬͯΔͷ͔ɺͳͥඞཁͳͷ͔ΛͪΌΜͱ 
 ڞ༗͠આ໌͢Δ 107
  108. @2020 Torana, Inc. ࡞͍ͬͯΔͱ͖ʹى͖ͨ՝୊νʔϜ໘ ࣗ෼ࣗ਎੒ՌΛ͋͛ΒΕ͍ͯΔ͔ෆ҆ʹͳΔ  ελʔτΞοϓ͔ͩΒͦ͜ɺεϐʔυײΛ࣋ͬͯ΍Βͳ͖Ό͍͚ͳ͍͜ͱ Λ࠷ॳ͸ਅٯͷํ޲Λ૸Δඞཁ͕͋Δ  ঃʑʹࣗ෼͕੒ՌΛ͋͛ΒΕ͍ͯΔͷ͔ͱෆ҆ʹ͔ΒΕΔ͜ͱ͕ଟʑ͋Δ

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

     ͱ͸͍͑ɺϏδωεαΠυͷཁ๬΋׎͍͖͍͑ͯͨ  ͜ͷઢҾ͕೉͔ͬͨ͠ɻ 109
  110. @2020 Torana, Inc. ࡞͍ͬͯΔͱ͖ʹى͖ͨ՝୊νʔϜ໘ ਓ͕଍Γͳ͗͢͞Δ  ελʔτΞοϓ͋Δ͋Δ͕ͩਓ͕଍Γͳ͗͢Δ  ࢲ͕όοΫΤϯυͱΠϯϑϥͱϑϩϯτΤϯυͱ࠾༻ͱ৘γεͳͲΛ݉ ೚͍ͯͨ͠

     ౰࣌͸໊ମ੍ͰҰਓ͸4BB4ͷରԠʹ௥ΘΕ͍ͯͨ  ࣮࣭ࢲҰਓͰ࣮૷͍ͯͨ͠  ୅දͱͷPO͸ຖճʮਓ͕଍Γͳ͍Ͳ͏͠Α͏ʯͱ͍͏࿩ͰऴΘΔ 110
  111. @2020 Torana, Inc. ࡞͍ͬͯΔͱ͖ʹى͖ͨ՝୊νʔϜ໘ ਓ͕଍Γͳ͗͢͞Δ  ࠷ॳ୅ද͸ϋʔυ΢ΣΞ։ൃؚΊͯਓ͘Β͍ͷ૊৫ʹͳΕ͹͍͍ͱࢥ͍ͬͯͨ  ΋ͪΖΜݎ࣮Ͱ͔ͭεέʔϥϒϧͳΞϓϦέʔγϣϯΛ໨ࢦ͢ʹ͸ 


    શવ଍Γͳ͍  ࢲ͕ٳΜͩΒӡ༻͸ճΔ͚Ͳ։ൃ͕ʢຊ౰ʹʣࢭ·Δ  ΋͸΍ɺ΍͍ͬͯΔ͜ͱ͕ϚωʔδϟʔͰ͸ͳ͘$50Ͱ͸  ϓϩμΫτ։ൃ෦ͷϝϯόʔʹ$50ͱ͢ΒࢥΘΕ͍ͯͨ 111
  112. ٕज़໘ 112

  113. @2020 Torana, Inc. ࡞͍ͬͯΔͱ͖ʹى͖ͨ՝୊ٕज़໘ -BSBWFMͷԸܙΛͲ͜·Ͱड͚Δ͔൑அʹ໎ͬͨ  ϩοΫΠϯ͗͢͠ΔͱϦϓϨΠεͷͱ͖ͷେ͖ͳฐ֐ʹͳΔͷ͸Θ͔Γ ͖͍ͬͯΔ  ͜Ε͸ࠓ·Ͱࢲ͕ܦݧͨ͠اۀྫ֎ͳ͘શͯͰฐ֐ʹͳ͍ͬͯͨ

    
 ܦݧ͕͋Δ͔Βͦ͜  ͱ͸͍͑গਓ਺Ͱ-BSBWFMͷԸܙΛ΄΅ड͚ͳ͍ঢ়ଶ͔ͭந৅ԽΛ͢Δͨ Ίͷ࣌ؒ͸͋Δͷ͔ɺͱ͍ͬͨόϥϯεΛऔΔ൑அ͕೉͔ͬͨ͠ 113
  114. @2020 Torana, Inc. ࡞͍ͬͯΔͱ͖ʹى͖ͨ՝୊ٕज़໘ ۀ຿ϑϩʔ͕७ਮʹ೉ղ  ෺ྲྀͱ͍͏ಛੑ΋͋ͬͯɺ͋·Γ࢖Θͳ͍Α͏ͳ୯ޠ͕େྔʹग़ͯ͘Δ  ೖݿɺग़ݿɺ࢓ೖΕɺ୨ɺ૔ݿɺݮՁঈ٫ 

    εςʔλεͱ͍͏֓೦͕େྔʹग़͖ͯͯɺࣅͯඇͳΔ΋ͷ͕͋Δ  ൃૹࡁΈɺൃૹதɺഇغɺෆඋɺച٫ɺӡ༻தʜͳͲͳͲ  ଞʹ΋৽͍֓͠೦͕ొ৔͢ΔՄೳੑ͕͋Δ  ݸମ؅ཧɺൃૹͷ௥੻ɺ഑ૹ୅ߦձࣾ 114
  115. @2020 Torana, Inc. ࡞͍ͬͯΔͱ͖ʹى͖ͨ՝୊ٕज़໘ ۀ຿ϑϩʔ͕७ਮʹ೉ղ  ϓϥϯφʔͷϓϥϯχϯά࠷దԽʹ͍ͭͯ  ೥୅ʹ߹Θ͓ͤͨ΋ͪΌΛ͋Δఔ౓ग़ͨ͠ޙʹɺϓϥϯφʔʹΑΔ͓΋ ͪΌͷػցతʹग़ͨ͠΋ͷ͔Β࠶બఆΛߦ͏

     ͲͷλΠϛϯάͰԿ͕ൃՐ͢Δ͔෼͔ΓͮΒ͍  ͦͯ͠؊৺ͷίʔυ͸όϯυϧ͞Ε͍ͯͯಡΉ͕࣌ؒͳ͍ ʢ※※※ಡΊͳ͍Θ͚Ͱ͸ͳ͍※※※ʣ 115
  116. @2020 Torana, Inc. ࡞͍ͬͯΔͱ͖ʹى͖ͨ՝୊ٕज़໘ ۀ຿ϑϩʔ͕७ਮʹ೉ղ  ߋʹ͍͏ͱ࢖͍ͬͯΔεςʔλεͱ࢖͍ͬͯͳ͍εςʔλε͕ 
 ࠞࡏ͍ͯͨ͠ 

    ΦϖϨʔγϣϯ্ඞཁͷͳ͍4BB4্ͷϑΟʔϧυ΋͋ͬͨ 116
  117. @2020 Torana, Inc. ࡞͍ͬͯΔͱ͖ʹى͖ͨ՝୊ٕज़໘ εέʔϧΛݟӽͨ͠ݕ౼ࣄ߲ΛͲ͜·Ͱࢥྀ͢Δ͔  த௕ظతʹݟͯϓϩμΫτ͕εέʔϧ͞ΕΔ͜ͱ͕Θ͔Γ͖͍ͬͯΔ΋ͷ ͕͋Δ͕ɺ͜ΕΛͲ͜·Ͱ࠷ॳʹσʔλϕʔεͷεΩʔϚʹऔΓೖΕΔ͔ Λࢥྀ͢Δඞཁ͕͋Δ 

    େྔʹ΍ΔͱɺϦιʔεෆ଍ͱͳΔ͜ͱ΋໨ʹݟ͍͑ͯΔ  ͱ͸͍͑ઌʹ΍͓͔ͬͯͳ͍ͱ%#ͷϚΠάϨʔγϣϯ͕ൃੜ͢ΔͷͰ ീํ࠹͕Γ 117
  118. @2020 Torana, Inc. ࡞͍ͬͯΔͱ͖ʹى͖ͨ՝୊ٕज़໘ ΠϯγσϯτରԠΛͲ͜·ͰରԠ͢Δ͔  ελʔτΞοϓͰΑ͘๨ΕΒΕ͕ͪͳͷ͕ΠϯγσϯτରԠ  େ͖͍ΤϯδχΞͷ૊৫ͩͱΠϯγσϯτରԠ͕طʹࢥྀ͞Ε͍ͯΔ 


    ͜ͱ͕ଟ͍ͬΆ͍  ΤϥʔϩάͷऩूɺՄࢹԽɺૣٸͳରԠͳͲΛ͍͖͍ͯͨ͠ 118
  119. @2020 Torana, Inc. ࡞͍ͬͯΔͱ͖ʹى͖ͨ՝୊ٕज़໘ σʔλͷଟ͍"1*ͷύϑΥʔϚϯε͕஗͍  τΠαϒͷγεςϜͰ͸ൃૹ৘ใ͕ཁͱ͍ͬͯ΋աݴͰ͸ͳ͍  ൃૹ৘ใʹ͸ސ٬ͷ৘ใɺൃૹઌॅॴɺ੥ٻઌॅॴɺܖ໿৘ใɺൃૹ͠ ͓ͨ΋ͪΌʢ਺఺ʣɺ਌ൃૹ৘ใͳͲେྔͷσʔλ͕Ϩεϙϯε͕ฦΔ

     ࠷ॳҰཡΛग़͢ͷʹඵ͔͔͍ͬͯͨ 119
  120. ՝୊ΛͲ͏ղܾ͔ͨ͠ 120

  121. νʔϜ໘ 121

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

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

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

    ίϛοτ਺Λݟͯʮࢲ͸࢓ࣄΛ 
 ͍ͯ͠ΔΜͩʯͱ҉ࣔΛ͔͚Δ 124
  125. @2020 Torana, Inc. ՝୊ΛͲ͏ղܾ͔ͨ͠νʔϜ໘ ϏδωεαΠυͱ࣮ࡍʹඞཁͳػೳͷམͱ͠ॴ͕೉͍͠  4BB4ଆΛ୲౰͍ͯͨ͠ΤϯδχΞ͕1E.1K.ͷܦݧ͕͋Γɺඞཁͳػ ೳͷચ͍ग़͠Λ͓ئ͍͢Δܗ΁  εϓϨουγʔτʹԿ͕ඞཁͰԿ͕ඞཁ͡Όͳ͍ͷ͔Λॻ͖ग़͍ͯ͘͠

     1E.1K.ͷΤϯδχΞ͕ϏδωεαΠυͱͷؒʹڬ·Γɺམͱ͠ॴΛ࿩ ͠ɺΤϯδχΞ͸։ൃʹूத͢Δମ੍΁ 125
  126. @2020 Torana, Inc. ՝୊ΛͲ͏ղܾ͔ͨ͠νʔϜ໘ ϏδωεαΠυͱ࣮ࡍʹඞཁͳػೳͷམͱ͠ॴ͕೉͍͠ 126

  127. @2020 Torana, Inc. ՝୊ΛͲ͏ղܾ͔ͨ͠νʔϜ໘ ਓ͕଍Γͳ͗͢͞Δ  ࠾༻νϟωϧ͕ݩʑ8BOUFEMZͱϦϑΝϥϧ͔͠ͳ͔͕ͬͨɺ 
 ΤʔδΣϯτΛؚΊ࠾༻νϟωϧΛ૿΍͢ಈ͖Λ͢ΔΑ͏ʹ 

    ͳͥਓ͕଍Γͳ͍ͷ͔ʁͲΕ͘Β͍ͷਓ͕ඞཁͳͷ͔ΛϓϩδΣΫτʹ Αͬͯ෼ੳ͠ɺݕ౼ΛॏͶΔ  ΤϯδχΞͷࢢ৔ͷ૬৔ͱٻΊΔਓ෺૾ΛυΩϡϝϯτʹચ͍ग़͠ɺ 
 ͦͷΤϯδχΞ͕ͲΕ΄ͲඞཁͰ͋Δ͔ɺͱ͍͏ͷΛߟ͑Δ 127
  128. @2020 Torana, Inc. ՝୊ΛͲ͏ղܾ͔ͨ͠νʔϜ໘ ਓ͕଍Γͳ͗͢͞Δ ϓϩδΣΫτͱ༧ࢉ ࠾༻ʹ͍ͭͯ ٻΊΔ΂͖৬ೳͱ૝ఆ೥ऩ 128

  129. @2020 Torana, Inc. ՝୊ΛͲ͏ղܾ͔ͨ͠νʔϜ໘ ਓ͕଍Γͳ͗͢͞Δ 0 1.75 3.5 5.25 7

    2020/04 2020/06 2020/08 2020/12 ΤϯδχΞͷ਺͕૿͖͑ͯ·ͨ͠ 7 5 4 2 129
  130. ٕज़໘ 130

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

    ʹϑϩϯτΤϯυΛؚΊίʔυΛॻ͘ܗʹ 131
  132. @2020 Torana, Inc. ՝୊ΛͲ͏ղܾ͔ٕͨ͠ज़໘ ۀ຿ϑϩʔ͕७ਮʹ೉ղ  ϏδωεαΠυͱ࿩͠߹͍Ͳ͏͍͏ۀ຿ϑϩʔͰਐΊ͍ͯΔͷ͔ΛυΩϡϝ ϯτʹ·ͱΊͯ΋Β͏Α͏ʹίϛϡχέʔγϣϯΛऔΔ  ࣮ࡍʹΦϯϥΠϯͰ4BB4ͷ࢖͍ํΛ໨ࢹɺΦϯϘʔσΟϯάͯ͠΋Β͏ɻ

     ૬खʹ͍ͭ͜͠ͱࢥΘΕͯ΋͍͍ؾ࣋ͪͰίϛϡχέʔγϣϯΛ 
 औΓଓ͚Δ  ఆظతʹϏδωεαΠυͱ.5(Λߦ͍ɺ࿙Ε͕ͳ͍͔֬ೝΛ͍ͯ͘͠ 132
  133. @2020 Torana, Inc. ՝୊ΛͲ͏ղܾ͔ٕͨ͠ज़໘ ۀ຿ϑϩʔ͕७ਮʹ೉ղ  ۀ຿ϑϩʔΛ෼ղͯ͠ɺγϯϓϧʹଊ͑ΒΕΔΑ͏ʹ͍ͯ͘͠  γϯϓϧʹଊ͑ͨ΋ͷΛ4BB4ͷը໘Λ૝૾͠ͳ͕Β 


    "1*ʹམͱ͍ͯ͘͠ 133
  134. @2020 Torana, Inc. ՝୊ΛͲ͏ղܾ͔ٕͨ͠ज़໘ ۀ຿ϑϩʔ͕७ਮʹ೉ղ 134

  135. @2020 Torana, Inc. ՝୊ΛͲ͏ղܾ͔ٕͨ͠ज़໘ εέʔϧΛݟӽͨ͠ݕ౼ࣄ߲ΛͲ͜·Ͱࢥྀ͢Δ͔  ೥εύϯͰඞཁͦ͏ͳ΋ͷ͸༧Ί੝ΓࠐΜͰ͓͘  ྫ͑͹ɺ෺ྲྀγεςϜͰ͋Ε͹ɺݱࡏฐࣾͰ͸ओʹࣾͷΈͰ͋Δ͕ɺ ͜Ε͕֦େ͢Δ͜ͱ͸༰қʹ૝૾Ͱ͖ΔͷͰɺ༧Ίෳ਺ͷ෺ྲྀγεςϜ

    ΛೖΕΒΕΔΑ͏ʹ૊ΈࠐΜͰ͓͘  ଞʹ΋ɺސ٬৘ใ͸Ұਓ͋ͨΓҰܖ໿લఏͱ͍͏࡞ΓͰ͋Δ͕ɺ͜ΕΛ 
 ৽γεςϜͰ͸ސ٬Ұਓ͋ͨΓͷܖ໿Λෳ਺ܖ໿࣋ͯΔܗʹ 
 Ҡߦ͢ΔͳͲ 135
  136. @2020 Torana, Inc. ՝୊ΛͲ͏ղܾ͔ٕͨ͠ज़໘ εέʔϧΛݟӽͨ͠ݕ౼ࣄ߲ΛͲ͜·Ͱࢥྀ͢Δ͔  ͨͩ͠ྫ͑͹lকདྷ͜͏͍͏৽ػೳ͕΄͍͠ΜͩΑͶz͸ରԠ͠ͳ͍  ৽ػೳʹରԠ͍ͯͨ͠ΒΩϦ͕ͳ͍ͨΊ 

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

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

    ੜ໋͕ऴΘͬͯ͠·͏͜ͱ΋͋Γ͏Δɻ  ͦͷͨΊΠϯγσϯτରԠ͸༧Ίෳ਺ͷखஈͰରԠ͢Δ͜ͱΛॳΊ͔Β औΓ૊Ή͜ͱʹͨ͠ 138
  139. @2020 Torana, Inc. ՝୊ΛͲ͏ղܾ͔ٕͨ͠ज़໘ ΠϯγσϯτରԠΛͲ͜·ͰରԠ͢Δ͔  ΠϯγσϯτରԠΛॳΊ͔Β૊ΈࠐΜͰ͓͘͜ͱʹΑΓ  طଘͷΞϓϦέʔγϣϯͷ໰୊఺Λຒ΋Εͤ͞ͳ͍Α͏ʹ͢Δ 

    ྫ͑͹4MPX2VFSZͩͱ͔  Τϥʔ͕ग़ͯΔ͚Ͳɺճආࡦ͕͔͋ͬͨΒɺͯ͞͠ॏཁ͡Όͳ͍ ͱ൑அ͞Εͯڞ༗͞Εͳ͍ͳͲ 139
  140. @2020 Torana, Inc. swoole + laravel-swoole New Relic PagerDuty Terraform

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

    SendGrid Packer Raygun NewRelic ͔Βͷ௨஌Λ Slack ΍ి࿩ʹ ΤϥʔϩάऩूͷͨΊ ΞϓϦέʔγϣϯͷ 
 ύϑΥʔϚϯε؂ࢹ 141
  142. @2020 Torana, Inc. ՝୊ΛͲ͏ղܾ͔ٕͨ͠ज़໘ σʔλͷଟ͍"1*ͷύϑΥʔϚϯε͕஗͍  4XPPMFͱMBSBWFMTXPPMFΛ࢖༻ͯ͠಺෦ͷ1%0Λߴ଎Խ  4XPPMFʹΑͬͯ1%0͕ஔ͖׵͑ΒΕωοτϫʔΫ*0ͷ࠷దԽ͕ߦ ΘΕΔ

     ೖΕΔσϝϦοτ͸ϗοτϦϩʔυ͕Ͱ͖ͳ͘ͳΔͷͱQIQGQNΛ 
 ೖΕସ͑Δඞཁ͕͋Δ͘Β͍  ͜ΕͰඵ͔Βඵ͘Β͍ʹͳͬͨͷͰ໿ഒߴ଎ԽͰ͖ͨ 142
  143. @2020 Torana, Inc. ՝୊ΛͲ͏ղܾ͔ٕͨ͠ज़໘ σʔλͷଟ͍"1*ͷύϑΥʔϚϯε͕஗͍  औಘ͢ΔϑΟʔϧυɺ/PSNBMJ[FSͷ֊૚Λ੍ݶ͠ɺύϥϝʔλʔͰ 
 ໘౗ͯ͘͘͞΋ௐ੔͢ΔΑ͏ʹ 

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

    ͜ΕͰඵ͔Βdඵ͋ͨΓʹͳΓɺ໿ഒૣ͘ͳΓ·ͨ͠  ΋ͪΖΜऔಘ͢Δύϥϝʔλʔ͕૿͑Δͱͦͷ෼஗͘ͳΓ·͕͢ʜ  ݱࡏਐߦܥͰΫΤϦͷ࣮ߦΛݮΒͨ͢Ίʹɺෳ਺݅औಘ͢Δ৔߹͸ 
 ༧Ίඞཁͳ৘ใΛ͔͖ूΊ͓ͯ͘&BHFS-PBEJOHͷΑ͏ͳ΋ͷΛ 
 ࣮૷͠ύϑΥʔϚϯε޲্Λ໨ࢦ͍ͯ͠·͢ 144
  145. @2020 Torana, Inc. σʔλͷଟ͍"1*ͷύϑΥʔϚϯε͕஗͍ /api/v1/shipments ਌ൃૹ৘ใ ൃૹํ๏ ഑ૹۀऀ໊ ൃૹ͓΋ͪΌ ͓΋ͪΌৄࡉ

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

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

    ϝʔΧʔ αϓϥΠϠʔ ݸମ৘ใ ୨৘ใ ൃૹ͓΋ͪΌ ͓΋ͪΌৄࡉ ϝʔΧʔ αϓϥΠϠʔ ૔ݿৄࡉ ৔߹ʹΑͬͯ͸ϑΟʔϧυΛߜͬͯਂ͞Λ૿΍͢ͳͲͰରࡦ 147
  148. @2020 Torana, Inc. ՝୊ΛͲ͏ղܾ͔ٕͨ͠ज़໘ σʔλͷଟ͍"1*ͷύϑΥʔϚϯε͕஗͍  ࣮ࡍͷBQJWTIJQNFOUT͸͜ΕҎ্ʹ৘ใ͕͋Δ  ͦͷը໘ʹΑͬͯ࢖͏࢖Θͳ͍Λબผ͢Δखؒ͸૿͑Δ͕ 


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

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

  151. ·ͱΊ 151

  152. @2020 Torana, Inc. ·ͱΊ  "1*࣮૷ͷΦʔτϝʔγϣϯԽͷ࣮ݱͷͨΊʹ͸ɺٕज़తͳ 
 ՝୊͚ͩͰ͸ͳ͘ɺΦϖϨʔγϣϯ໘ͰͷΤϯδχΞϦϯά΋ඞཁ  ΦʔτϝʔγϣϯԽͷͨΊʹ͸͍͔ͭ͘ߟྀ͠ͳ͚Ε͹͍͚ͳ͍

    
 ఺͕͋Δ  ΦʔτϝʔγϣϯԽ͸੒Ռ͕ݟ͑ͮΒ͍ͷͰϝϯλϧΛอͭ౒ྗΛ ੯͠·ͳ͍Α͏ʹ͠Α͏  ϥΫ͞ͱύϑΥʔϚϯε͸τϨʔυΦϑ  ΦʔτϝʔγϣϯԽͯ͠΋ɺ͠ͳͯ͘΋ਓ͕଍Γͳ͍ͷ͸มΘΒͳ ͍ͷͰ࠾༻͸͍ͯ͜͠͏ 152
  153. 5)"/,:06'03:063 -*45&/*/( 153

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