LINEで新規に開発しているライブコマースサービスにおいて、どういうコンポーネントを作っているのか、どう作っていくのか、どんな技術を利用して作っているのかを説明しています。
Speaker:岩谷 明 / @hoshi_gaki https://twitter.com/hoshi_gaki
※以下のイベントの登壇資料です。 https://fortee.jp/jjug-ccc-2021-fall/proposal/622ddb46-f357-424c-a99c-1f263b50166c
-*/&で,PUMJOを活用してサービスを作っていく話-*/&株式会社 ؠ୩໌
View Slide
ؠ୩ ໌-*/&גࣜձࣾ ։ൃ,νʔϜೖࣾ-*/& -*7&ͷ"OESPJEΞϓϦ-*/&ϊϕϧͷJ04ΞϓϦͳͲͷΫϥΠΞϯτΤϯδχΞΛܦͯɺ͔ΒϥΠϒίϚʔεʮ-*7:ʯͷαʔόʔαΠυΛ͍ͬͯ·͢*XBZB "LJSB
• -*/&Ͱࠓճ৽͘͠։ൃͨ͠ϥΠϒίϚʔεαʔϏεͷ͝հ• ։ൃʹ͋ͨͬͯͷཁ݅ͱٕज़બఆ• ,PUMJO$PSPVUJOFͷઆ໌• ,PUMJO$PSPVUJOF 4QSJOH H31$ 3%#$ 3FEJTʣ࣮ફࠓ͓͢͠Δ༰
-*/&ͷϥΠϒίϚʔεαʔϏεʹςετϩʔϯν৽αʔϏε -*7: ެ։ʂ• -*/&্Ͱࢹௌɾߪೖ·Ͱ݁• ϥΠϒ৴Λݟͳ͕ΒλοϓͰ͕ങ͑Δ• ϦΞϧλΠϜͳΠϯλϥΫγϣϯ
ϥΠϒίϚʔεαʔϏεʁ• ϥΠϒ৴Λ͠ͳ͕ΒΛհɾߪೖͰ͖ΔαʔϏεηϥʔ ϢʔβʔϦΞϧλΠϜͰߪങঢ়گ͕Θ͔Δࢹௌ͠ͳ͕ΒͦͷͰങ͑Δ-*7&Ͱհνϟοτͷ࣭ճίϛϡχέʔγϣϯؾʹͳΔϙΠϯτΛ࣭Ͱ͖Δಈతͳങ͍ͷָ͠͞εϚϗͰखܰʹ৴-*7&ࢹௌߪೖ
ߪೖϑΟʔυόοΫ νϟοτ จ ৄࡉը໘-*/&্Ͱ͑ΔϥΠϒίϚʔεαʔϏε-*/&'SPOUFOE'SBNFXPSL-*''ͷ׆༻• -*''8FCΞϓϦέʔγϣϯΛ-*/&্Ͱಈ͔ͤΔϑϨʔϜϫʔΫ• ͲͳͨͰ࡞Ε·͢ IUUQTMJGGTUBSUFSOFUMJGZBQQ
ηϥʔ͚$.4• ৴ཧ• ཧ• จཧ• ൃૹॲཧ
ηϥʔ͚ΞϓϦ 'MVUUFS৴ ొɾฤू ϓϨϏϡʔ
• ϥΠϒ• ίϚʔε-*7:αʔϏεͷཁ݅
• ಉ࣌ؒ͡ʹେྔͷϢʔβʔ͕ΞΫηε͢Δ• ৴ͷཧ• ϦΞϧλΠϜੑʢ৴தʹى͜ΔΠϕϯτͷୡʣ• ΠϯλϥΫςΟϒੑʢνϟοτߪೖʹΑΔϢʔβʔ͔ΒͷΞΫγϣϯʣϥΠϒͷཁ݅
• ͷཧ• จͷཧ• ܾࡁ• ൃૹίϚʔεͷཁ݅
• 8FCαΠτ -*''• ηϥʔ͚$.4• ηϥʔ͚ΞϓϦ• ࣾ$.4• -*/&Ͱͷ௨ϝοηʔδͷૹ৴ͳͲϢʔβʔ͚ʹ࡞Δͷ
اըͱ૬ஊجຊతͳཁ݅ͷܾఆϥΠϒͷཁ݅ίϚʔεͷཁ݅࡞Δͷͨͪ3FRVJSFNFOU3FRVJSFNFOU3FRVJSFNFOU
• εέʔϥϏϦςΟ• ύϑΥʔϚϯε• ϩδοΫ͕େ͖͘ҟͳΔίϯϙʔωϯτΛಉ࣌ʹ࡞Δඞཁ• ෳίϯϙʔωϯτؒͰ௨৴• ڞ௨͢ΔػೳΛ࣋ͭ8FCͱ"QQ͕ඞཁ3FRVJSFNFOUT
• গਫ਼Ӷ• νʔϜΞϓϦͱαʔόʔ• ҰํͰઐνʔϜ͕ଘࡏ• ϑϩϯτΤϯυ• -*/&1BZܾࡁ• 35.1ɾ)-4৴• ਫ਼ࢉ FUDͱ͜ΖͰ-*/&ͷ։ൃελΠϧͱࠓճͷϓϩδΣΫτͷڥ• ͪΐ͏Ͳ͍͍λΠϛϯά• աڈͷܦݧ͔Βͷվળ• ৽͍ٕ͠ज़ͷΩϟονΞοϓ• ࣮ݧతʹࢼͤΔڥ
• ϚΠΫϩαʔϏεϩδοΫͷ͍ͩͿҟͳΔཁ݅ʢϥΠϒͱίϚʔεͳͲʣ͕͋ΔͷͰ͍͢͠8FCαΠτ$.4ͳͲͷෳͷίϯϙʔωϯτ͕͋ΔগਓͰ։ൃ͢Δ͕ϝϦοτ͕͋Δͱஅ• ,VCFSOFUFTϚΠΫϩαʔϏεͷͨΊεέʔϥϏϦςΟΛ୲อࣾʹ.BOBHFEͳ,VCFSOFUFTΫϥελΛӡ༻͢ΔνʔϜ͕͋Δબఆٕͨ͠ज़
• ,PUMJOࣾͰ+BWB͕ओྲྀͰ࠷ۙͰ,PUMJOଟ͍ޙड़͢Δ$PSPVUJOFʹΑΔඇಉظॲཧͱͷੑ• H31$ෳίϯϙʔωϯτؒͷ௨৴ෳͷ։ൃνʔϜΛ·͍ͨͩεΩʔϚཧͷͨΊ4FSWFSTUSFBNJOH31$ΛͬͯΫϥΠΞϯτͷը໘Λߋ৽• .Z42- 3FEJT ,BGLB ͜ͷล͍ͭ௨Γબఆٕͨ͠ज़
ΞʔΩςΫνϟ
• ύϑΥʔϚϯεΛग़ͨ͢ΊʹͰ͖Δ͚ͩඇಉظʹ͍ͨ͠• ϚΠΫϩαʔϏεͰͨ͘͞Μͷ31$Λߦ͏• ࣗαʔϏεͷ௨৴ɺ-*/&ͷଞαʔϏεͱͷ௨৴ଟ͍• ಉظతʹ࣮ͯ͠͠·͏ͱɺ௨৴ʹ͔͔ΔϨΠςϯγͷؒ*0ͪͰແବ͕ଟ͍• Ͱ͖Δ͚ͩʜϦΫΤετ͔ΒϨεϙϯε·Ͱ• ࠓ·Ͱඇಉظॲཧͱ͍͑• 'VUVSF 1SPNJTF3Y+BWB 3FBDUPS 4QSJOH8FC'MVY• $BMMCBDL)FMM)PU$PMEͷѻ͍ͳͲετϦʔϜͷ͠͞ϚΠΫϩαʔϏεʹ͓͚ΔύϑΥʔϚϯε
• $PSPVUJOFʜதஅՄೳ TVTQFOEBCMFͳॲཧ• 5ISFBEʹࣅ͍ͯΔ͕ΑΓܰྔͰεΠονͷίετͳ͍• ಛఆͷ5ISFBEʹ݁ͼ͔ͭͳ͍org.jetbrains.kotlinx:kotlinx-coroutines-coreͦ͜Ͱ,PUMJO$PSPVUJOF LPUMJOYDPSPVUJOF˞ग़యɿIUUQTLPUMJOMBOHPSHEPDTDPSPVUJOFTCBTJDTIUNM
ྫ˞ग़యɿIUUQTLPUMJOMBOHPSHEPDTDPSPVUJOFTCBTJDTIUNM• MBVODIDPSPVUJOFCVJMEFSಠཱͯ͠ฒߦʹಈ͘$PSPVUJOFΛ࡞Δ• EFMBZTVTQFOEJOHGVODUJPOࢦఆ͞Εͨ࣌ؒTVTQFOE͢Δɻ$PSPVUJOFΛTVTQFOEͯͦ͠ͷεϨουϒϩοΫ͠ͳ͍ɻଞͷDPSPVUJOFίʔυಈ͘• SVO#MPDLJOHDPSPVUJOFCVJMEFSී௨ͷಉظతͳίʔυ͔ΒDPSPVUJOFΛىಈ͢Δɻྃ͢Δ·Ͱىಈ͞ΕͨεϨουΛϒϩοΫ͢Δ
4VTQFOEJOHGVODUJPO˞ग़యɿIUUQTLPUMJOMBOHPSHEPDTDPSPVUJOFTCBTJDTIUNM• TVTQFOE म০ࢠΛGVODUJPOʹ͚ͭΔͱTVTQFOEJOHGVODUJPOʹͳΔ• 4VTQFOEJOHGVODUJPOଞͷTVTQFOEJOHGVODUJPOΛݺͼग़ͤΔ• 4VTQFOEJOHGVODUJPO$PSPVUJOF4DPQF͔ଞͷTVTQFOEJOHGVODUJPO͔Β͔͠ݺͼग़ͤͳ͍• ͜ΕΛ܁Γฦͯ͠΄ͱΜͲTVTQFOEJOHGVODUJPOΛॻ͘͜ͱʹͳΔ
4USVDUVSFE$PODVSSFODZ˞ग़యɿIUUQTLPUMJOMBOHPSHEPDTDPSPVUJOFTCBTJDTIUNM• $PSPVUJOFDPSPVUJOFʢݫີʹDPSPVUJOF4DPQFʣͷத͔Β͔͠ىಈͰ͖ͳ͍• ͖ͬ͞ͷྫͰSVO#MPDLJOH͕DPSPVUJOF4DPQF• ֎ଆͷDPSPVUJOFଆͷDPSPVUJOF͕શ෦ྃ͠ͳ͍ͱྃ͠ͳ͍• DPSPVUJOF4DPQF \ʜ^Λ͏ͱࣗͰDPSPVUJOF4DPQF͕࡞ΕΔ• SVO#MPDLJOHͱҧͬͯεϨουΛϒϩοΫ͠ͳ͍ͷͰTVTQFOEJOHGVODUJPOʹͳ͍ͬͯΔ• ࠨͷྫͰDPSPVUJOF4DPQFͷͭͷMBVODI\ʜ ^ฒྻʹಈ࡞͢Δ• EP8PSME྆ํ͕ྃ͠ͳ͍ͱྃ͠ͳ͍
• 4QSJOH'SBNFXPSLͰ$PSPVUJOFͷαϙʔτ͕ೖΔ˞• %FGGFSFEͱ'MPXʢ͍ͣΕ$PSPVUJOFͷ࣮ߦ݁ՌΛද͢ΫϥεʣΛ!$POUSPMMFSͷ4QSJOH8FC'MVYͷΓʹ͑ΔΑ͏ʹͳͬͨΓɺ4VTQFOEJOHGVODUJPOͱͯ͠ॻ͚ΔΑ͏ʹͳͬͨΓ• GVOIBOEMFS.POP5ˠ TVTQFOEGVO5• 4QSJOHͰ3FBDUPSΛར༻ͯ͠ඇಉظɾϦΞΫςΟϒϓϩάϥϛϯάΛ࣮ݱ͍ͯ͠Δ• 3FBDUPS ⁶ DPSPVUJOFͷมΛΑ͘Δ͜ͱʹͳΔ,PUMJO$PSPVUJOFͱ4QSJOH˞ग़యɿIUUQTEPDTTQSJOHJPTQSJOHGSBNFXPSLEPDT.TQSJOHGSBNFXPSLSFGFSFODFMBOHVBHFTIUNMDPSPVUJOFTorg.jetbrains.kotlinx:kotlinx-coroutines-reactiveorg.jetbrains.kotlinx:kotlinx-coroutines-reactor
• HSQDKBWB JPHJUIVCMPHOFUHSQDTQSJOHCPPUTUBSUFS˞• HSQDLPUMJOʹҠߦ͢Δܭըத• ੜ͞ΕͨGVODUJPOͰDPSPVUJOFΛ͑ΔΑ͏ʹ$PSPVUJOF-BVODIFSͱ͍͏ΫϥεΛ࡞• ʢ༨ஊʣ31$ͷ໋໊VCFSͷ1SPUPCVG 4UZMF(VJEF7 ˞˞ʹ͕͍ͨͬͯ͠Δ,PUMJO$PSPVUJOFͱH31$˞ग़య IUUQTHJUIVCDPN-PH/FUHSQDTQSJOHCPPUTUBSUFS˞˞ग़య IUUQTHJUIVCDPNVCFSQSPUPUPPMCMPCEFWTUZMF3&"%.&NE
$PSPVUJOFͰH31$ͷϨεϙϯεΛฦ͢• $PSPVUJOF&YDFQUJPO)BOEMFSͰΤϥʔϋϯυϥΛ$PSPVUJOF4DPQFʹઃఆ• ྫ֎ൃੜ࣌SFTQPOTF0CTFSWFSPO&SSPSͰΤϥʔฦ͢• MBVODIͰҾͷTVTQFOEJOHMBNCEBΛ࣮ߦͯ͠SFTQPOTF0CTFSWFSPO/FYUͰϨεϙϯεΛฦ͍ͯ͠Δ
• 4QSJOH%BUB3FEJT3FBDUPS• PSHTQSJOHGSBNFXPSLCPPUTQSJOHCPPUTUBSUFSEBUBSFEJTSFBDUJWF• 3FBDUJWF3FEJT0QFSBUJPOT&YUFOTJPOT˞͕• 3FBDUJWF3FEJT0QFSBUJPOTʹTVTQFOEJOHGVODUJPOΛ֦ுͯ͠Ճ• HFU"OE"XBJU• TFU"OE"XBJU ʜ• .POP5Ͱؼͬͯ͘Δϝιουʹରͯ͠BXBJU4JOHMF Ͱ0,,PUMJO$PSPVUJOFͱ3FBDUJWF3FEJT˞ग़యɿIUUQTHJUIVCDPNTQSJOHQSPKFDUTTQSJOHEBUBSFEJTCMPCNBJOTSDNBJOLPUMJOPSHTQSJOHGSBNFXPSLEBUBSFEJTDPSF3FBDUJWF3FEJT0QFSBUJPOT&YUFOTJPOTLU
• 4QSJOH%BUB3%#$• PSHTQSJOHGSBNFXPSLEBUBTQSJOHEBUBSECD• 3%#$ʜϦΞΫςΟϒʹ42-σʔλϕʔεͱ࿈ܞ͢Δ༷˞• .Z42- %SJWFS EFWNJLVSECDNZTRM ˞˞• %#ͷεΩʔϚ͔ΒJOTFSUTFMFDU༻ͷEBUBDMBTTΛੜ͢ΔHSBEMFλεΫΛ։ൃ,PUMJO$PSPVUJOFͱ3%#$ 3FBDUJWF3FMBUJPOBM%BUBCBTF$POOFDUJWJUZ˞ग़యɿIUUQTTQSJOHQMFJBEFTJPQSPKFDUTTQSJOHEBUBSECDIUUQTTQSJOHQMFJBEFTJPTQSJOHEBUBSECDEPDTSFGFSFODFIUNMSFGFSFODF˞˞ग़యɿIUUQTHJUIVCDPNNJSSPNVUUISECDNZTRM
• 1SPT• ίʔυͷݟ௨͕͠ྑ͍• ͘͠ͳΓ͕ͪͳඇಉظॲཧΛ؆ܿʹ͔͚Δ• ύϑΥʔϚϯε͕͍͍• $POT• 4USVDUVSFE $PODVSSFODZͷ֓೦͕ͱ͖ͬͭʹ͍͘• ಛʹΤϥʔͷൖ͋ͨΓ• *%&ͷαϙʔτ͕͍͍͓ͭͯΒͣσόοΨ͕ͨ·ʹޮ͔ͳ͍• ελοΫτϨʔε͕͍͠,PUMJO$PSPVUJOFಋೖͯ͠Έͯ
• +40/ఆٛͰফ͠ͳͯ͘Αͯ͘ྑ͍• 1SPUPCVGͷΧελϜΦϓγϣϯͰೝূͷ༗ແͳͲΛίʔυʹམͱͨ͠Γ• αʔόʔɺΞϓϦɺϑϩϯτʢ8FC $.4 ͱ୲ऀ͕͍Δ͕ᴥᴪ͕ى͖ʹ͍͘• ΞϓϦͱ$.4ಉ͡31$Λ͍ͬͯΔ• αʔόʔͷϦϙδτϦͷQSPUPΛDMPOFͯ͠QSPUP༻ͷผϦϙδτϦΛެ։• 4FSWFSTUSFBNJOH31$• ৄࡉը໘ͰϥΠϒ͕։࢝ͨ͠λΠϛϯάͰࣗಈͰ-*7&ը໘ʹભҠ͢Δͷʹར༻• ఆظతʹ1*/(ͷΑ͏ͳϨεϙϯεΛૹͬͯΫϥΠΞϯτ͕͢Ͱʹஅ͍ͯͨ͠Βྫ֎͕ى͖ΔͷͰૹ৴ΛࢭΊΔΑ͏ͳ࣮Λ͍ͯ͠Δ• -PBE CBMBODFS͕Ұఆ࣌ؒͰίωΫγϣϯΛͬͯ͠·͏ͷͰΫϥΠΞϯτଆ͔Β࠶ଓ͍ͯ͠ΔH31$ ಋೖͯ͠Έͯ
• ϚΠΫϩαʔϏε• υϝΠϯ͝ͱͷ*'͕ͱͯ໌֬ʹͳΔͷͰɺ݁Ռͱͯ͠ίʔυ͕៉ྷͳؾ͕͢Δ• ௨৴ઌͳͲͷαʔϏε͕ࢮΜͰӨڹͳ͍Α͏ʹ࡞Βͳ͖Ό͍͚ͳ͍ͷͰΤϥʔϋϯυϦϯά͕ͱͯॏཁʹͳΔ• ࢮͳͳͯ͘σϓϩΠ࣌ͳͲॠஅ͕͋Γ͑Δ• αʔϏεؒʹґଘؔ͋Δ͚ΕͲɺσϓϩΠॱΛؾʹ͠ͳ͍͍ͯ͘Α͏ʹ࡞Βͳ͍ͱ͍͚ͳ͍• ,VCFSOFUFT• Γಠࣗͷ֓೦͕͍͠• LVTUPNJ[FͰڥ͝ͱʹPWFSMBZ࡞͍ͬͯΔ• :".-ಡΉͷ͕ͭΒ͍• ͜ΕΛݟΕશઃఆ͕ॻ͍ͯ͋Δͱ͍͏ͷྑ͍ϚΠΫϩαʔϏεɾ,VCFSOFUFT ಋೖͯ͠Έͯ
• 3%#$• ͍ͭʹ.Z42- ESJWFSͷ࣮͕Ͱ͖ͨͷͰɺΑ͏͘ಋೖͰ͖ͨ• αϯϓϧͰΧϥϜ໊ΛจࣈྻͰࢦఆ͍͕ͯͨ͠ɺ,1SPQFSUZ͔ΒऔಘͰ͖ΔΑ͏ʹͯ͠2VYJEΈ͍ͨʹऔΕΔΑ͏ʹ͍ͯ͠Δ• 3FBDUPSʹ͋Δఔৄ͘͠ͳ͍ͱΤϥʔ͕ى͖ͨ࣌ͱ͔ʹௐ͕͍ࠪ͠3FBDUJWF3%#$ ಋೖͯ͠Έͯ
• ৽αʔϏε։ൃʹ͋ͨΓɺ,PUMJOΛ࠷ॳ͔Βೖɾ׆༻ͯ͠Α͔ͬͨ• ࠓͳΒ4QSJOHपลϥΠϒϥϦ͍ͩͿ$PSPVUJOFΛαϙʔτ͍ͯ͠Δ·ͱΊ˞ग़యɿIUUQTEPDTTQSJOHJPTQSJOHGSBNFXPSLEPDT.TQSJOHGSBNFXPSLSFGFSFODFMBOHVBHFTIUNMDPSPVUJOFT
• ʢʣ EBZબߟձ͕͋Γ·͢ʂ• IUUQTMJOFDPSQDPNKBDBSFFSMQEBZIJSJOH• ΤϯτϦʔక ʢ݄ʣத• ͍·͢• ͳΜͱαʔόʔαΠυਓͳΜͰ͢• ͲΜͳࣄʁ• େنαʔϏεΛࢦ͢ͱ͍͑ɺ࡞Δͷ͋·ΓมΘΓ·ͤΜ• ಓʹػೳػೳ• ܾࡁɾɾ৴ཧʜ• ͱ͍ٕ͑ज़ͷྗΛ࠷େݶʹ׆͔͍ͯ͠·͢8&"3&)*3*/(
THANK YOU