FOLIO のマイクロサービス in Action / FOLIO's Microservices in Action

FOLIO のマイクロサービス in Action / FOLIO's Microservices in Action

A951d6c14b585791bf573afbee1e9be5?s=128

Takuya "Mura-Mi" Murakami

October 26, 2019
Tweet

Transcript

  1. FOLIO ͷϚΠΫϩαʔϏε in Action 2019/10/26 ΉΒΈΜ (ଜ্୓໵) Scalaؔ੢αϛοτ2019 Copyright ©

    2019 FOLIO, Ltd. All Rights Reserved. 1
  2. ଜ্୓໵ (@Mura-Mi or @mura_mi) ΞϓϦέʔγϣϯΤϯδχΞ in FOLIO ͜Ε·ͰͷΩϟϦΞ: * Simplex,

    Inc. (2012~2016) * CyberAgent AdTech Studio (2016~2018) * FOLIO (2018~ ) $ whoami 2
  3. ࠓ೔࿩͢͜ͱ 3 '0-*0ͷ͔ΜͨΜͳ঺հ ϛΫϩ ୯ମαʔϏε ͷ࿩ ٕज़ελοΫ ϨΠϠΞʔΩςΫνϟ 'JOBHMF6TBHF ϚΫϩ

    αʔϏεશମ ͷ࿩ Ͳ͏αʔϏεΛ෼͚Δ͔ ҆ఆӡ༻ͷίπ ࠓޙͷ՝୊
  4. FOLIO ͱ͸ʁ 4

  5. Scalaؔ੢Summit 2018 ʮScalaͰͭ͘Δূ݊ձࣾͱελʔτΞοϓʯΑΓ https://speakerdeck.com/mura_mi/securities-and-startup-with-scala?slide=19 8 ڈ೥ͷ Scalaؔ੢Summit Ͱ͸…

  6. ։ൃ։࢝ FOLIO ͷ͔ΜͨΜͳྺ࢙ 9      ૑ۀ

     ςʔϚ౤ࢿ ЌαʔϏε։࢝  ςʔϚ౤ࢿ -*/&ͱ࿈ܞ։࢝  ͓·͔ͤ౤ࢿ αʔϏε։࢝  ϫϯίΠϯ౤ࢿ αʔϏε։࢝  "84Ҡߦ։࢝  ਖ਼ࣜαʔϏε։࢝
  7. ϛΫϩͳ࿩ 10 Photo by Darius Cotoi on Unsplash

  8. Scala 11 ૑ۀ౰͔࣌Β4DBMB ϚΠΫϩαʔϏεͰ։ൃ Λελʔτ υϝΠϯ஌ࣝͷදݱྗ +7.֎෦ػؔγεςϜͱͷۚ༥ಛ༗ͷϓϩτ ίϧ΍4%,ʹରԠ͠΍͍͢

  9. Finagle, Finatra, TwitterServer 12 'JOBHMF5XJUUFSࣾ੡ͷ31$ϑϨʔϜϫʔΫ 5XJUUFS4FSWFS5XJUUFS಺Ͱͷ'JOBHMFαʔόʔΛηοτΞοϓ͢ Δͱ͖ͷςϯϓϨʔτΛ044Խͨ͠΋ͷ 'JOBUSB'JOBHMFͱ5XJUUFS4FSWFSΛར༻ͨ͠ΞϓϦέʔγϣϯϑ ϨʔϜϫʔΫɽϧʔςΟϯά%4-΍%*Λఏڙ ຖ݄ϦϦʔε͕͋Δ

    WFS͕ZZZZNNܗࣜ$BM7FSͱ͍͏
  10. Thrift 13 'BDFCPPL͕։ൃͨ͠31$ϑϨʔϜϫʔΫΠϯλʔϑΣΠ εఆٛݴޠ͓ΑͼόΠφϦ௨৴ϓϩτίϧ 'JOBUSB͕ओʹαϙʔτ͍ͯ͠Δͷ͕)551 3&45"1* ͓ Αͼ5ISJGU *%-ͷ͋Δ31$ϓϩτίϧͷඞཁੑܕ҆શɼ໌֬ͳ"1* ͷεΩʔϚ؅ཧ

    '0-*0্ཱͪ͛ظʹ͸H31$͕·ͩਖ਼ࣜϦϦʔεͷஈ֊Ͱ ͸ͳ͔ͬͨ
  11. ϨΠϠυΞʔΩςΫνϟ 14 Photo by Burhan Rexhepi on Unsplash

  12. * ؔ৺ͷ෼཭Λ࣮ݱ͢Δ্ͰɼϏδωε ϧʔϧͷ࣮૷ΛΠϯϑϥ (ϑϨʔϜϫʔ Ϋ΍ϛυϧ΢ΣΞ) ʹґଘͤ͞ͳ͍ɽ * ϑϨʔϜϫʔΫ΍ϛυϧ΢ΣΞͷબ୒ࢶ ͕࣮࣭1͔ͭ͠ແ͍૊৫Ͱ΋ɼυϝΠϯ ͷ࣮૷ΛϐϡΞʹอͭ͜ͱͰϏδωε

    ϧʔϧͷมߋͳͲʹ΋ॊೈʹରԠͰ͖ ΔΑ͏ʹͳΔɽ 15 ΫϦʔϯΞʔΩςΫνϟ
  13. FOLIO ͰͷయܕతͳϨΠϠΞʔΩςΫνϟ 16 EPNBJO BQQMJDBUJPO QSFTFOUBUJPO *OGSBTUSVDUVSF CBUDIPSTFSWFS  FOUSZQPJOU

    JEMJOUFSOBM JEMFYUFSOBM JEM '0-*0ͷϚΠΫϩαʔϏεʹ͓͚ΔϨΠ Ϡ෼͚Λنఆ͢Δࣾ಺ϑϨʔϜϫʔΫ͸ ಛʹଘࡏ͠ͳ͍ ֤αʔϏεͷ։ൃ։࢝࣌ظʹΑͬͯ͹Β ͖ͭ͸͋Δ͕ɼ࠷ۙͷαʔϏεͷߏ଄͸ ͓͓Αͦ͜ͷ༷ʹͳ͍ͬͯΔ ͜ͷίϯϙʔωϯτͦΕͧΕΛTCUͷα ϒϓϩδΣΫτͱͯ͠ఆٛ͠ɼґଘͷҧ ൓͸ίϯύΠϧ͕௨Βͳ͍Α͏ʹ͍ͯ͠ Δ
  14. EPNBJO BQQMJDBUJPO QSFTFOUBUJPO *OGSBTUSVDUVSF CBUDIPSTFSWFS  FOUSZQPJOU JEMJOUFSOBM JEMFYUFSOBM JEM

    domain ϨΠϠ 17 ͍ΘΏΔʮϏδωεͷؔ৺ࣄʯ ΤϯςΟςΟɺ஋ΦϒδΣΫτ ϦϙδτϦఆٛ USBJU  ࣮૷͕Ͳͷ༷ʹͳ͍ͬͯΔ͔͸ͳΔ΂͘Ӆ͢ 3%# 3FEJT ώʔϓΩϟογϡ ଞϚΠΫϩ αʔϏε EPNBJO
  15. PBR (Price and Book-Value Ratio, גՁ७ࢿ࢈ഒ཰) = גՁ / BPS

    18 value object: ܭࢉࣜΛܕʹམͱ͠ࠐΉ
  16. PBR (Price and Book-Value Ratio, גՁ७ࢿ࢈ഒ཰) = גՁ / BPS

    18 value object: ܭࢉࣜΛܕʹམͱ͠ࠐΉ ϓϦϛςΟϒ஋͸ϥοϓ͢Δ
  17. PBR (Price and Book-Value Ratio, גՁ७ࢿ࢈ഒ཰) = גՁ / BPS

    18 value object: ܭࢉࣜΛܕʹམͱ͠ࠐΉ ਺ࣜΛϝιουͱͯ͠ද͢
  18. ఆ͚ٛͩॻ͘ 19 ֎෦αʔϏεݺͼग़͠ͷఆٛ

  19. EPNBJO BQQMJDBUJPO QSFTFOUBUJPO *OGSBTUSVDUVSF CBUDIPSTFSWFS  FOUSZQPJOU JEMJOUFSOBM JEMFYUFSOBM JEM

    domain: Ͳ͜·Ͱִ཭͢Δʁ 20 Ӆ͍ͯ͠Δٕज़ৄࡉ 31$ΞϓϦέʔγϣϯ'8 'JOBHMF'JOBUSB  4DBMB%#Ϛοϐϯά 2VJMM  ϓϨθϯςʔγϣϯ 5ISJGU  Ӆ͍ͯ͠ͳ͍ٕज़ৄࡉ ඇಉظॲཧΛද͢ܕΫϥε 5XJUUFS'VUVSF  δΣωϦοΫϓϩάϥϛϯά TIBQFMFTT  ϚΠΫϩαʔϏεͷϝϦοτͱͯ͠ʮٕज़ҟ࣭ੑʯͱ͋Δ ͕ɼ࣮ࡍ͸ʜ EPNBJO
  20. EPNBJO BQQMJDBUJPO QSFTFOUBUJPO *OGSBTUSVDUVSF CBUDIPSTFSWFS  FOUSZQPJOU JEMJOUFSOBM JEMFYUFSOBM JEM

    application ϨΠϠ 21 ʮϢʔεέʔε૚ʯͱ΋ݺ͹ΕΔ෦෼ EPNBJOϨΠϠͷ஌ࣝΛ૊Έ߹Θͤͯ"1*΍όο ν࣮ߦ࣌ͷॲཧ಺༰Λهड़͢Δ BQQMJDBUJPO
  21. Ϣʔεέʔε͸ Request ͔Β Response ΁ͷؔ਺Ͱ͋Δ 22 use case trait

  22. Just pure Scala case class 23 DTO implementation

  23. ۩ମతͳܕύϥϝʔλʔΛ౰ͯ͸ΊΔͱʁ 24 use case implementation

  24. ࣮ࡍʹ΍͍ͬͯΔॲཧ͸ʁ 25 use case implementation

  25. ࣮ࡍʹ΍͍ͬͯΔॲཧ͸ʁ 25 use case implementation EPNBJOϨΠϠͷૢ࡞

  26. ࣮ࡍʹ΍͍ͬͯΔॲཧ͸ʁ 25 use case implementation Ϣʔεέʔεݻ༗ͷॲཧ Ϣʔεέʔεݻ༗ͷॲཧ

  27. EPNBJO BQQMJDBUJPO QSFTFOUBUJPO *OGSBTUSVDUVSF CBUDIPSTFSWFS  FOUSZQPJOU JEMJOUFSOBM JEMFYUFSOBM JEM

    application: සग़ॲཧͱυϝΠϯ΁ͷৠཹ 26 BQQMJDBUJPOϨΠϠͰසग़͢Δॲཧ͸ "QQMJDBUJPO4FSWJDFͱݺΜͰڞ௨Խͨ͠Γ "QQMJDBUJPOϨΠϠͱ%PNBJOϨΠϠͷڥ໨͸ᐆ ດ͕ͩɼBQQΛॻ͖ͳ͕ΒEPNBJOʹ͍࣋ͬͯ ͘ &WBOTຊʹग़ͯ͘Δʮৠཹʯ͸ॏཁͳ࡞ۀ BQQMJDBUJPO
  28. EPNBJO BQQMJDBUJPO QSFTFOUBUJPO *OGSBTUSVDUVSF CBUDIPSTFSWFS  FOUSZQPJOU JEMJOUFSOBM JEMFYUFSOBM JEM

    presentation ϨΠϠ 27 "1*Λ࣮૷͢Δٕज़ৄࡉ૚ '0-*0ͩͱຆͲ͕5ISJGUͳͷͰɺϢʔεέʔε %UPͱ5ISJGUͷڮ౉͠ͳͲ͕ओͳ໾ׂ QSFTFOUBUJPO
  29. ࣾ಺ͷ׳ྫ্ Adapter ͱಡΜͰ͍Δ͕ɼTranslator ΍ Converter ͷ΄͏͕͍ۙ (ൺֱత৽͍͠αʔϏεʹ͸ͦͷΑ͏ͳωʔϛϯά΋͋Δ) 28 RequestAdapter

  30. ࣾ಺ͷ׳ྫ্ Adapter ͱಡΜͰ͍Δ͕ɼTranslator ΍ Converter ͷ΄͏͕͍ۙ (ൺֱత৽͍͠αʔϏεʹ͸ͦͷΑ͏ͳωʔϛϯά΋͋Δ) 28 RequestAdapter 5ISJGUͷϦΫΤετҾ਺

  31. ࣾ಺ͷ׳ྫ্ Adapter ͱಡΜͰ͍Δ͕ɼTranslator ΍ Converter ͷ΄͏͕͍ۙ (ൺֱత৽͍͠αʔϏεʹ͸ͦͷΑ͏ͳωʔϛϯά΋͋Δ) 28 RequestAdapter Ϣʔεέʔε૚ͷϦΫΤετ%50

  32. ͻͨ͢Β Thrift ͷੜͷ஋Λ VO ܕʹ͸Ί͜ΜͰ͍͘ 29 RequestAdapter implementation

  33. RequestThrift → RequestDto → UseCase → ResponseDto → ResponseThrift 30

    Gateway
  34. RequestThrift → RequestDto → UseCase → ResponseDto → ResponseThrift 31

    Gateway
  35. Gateway ʹ·ͱΊΔͷ͸ DI ʹ͓·͔ͤͯ͠… 32 components

  36. Finatra ͷ controller ʹ৯ΘͤΔ 33 controller

  37. EPNBJO BQQMJDBUJPO QSFTFOUBUJPO *OGSBTUSVDUVSF CBUDIPSTFSWFS  FOUSZQPJOU JEMJOUFSOBM JEMFYUFSOBM JEM

    presentation ϨΠϠ 34 QSFTFOUBUJPO
  38. EPNBJO BQQMJDBUJPO QSFTFOUBUJPO *OGSBTUSVDUVSF CBUDIPSTFSWFS  FOUSZQPJOU JEMJOUFSOBM JEMFYUFSOBM JEM

    idl 35 JEM΄ͱΜͲ5ISJGU*%-ͷΈͰߏ੒͞Εͨαϒϓϩ δΣΫτ 5ISJGUͷ*%-ͷΈΛೖΕͨKBSϑΝΠϧΛެ։ *%-ͷίϯύΠϧ͸ެ։ଆͰ͸ͳ͘ར༻͢Δଆͷ࢓ࣄ  ࣗαʔϏεͷ5ISJGU*%-ΛίϯύΠϧ JEM JEMJOUFSOBM
  39. EPNBJO BQQMJDBUJPO QSFTFOUBUJPO *OGSBTUSVDUVSF CBUDIPSTFSWFS  FOUSZQPJOU JEMJOUFSOBM JEMFYUFSOBM JEM

    idl-external 36 ґଘ͢ΔϚΠΫϩαʔϏεͷίϯύΠϧΛߦ͏ JEMFYUFSOBM
  40. EPNBJO BQQMJDBUJPO QSFTFOUBUJPO *OGSBTUSVDUVSF CBUDIPSTFSWFS  FOUSZQPJOU JEMJOUFSOBM JEMFYUFSOBM JEM

    infrastructure 37 EPNBJOϨΠϠͰఆ͚ٛͩॻ͍ͨϨϙδτϦFUDΛ %#ΫΤϦɺ3FEJTίʔϧɺଞϚΠΫϩαʔϏε ίʔϧͰ࣮૷͢Δ JOGSBTUSVDUVSF
  41. Finagle Client Λୟ͍ͯ Domain Model ʹ٧Ί௚͢ 38 external service invocation

    implementation
  42. Finagle Client Λୟ͍ͯ Domain Model ʹ٧Ί௚͢ 38 external service invocation

    implementation 5ISJGU*%-͔Βੜ੒͞Εͨ'JOBHMF$MJFOU
  43. Finagle Client Λୟ͍ͯ Domain Model ʹ٧Ί௚͢ 38 external service invocation

    implementation ଞαʔϏεͷฦΓ஋ΛυϝΠϯʹॻ͖ى͜͢
  44. EPNBJO BQQMJDBUJPO QSFTFOUBUJPO *OGSBTUSVDUVSF CBUDIPSTFSWFS  FOUSZQPJOU JEMJOUFSOBM JEMFYUFSOBM JEM

    entrypoint 39 ࠷ऴతͳ࣮ߦΫϥε΍DPOpHVSBUJPOΛஔ͘ CBUDIPSTFSWFS  FOUSZQPJOU
  45. ੲ࿩: ࠷ॳ͔Β͜ͷߏ੒Ͱ͸ͳ͔ͬͨ 40 TFSWFS CBUDI QSFTFOUBUJPO DPNNPO %#QFSTJTUFODF JEM EPNBJO

    BQQMJDBUJPO CBUDITQFDJpD BQQMJDBUJPO ҙਤ͍ͯ͠Δ͍ͳ͍ʹؔ ΘΒͣɼυϝΠϯϩδοΫ هड़ͱJEM͕ີ઀ʹͭͳ ͕͍ͬͯͨɽ 3FQPTJUPSZ͕5ISJGUߏ ଄ମΛฦ͢ ଞαʔϏεͷ5ISJGUߏ ଄ମΛͦͷ··࢖͏ TFSWFSTQFDJpD BQQMJDBUJPO TFSWFSTQFDJpD JOGSB CBUDITQFDJpD JOGSB
  46. Thrift ͷੜ੒෺ΛϏδωεϧʔϧهड़ʹ༻͍ͳ͍ 41 υϝΠϯϨΠϠΛ*%-͔Βੜ੒ͨ͠ఆٛʹґଘͤ͞ͳ͍ͷ͕ԿΑ Γେࣄ ϝϯςφϯε࣌ͷϥΠϑαΠΫϧ͕ҧ͏ "1*͸֎෦αʔϏεͱͷܖ໿ɽޙํޓ׵ੑΛۃྗอͭΑ͏ʹ ӡ༻͢Δ ࣗαʔϏε಺ͷσʔλϞσϧ͸αʔϏεͷਐḿʹैͬͯॊೈ ʹݟ௚ͨ͠ΓɼϦϑΝΫλϦϯά͍ͨ͠

    σʔλߏ଄ΛυϥεςΟοΫʹมߋ͢Δ͜ͱ͸ଟ͘ͳ͍͕ɼ ໊લͷݟ௚͠͸͔ͳΓଟ͍ҹ৅ ͜Ε·Ͱݟ͑ͳ͔ͬͨڥք Λݟग़ͨ͠Γ͢Δ  ஋ΦϒδΣΫτΛ࢖͑ͳ͍ɻৼΔ෣͍Λ஋ΦϒδΣΫτ౳ͷυϝ ΠϯΦϒδΣΫτʹدͤΒΕͳ͍
  47. Finagle ΛͲ͏࢖͏͔ 42

  48. Finatra Λར༻ͨ͠αʔϏεͷςϯϓϨʔτΛࣾ಺ϥΠϒϥϦͱ͢Δ 43 ࣾ಺ϥΠϒϥϦ util-finagle-all

  49. ఆظతʹΞοϓσʔτ͢Δ (ຌͦ൒೥ʹҰ౓ʁ) 44 util/util-finagle-all

  50. TwitterServer admin ʹϖʔδΛ௥Ճ͢Δ 45 'JOBHMF4FSWJDFΛ5XJUUFS4FSWFSΛఴ͑ͯىಈ͢Δͱɺ )551BENJO6*͕ىಈͯ͠ɺ֤छϝτϦΫε΍UPHHMF ޙ ड़ ͷঢ়ଶ͕֬ೝͰ͖Δɻ ͜ͷ5XJUUFS4FSWFSͷBENJOϖʔδʹ͸ಠࣗͷϖʔδΛ

    ௥Ճ͢Δ͜ͱ͕ग़དྷΔɻ SFBEܥͷ"1*ͷத਎ͷ֬ೝ΍ɺରސ٬ϝοηʔδૹ৴ͷϦτϥΠ ࣮ࢪ༻ͷӡ༻ϢʔςΟϦςΟΛઃ͚Δͷʹ࢖͍ͬͯΔ ຊ൪؀ڥ͸4".-͔ΒϦμΠϨΫτ͢ΔΑ͏ʹͯ͠ɺಛఆͷϩʔϧ ͕Ξλον͞Ε͍ͯͳ͍ͱ৮Εͳ͍Α͏ʹͳ͍ͬͯΔ
  51. TwitterServer HTTP Admin 46

  52. ಠࣗʹ௥Ճͨ͠ϖʔδ͔Β API ฦΓ஋ΛݟΔ 47

  53. ಠࣗʹ௥Ճͨ͠ϖʔδ͔Β API ฦΓ஋ΛݟΔ 47 ௥Ճͨ͠ϝχϡʔ

  54. ಠࣗʹ௥Ճͨ͠ϖʔδ͔Β API ฦΓ஋ΛݟΔ 47 "1*ͷத਎Λ֬ೝͰ͖ΔΑ͏ʹ

  55. ϚΫϩͳ࿩ 48 Photo by timJ on Unsplash

  56. ϚΠΫϩαʔϏεͷ ڥքΛݟग़͢ࢹ఺ 49 Photo by Adli Wahid on Unsplash

  57. ϚΠΫϩαʔϏεΛͲ͏੾Δ͔ 50 ʮϚΠΫϩαʔϏεͷڥք͸υϝΠϯڥքͰ͋ Δʯͱ͋Δ υϝΠϯڥքΛݟۃΊΔͷ͸γεςϜΛ࡞Δਓ ͷ࢓ࣄͳͷͰɼࣄۀ΍αʔϏεͷ਺͚ͩ͋Δ '0-*0ͰͲ͏ଊ͍͑ͯΔ͔Λ͓఻͑͢Δ͜ͱͰ ࢀߟʹͳΕ͹

  58. ૊৫ͱͷҰக:ʮϓϩμΫτʯͱʮۀ຿ج൫ʯ 51 '0-*0Ͱ͸ɼ ਓͷސ٬͕ෳ਺ͷۚ༥঎඼Λӡ༻͢Δ ͦΕͧΕͷۚ༥঎඼͸ಠࣗͷӡ༻ϩδοΫΛ࣋ͭ ਓͷސ٬ͷޱ࠲։ઃ৹ࠪ͸౓͚ͩߦ͏ɽͭ·Γۚ ༥঎඼Λ·͍ͨͯސ٬JE͸ͭ ސ٬ͷอ༗͢Δۚ༥঎඼͝ͱʹ঎඼ޱ࠲͕ଘࡏ͢Δ΂ ͖͕ͩɼ࠷ऴతͳצఆॲཧ͸ू໿͢Δ΂͖ ͜ΕΛҙࣝͯ͠ɼۚ༥঎඼Ͱग़དྷ্͕ΔͭͷίϯςΩε

    τΛʮϓϩμΫτʯͱݺͼɼϓϩμΫτΛ·͍ͨͰσʔλ Λѻ͏ྖҬΛʮۀ຿ج൫ʯͱݺͿΑ͏ʹ͍ͯ͠Δ
  59. ʮϓϩμΫτʯͱʮۀ຿ج൫ʯ 52 ςʔϚ౤ࢿ ϫϯίΠϯ౤ࢿ ސ٬ج൫ ސ٬৘ใ؅ཧɼޱ࠲։ઃɼ$4ରԠ ূ݊ج൫ צఆ؅ཧɼೖग़ۚɼ஫จ؅ཧFUD ͓·͔ͤ౤ࢿ ۀ຿ج൫

    ϓϩμΫτ
  60. ࣗࣾͱଞࣾ: ϑΝαʔυͰ͋Γ෗ഊ๷ࢭ૚ 53 ۚ༥αʔϏεΛࢧ͑ΔγεςϜ͸ɼࣗࣾҎ֎ͷఏڙ͢ΔγεςϜʹ ґΔϘϦϡʔϜ͕େ͖͍ औҾॴϒϩʔΧʔͱͷ஫จ఻ୡ גՁ഑৴ɼίϯηϯαε༧૝σʔλ഑৴ σʔλϕϯμʔ  צఆܥγεςϜ

    ֎෦"41Λར༻  ۜߦৼࠐड෇γεςϜ ఏܞઌαʔϏεͱͷ࿈ܞ FUDʜ σʔλΛड͚౉͢ϓϩτίϧ͕ҧͬͨΓɼϕϯμʔಠࣗͷޠኮ֓ ೦Λϥοϓ͢ΔͨΊʹϚΠΫϩαʔϏεΛݐͯΔɽ'0-*0಺෦͔ Β͢Δͱ෗ഊ๷ࢭ૚ɼ֎෦͔ΒݟΔͱϑΝαʔυͱͯ͠ػೳ͢Δɽ
  61. ྫ: ֎෦γεςϜͱϚΠΫϩαʔϏε 54 σʔλϕϯμʔ 40"1  9.-
 $47WJB4'51  ϕϯμʔಠࣗͷ

    σʔϞϯόΠφϦ ͷαϒεΫϥΠϒ 3&45"1*$BMM '0-*0 ϑϩϯτ ސ٬ࢿ࢈ ࢀরܥ ঎඼؅ཧ -*/&޲͚ 'BDBEF σʔλ഑৴ ϕϯμʔ σʔλऔΓ ࠐΈ
  62. ୭͕࢖͏ʁσʔλͷྲྀΕ͸ʁ 55 ʮϢʔβʔʯ͸จ຺ʹґͬͯͭͷҙ ຯΛ࣋ͪ͑Δ ސ٬ ࣾ಺ΦϖϨʔλʔίϯςϯπ νʔϜ ϑϩϯτΞϓϦέʔγϣϯ͕ҧ͏ 4DBMBαʔϏε͸ಉҰϨϙδτϦ͔ Βෳ਺αʔόʔΛݐͯͨΓ͢Δ

    BENJOͱUP$αʔϏεͰεέʔ ϧΛม͑ͨΓ͢Δ BENJOࣾ಺ΞϓϦ޲͚"1* TFSWJDFUP$αΠτ޲͚"1*
  63. αʔϏεΛࢭΊͣʹӡ༻͠ଓ͚Δ ͨΊͷ޻෉ʁ 56 Photo by Eric Bruton on Unsplash

  64. ෼ࢄτϨʔγϯάͱ Datadog 57 ϑϩϯτΤϯυ͔ΒͷϦΫΤετ͸ෳ਺ͷϚΠΫϩαʔϏεͰॲ ཧ͞ΕΔ ֤αʔϏε͸ෳ਺ΠϯελϯεͰ࣮ߦ͞ΕΔ ֤αʔϏεΠϯελϯεͷు͖ग़͢ϩάʹJE USBDF*E Λ෇͠ɼ ϦΫΤετશମͷॲཧͷྲྀΕΛ௥੻Ͱ͖ΔΑ͏ʹ͢Δ

    ͢΂ͯͷϩά͸%BUBEPHʹू໿͠ɼ&3303ϩάݕग़࣌͸ 4MBDLʹ
 USBDF*E෇͖ͷ63-Λྲྀ͢Α͏ʹ͍ͯ͠Δ
  65. traceId ͱ datadog 58

  66. traceId ͱ datadog 59

  67. ػೳτάϧ (Feature Toggle) 60 ػೳ͕༗ޮͰ͋Δ͔Ͳ͏͔Λࣔ͢ਅِ஋Λαʔόʔͷঢ়ଶ ͱͯ͠อ࣋͢Δɽ ৽ػೳ΍طଘػೳͷվળ͞ΕͨίʔυΛಈ࡞؀ڥʹσϓϩΠ ͭͭ͠ɼͦͷίʔυΛಈ࡞ͤ͞Δ͔Ͳ͏͔ΛUPHHMF͢Δɽ ࣮ߦ͞Ε͍ͯΔϓϩηεͷUPHHMFΛ੾Γସ͑ΒΕΔɽ දࣔσʔλͷσʔλιʔε੾Γସ͑΍ύϑΥʔϚϯεվળͳ

    ͲɼUPHHMFແͩ͠ͱσϓϩΠΛ൐Θͳ͍ͱલޙൺֱΛߦ͑ ͳ͍มߋͷಋೖɼݕূͳͲʹར༻͢Δɽ 'JOBHMF͕GFBUVSFUPHHMFػೳΛ༗͍ͯ͠ΔͷͰͦΕΛ ׆༻͍ͯ͠Δɽ
  68. ػೳτάϧ (Feature Toggle) 61 Toggle ͷฦΓ஋ʹΑͬͯڍಈ͢Δ࣮૷Λ୅͑Δ

  69. ػೳτάϧ (Feature Toggle) 61 Toggle ͷฦΓ஋ʹΑͬͯڍಈ͢Δ࣮૷Λ୅͑Δ ಉ͡USBJUΛ࣮૷ͨ͠ ෳ਺ͷ࣮૷

  70. ػೳτάϧ (Feature Toggle) 61 Toggle ͷฦΓ஋ʹΑͬͯڍಈ͢Δ࣮૷Λ୅͑Δ 5PHHMFJTA*OU#PPMFBOA

  71. ػೳτάϧ (Feature Toggle) 61 Toggle ͷฦΓ஋ʹΑͬͯڍಈ͢Δ࣮૷Λ୅͑Δ ࣮ࡍͷUPHHMFͷฦΓ஋ʹґͬͯ

  72. ػೳτάϧ (Feature Toggle) 61 Toggle ͷฦΓ஋ʹΑͬͯڍಈ͢Δ࣮૷Λ୅͑Δ ͲͪΒͷ࣮૷Λಈ͔͔ܾ͢ΊΔ

  73. ػೳτάϧ (Feature Toggle) 62 ઃఆϑΝΠϧ: ੾Γସׂ͑߹ΛࢦఆͰ͖Δ

  74. ݁߹ϦεΫ ΛݮΒ͢޻෉ 63 "1*ͷޓ׵ੑطଘͷ"1*ͷޙํޓ׵ੑ͸ͳΔ΂่͘͞ͳ͍ ઃܭͷ޻෉ #SFBLJOH$IBOHFΑΓ͸৽"1* Ϗοάόϯ݁߹ϦϦʔεΛ͠ͳ͍େ͖ͳ৽ػೳ৽ϓϩμΫ τϦϦʔεͷࡍ΋ɼ࢖ΘΕͳ͍"1*͔ΒૣΊʹϦϦʔεΛ ͠ɼຊ൪ͱ։ൃ؀ڥͰͷϞδϡʔϧͷࠩҟΛখ͘͞อͭΑ͏ ʹ͢Δ

    ЋϦϦʔεϑϩϯτΤϯυ؀ڥΛ௨ৗͷ΋ͷʹՃ͑ͯࣾ಺ ݶఆͰΞΫηε؀ڥΛߏங͠ɼ৽ػೳΛࣾ಺ϝϯόʔ͕ઌߦ ͯ͠ӡ༻ͯ͠໰୊఺Λݟ͚ͭग़͢
  75. ࠓޙͷ՝୊ 64 Photo by Hans-Peter Gauster on Unsplash

  76. େҬత CQRS తͳϦΞʔΩςΫνϟϦϯά 65 τϥσΟγϣφϧͳূ݊ձࣾʹ͸ʮϑϩϯτϛυϧόοΫΦ ϑΟεʯͱ͍͏৬຿ػೳͷ෼ྨ͕͋Δɽ ϑϩϯτऩӹΛ্͛Δ෦෼ɽ
 ωοτূ݊ͩͱސ٬͕஫จΛग़͠ɼऔҾΛߦ͏෦෼ ϛυϧϑϩϯτͷ׆ಈͷ݁ՌͷϞχλϦϯά όοΫϑϩϯτͷ׆ಈͷ݁Ռͷࣄޙॲཧ

    ࣄ຿ɼצఆFUDʜ  ϑϩϯτϛυϧόοΫ͝ͱʹγεςϜʹٻΊΒΕΔੑ֨͸ҟ ͳΔ ϑϩϯτऔҾओମͷίϚϯυΛड͚෇͚ͯॲཧΛ͢Δݎ࿚͔ ͭߴεϧʔϓοτͰ͋Δ͜ͱɽऩӹྗɽ ϛυϧ෯޿͍σʔλͷҰ؏ੑͷ͋Δࢀর όοΫεέʔϥϏϦςΟ
  77. େҬత CQRS తͳϦΞʔΩςΫνϟϦϯά 66 '0-*0ͷαʔόʔαΠυγεςϜ͸ʮϑϩϯτϛυϧ όοΫΦϑΟεʯͷ૚෼͚Λҙࣝ͠ͳ͍··։ൃͨ݁͠ Ռɼ͢΂ͯͷϨΠϠʹ؏௨ͨ͠ϚΠΫϩαʔϏε͕ଘࡏͯ͠ ͍Δ ϑϩϯτγεςϜ͸$PNNBOE ϛυϧγεςϜ͸

    2VFSZɼόοΫγεςϜ͸ଞͱ͸ҟͳΔ೔࣍όονॲཧɼͱ ͍͏૚͝ͱͷੑ֨ʹԠͨ͡଄Γͷ࠷దԽͱϦΞʔΩςΫ νϟϦϯάΛਐΊ͍ͨ
  78. Ұ෦ॖୀӡ༻ 67 ϑϩϯτΤϯυͰଟ਺ͷϚΠΫϩαʔϏεͷ੒ޭϨεϙϯεΛ͢ ΂ͯू໿Ͱ͖ͳ͍ͱϫʔΫ͠ͳ͍έʔε͕͋Δɽ Ұ෦ͷαʔϏε͕μ΢ϯ͍ͯ͠Δͱ͖ɼͦͷαʔϏεʹ֘౰͢Δ ػೳͷΈϑϩϯτͰEJTBCMFʹͯ͠΋ଞͷػೳ͸໰୊ͳ͘ճΔ࢓ ૊Έ͕΄͍͠ɽ͜Ε͕Ͱ͖ΔͱαʔΩοτɾϒϨΠΫ౳΋ࣗ৴Λ ࣋ͬͯऔΓ૊ΊΔɽ લड़ͨ͠ϦΞʔΩςΫνϟϦϯά΋ؚΊͨαʔϏεؒґଘͷ੔ཧ ΍ɼϑϩϯτΤϯυͷ࢓૊Έվम΋ؚΊͯऔΓ૊Ήඞཁ͕͋Δɽ

  79. ϨΠϠΞʔΩςΫνϟͷະདྷ͸…?? 68 αʔϏε୯ମͷ࣮૷ΛݟΔͱ Ͳ͏ͯ͠΋ϘΠϥʔϓϨʔτ ͕ଟ͍ ੜ࢈ੑΛ্͛ΔͨΊʹͲ͏͠ Α͏ʜ  ͢΂ͯͷαʔϏε͕͜ͷߏ੒ Λ౿ऻ͢Δ΂͖͔΋ݕ౼ͷ༨

    ஍͋Γʜ͕ͩɼࢦ਑͸ະͩແ ͍ EPNBJO BQQMJDBUJPO QSFTFOUBUJPO *OGSBTUSVDUVSF FOUSZQPJOU JEMJOUFSOBM JEMFYUFSOBM JEM
  80. ·ͱΊ 69 Photo by Kelly Sikkema on Unsplash

  81. ·ͱΊ: ౰ͨΓલͷ͜ͱͰ͕͢ 70 ద੾ͳϨΠϠʔυΞʔΩςΫνϟΛ༻͍ͯϏδωεͷม Խʹڧ͍γεςϜΛ࡞Δ ϚΠΫϩαʔϏεͷڥքΛਖ਼͘͠ݟग़ͨ͢Ίʹɼࣗ෼ͨ ͕࣮ͪ૷͢ΔϏδωεྖҬͱ͔ͬ͠Γ޲͖߹͏ ϚΠΫϩαʔϏεͷ҆ఆӡ༻ͱܧଓతͳਐԽͷͨΊͷٕ ज़൑அΛ͢Δ

  82. THANK YOU