Reactive, Stateless and Mortal Architecture for Web Applications
松本亮介 / ペパボ研究所 GMOペパボ ホスティング技術カンファレンス ~破壊的イノベーションをおこす革新的技術~
3FBDUJWF 4UBUFMFTTBOE.PSUBM"SDIJUFDUVSFGPS8FC"QQMJDBUJPOTদຊ྄հϖύϘݚڀॴ(.0ϖύϘϗεςΟϯάٕज़ΧϯϑΝϨϯεʙഁյతΠϊϕʔγϣϯΛֵ͓͜͢৽తٕज़ʙ'BTU$POUBJOFSΞʔΩςΫνϟ֓
View Slide
ओ੮ݚڀһγχΞɾϓϦϯγύϧΤϯδχΞদຊ྄հ!NBUTVNPUPSZϖύϘݚڀॴIUUQSFTFBSDINBUTVNPUPSKQ
'BTU$POUBJOFSΞʔΩςΫνϟ֓wͳʹΛΓ͍ͨͷ͔w͜Ε·Ͱͷ՝wٕज़ʹΑ࣮ͬͯݱ͍ͨ͜͠ͱw'BTU$POUBJOFSΞʔΩςΫνϟw·ͱΊͱࠓޙͷऔΓΈ
ͳʹΛΓ͍ͨͷ͔
Πϯλʔωοτར༻ऀ͕շదʹදݱͰ͖ΔॴΛఏڙ͍ͨ͠
Πϯλʔωοτར༻ऀwΤϯδχΞҎ֎ͷਓͨͪwΤϯδχΞ
4/4ͷผར༻ʢग़యʣ૯লʮࣾձ՝ղܾͷͨΊͷ৽ͨͳ*$5αʔϏεɾٕज़ͷਓʑͷҙࣝʹؔ͢ΔௐࠪݚڀʯʢฏʣIUUQXXXTPVNVHPKQKPIPUTVTJOUPLFJXIJUFQBQFSKBIIUNMODIUNM
࣭ͷߴ͍ίϯςϯπͰ͋Ε୭͕4/4Λհ֦ͯ͠ࢄ͘͢͠ͳͬͨ
αʔόμϯ֦ࢄ࣌ͷ࠷وॏͳػձΛୣ͏
ΤϯδχΞҎ֎ͰͪΖΜ࠷֦ࢄ͍ͯ͠ΔػձΛಀͨ͘͠ͳ͍
؆୯ʹεέʔϧͯ͠ཉ͍͠
͜Ε·Ͱͷ՝
Α͋͘ΔΦʔτεέʔϧwར༻ऀʹಠ༷ࣗΛཁٻwಠ༷ࣗͰॻ͚ࣗಈతʹϦιʔεΛׂΓͯwΤϯδχΞҎ֎ʹ͍͠w͜Ε·ͰͷϨϯλϧαʔόͰ্༷͍͠
Α͋͘ΔεέʔϧΞοϓw714ͷΠϝʔδΛεφοϓγϣοτwੑೳྑ͍714ʹΠϝʔδΛద༻ͯ͠࠶ىಈwϦΞϧλΠϜੑ͕͍w࠶ىಈͨ͘͠ͳ͍wͳΜ͔ͩΜͩͰΤϯδχΞҎ֎ʹ͍͠
Α͋͘ΔεέʔϧΞτwߴෛՙ࣌ʹखಈͰ7.ΛՃwෛՙʹԠͯࣗ͡ಈͰ7.ΛՃwϦΞϧλΠϜੑ͕͍ɾεέʔϧ͢Δ·ͰʹखΕwߴͳεΩϧ͕ඞཁ
୯ʹ714Λ͍͍ͨΘ͚Ͱͳ͍wΧʔωϧΛ͍͡Γ͍ͨΘ͚͡Όͳ͍wࣗ༝ʹϛυϧΣΞΛ্ཱ͍ͪ͛ͨwͰ͖Δ͚ͩੑೳՄ༻ੑΛ୲อ͍ͨ͠wͰ͖Εӡ༻ຊͨ͘͠ͳ͍
ϨϯλϧαʔόͷΑ͏ʹ࢝ΊΒΕͯ714ͷΑ͏ʹࣗ༝͕ߴ͘ΫϥυαʔϏεͷΑ͏ʹ֦ுੑͷߴ͍8FCΞϓϦέʔγϣϯͷϗεςΟϯάαʔϏε͕ཉ͍͠
ಉ࣌ʹγϯϓϧͰӡ༻͠қ͍γεςϜΞʔΩςΫνϟΛ࣮ݱ͍ͨ͠
ٕज़ʹΑ࣮ͬͯݱ͍ͨ͜͠ͱ
࣮ݱ͍ͨ͜͠ͱ̍ʢར༻ऀઢʣw͏ͨΊͷಠ༷͕ࣗۃྗٻΊΒΕͳ͍wઐతͳ͕ࣝͳͯ͘ར༻ՄೳwΧελϚΠζͨ͠8PSE1SFTT͕ී௨ʹ͑Δͱ͔wίϯςϯπҎ֎Ϛωʔδυ͕Մೳwকདྷతʹ714తͳ͍ํݟਾ͑ͨઃܭ
࣮ݱ͍ͨ͜͠ͱ̎ʢར༻ऀઢʣw࠶ىಈͳ͘ଈ࣌ʢΦʔτʣεέʔϧΞοϓՄೳwϦΫΤετܖػͰʢΦʔτʣεέʔϧΞτՄೳwΞϓϦέʔγϣϯىಈத͚ͩ՝ۚରwΠϕϯτυϦϒϯͰΞϓϦέʔγϣϯΛىಈՄೳ
࣮ݱ͍ͨ͜͠ͱ̏ʢࣄۀऀઢʣwෳࡶͳγεςϜίϯϙʔωϯτͷ࿈ܞΛݮΒ͢wঢ়ଶΛ࣋ͭɾ࣋ͨͳ͍Λ໌֬ʹwΓ͚ϝϯςφϯεӡ༻͠қ͍γεςϜઃܭ
'BTU$POUBJOFSΞʔΩςΫνϟ
JNNPSUBM
ࢮͳͳ͍ɺෆࢮͷ
8FCΞϓϦέʔγϣϯͷϓϩηεJNNPSUBM͕ٻΊΒΕ͖ͯͨ
TIPSUMJWFE
໋ͷɺ͔ͭͷؒͷɺ͔ͳ͍
όονॲཧπʔϧྨ֓ͶTIPSUMJWFE
NPSUBM
ࢮΛ໔Εͳ͍ɺࢮ͖͢ӡ໋ͷ
'BTU$POUBJOFSJTNPSUBM
'BTU$(*JTBMTPNPSUBM
'BTU$(*Ϟσϧ'BTU$(*QSPDFTT QIQDHJJOEFYQIQ'BTU$(*QSPDFTTGPSL ҰఆظؒܦաޙUFSNJOBUFQSPDFTTFYFDWF 1BSFOUIUUQEQSPDFTTPXOFSSPPU$IJMEIUUQEQSPDFTTPXOFSBQBDIFҰఆظ͍ؒ·Θ͢8FCαʔόͰ$(*Λ࣮ߦ͢ΔͨΊͷͻͱͭͷΞʔΩςΫνϟ
'BTU$(*Ϟσϧ'BTU$(*QSPDFTT QIQDHJJOEFYQIQ'BTU$(*QSPDFTTGPSL ҰఆظؒܦաޙUFSNJOBUFQSPDFTTFYFDWF 1BSFOUIUUQEQSPDFTTPXOFSSPPU$IJMEIUUQEQSPDFTTPXOFSBQBDIFҰఆظ͍ؒ·Θ͢8FCαʔόͰ$(*Λ࣮ߦ͢ΔͨΊͷͻͱͭͷΞʔΩςΫνϟඇৗʹNPSUBMͳৼΔ͍
'BTU$(*ͷϝϦοτw$(*ͱൺֱͯ͠ϦΫΤετຖͷϓϩηεੜഁغΛߦΘͳ͍ͨΊੑೳ͕ߴ͍wҰఆ࣌ؒͰϓϩηεഁغ͕ߦΘΕΔͨΊϓϩηε͕૿͑ଓ͚Δ͜ͱͳ͘Ϧιʔεޮൺֱతྑ͍w$(*JTTIPSUMJWFE IUUQEJTJNNPSUBM
'BTU$(*ΛϞμϯʹߟw&WFOU%SJWFOʹ8FCαʔόΛىಈՄೳw8FCαʔόΛ͍ࣺͯ͢ΔJNNVUBCMFͳॲཧwҰఆظؒϓϩηεϓʔϧՄೳͳॲཧํࣜ3FBDUJWFͰ4UBUFMFTTʹಈ࡞͢ΔNPSUBMͳ8FCαʔόϞσϧͰ͋Δͱݴ͑Δ
'BTU$(*ΛԠ༻wىಈରΛ$(*͔Βίϯςφwίϯςφىಈ͕͍ͷ$3*6ͰΠϝʔδԽwϦΫΤετܖػͰίϯςφΛىಈͤ͞ΔwίϯςφͰ͋Εىಈ͕͘Ԡ༻ՄೳͰͱ͍͏ൃ
'BTU$POUBJOFS
8FCΞϓϦέʔγϣϯ࣮ߦج൫ͱͯ͠ͷ'BTU$(*Λ࣮ݱ͢Δ
'BTU$POUBJOFSJTSFBDUJWF TUBUFMFTTBOENPSUBMBSDIJUFDUVSFGPS8FCBQQMJDBUJPOT
'BTU$POUBJOFSϑϩʔ֓ཁ)PTU04'BTU$POUBJOFS)PTU048FC1SPYZ-PDBM8FC1SPYZ4UPSBHF$.%#DPOUBJOFSFOHJOF-74$MJFOU8FC1SPYZ8FC1SPYZ-74-74ίϯςφॴऔಘίϯςφϓϩΩγίϯςφϓϩΩγϓϩΩγઌ͕ෳ͋Δ߹͍ͣΕ͔Λબίϯςφىಈࢦࣔʢίϯςφఀࢭ࣌ʣίϯςφىಈʢίϯςφఀࢭ࣌ʣίϯςφϓϩΩγίϯςφΞΫηε'BTU$POUBJOFS'BTU$POUBJOFS'BTU$POUBJOFS8FC1SPYZ-PDBMίϯςφใऔಘʢίϯςφఀࢭ࣌ʣ$MJFOU$MJFOU$MJFOU$MJFOU
ϦΫΤετܖػͷίϯςφىಈ֓ཁ8FC1SPYZʢOHY@NSVCZ$.%#-PDBM8FC1SPYZOHY@NSVCZ-74 ίϯςφίϯςφίϯςφPSϙʔτΛ8FC1SPYZྲྀ͢)551ϦΫΤετ͔Β)PTUOBNFΛΩʔʹɺ$.%#͔Βϗετ04ͷ*1ΞυϨεͱίϯςφͷ*1ΞυϨεͱϙʔτΛऔಘ)551 4ϦΫΤετίϯςφͷ*1ΞυϨεɾϙʔτʹج͍ͯίϯςφʹϓϩΩγɻίϯςφͷ*1ΞυϨεɾϙʔτɺ8FC1SPYZ͔Βϔομͱͯ͠༩͞Εͯ͘Δɻίϯςφ͕-JTUFO͍ͯ͠ͳ͍߹$.%#͔ΒίϯςφใΛಘͯىಈͤ͞Δɻ$POUBJOFS&OHJOFIBDPOJXBΠϯλʔωοτϓϥΠϕʔτωοτϫʔΫ$MJFOU
'BTU$POUBJOFSͷγεςϜཧଆͷಛw$.%#ʹऩ༰ઌΛՃ͢Δ͚ͩͰεέʔϧΞτՄೳwεέʔϧΞτ͍ͯ͠Βͳ͘ͳͬͨΒউखʹఀࢭwίϯςφͳͷͰىಈͨ͠··εέʔϧΞοϓՄೳwίϯςφͷϗετؒҠಈෳɾഁغ͕༰қwγεςϜϥΠϒϥϦ͕࠷৽ͷঢ়ଶ
8FCBQQίϯςφߴूੵ࣌ͷྨJNNPSUBM TIPSUMJWFE NPSUBMੑೳ ̋ ✕ ˚Ϧιʔε ✕ ˚ ̋εέʔϧ ˚ ̋ ̋ӡ༻ɾอक ✕ ̋ ̋ϓϩηεྫىಈͬ͠ͺͳ͠ͷίϯςφϦΫΤετ୯ҐͰίϯςφىಈ'BTU$POUBJOFS
'BTU$POUBJOFS࣌ͷσʔλઃܭྫετϨʔδϗετ04 ϗετ04ϚελʔγεςϜΠϝʔδ'BTU$POUBJOFSӡ༻ରʣϚελʔ8ϛυϧΣΞΠϝʔδ'BTU$POUBJOFSӡ༻ରʣ"ϢʔβσʔλྖҬWBSMJCIBDPOJXBDPOUBJOFS" VTSMPDBMBQBDIF IUEPDT#ϢʔβσʔλྖҬWBSMJCIBDPOJXBDPOUBJOFS# VTSMPDBMBQBDIF IUEPDT$ϢʔβσʔλྖҬWBSMJCIBDPOJXBDPOUBJOFS$Ϛελʔ44)ϛυϧΣΞΠϝʔδӡ༻ରʣWBSMJCIBDPOJXBDPOUBJOFS%IPNFVTFSVTSMPDBMTTIEϚϯτϚϯτ
'BTU$POUBJOFS࣌ͷωοτϫʔΫߏྫ)PTU04-PDBM8FC1SPYZ$POUBJOFS&OHJOF$POUBJOFS.BOBHFSCS$POUBJOFSOFUOTWFUI/*$$POUBJOFSOFUOTWFUI4FSWJDF/FUXPSL8FC1SPYZFUI-74FUIFUI*OUFSOFU)PTU04-PDBM8FC1SPYZ$POUBJOFS&OHJOF$POUBJOFS.BOBHFSCS$POUBJOFSOFUOTWFUI/*$$POUBJOFSOFUOTWFUI$.%#FUIFUIFUIFUI.BOBHFE/FUXPSLFUI4UPSBHF/FUXPSLFUI FUI4UPSBHF
·ͱΊ
·ͱΊwΤϯδχΞҎ֎ͷਓͨͪͰ͑Δշదͳॴͷఏڙw৽͍͠ΞʔΩςΫνϟʹΑͬͯ՝Λٕज़తʹղܾw'BTU$POUBJOFSΞʔΩςΫνϟͷఏҊw8FCΞϓϦέʔγϣϯΛNPSUBMʹ࣮ߦ͢ΔwաڈͷރΕٕͨज़͕࣌എܠͱڞʹ࠶׆͖Δ
ࠓޙͷऔΓΈ
'BTU$POUBJOFSͷΑ͏ʹഁյͱ࠶ߏஙΛNPSUBMʹߦ͍ͳ͕Βಈతʹฏߧঢ়ଶΛอͪͦͷଞίϯϙʔωϯτΛωοτϫʔΫΛհͯ͠แׅ͢ΔγεςϜ
%JNFOTJPOGSFF"VUPOPNPVT0QFSBUJOH4ZTUFNͱఆٛ
%"04
%"04ʹ͓͚Δϓϩηεಈతฏߧͷܥʹ͋Δ7.ͷΑ͏ͳͷ
%"04ʹ͓͚ΔεϨου'BTU$POUBJOFSͷίϯςφͷΑ͏ͳͷ
%"04ʹ͓͚ΔεϨουΛ.PSUBMͱ໋໊
%"04Ͱͷ֤ίϯϙʔωϯτωοτϫʔΫΛհͯ͠ଓ͢Δ%"04ͷΠϝʔδ-JOVY -JOVY -JOVY -JOVY%"04ͷγεςϜίʔϧϨΠϠʔʢ)BDPOJXBʣ.PSUBM%"04ͷεϨουʣ.PSUBM%"04ͷεϨουʣ.PSUBM%"04ͷεϨουʣ.PSUBM%"04ͷεϨουʣ.PSUBM%"04ͷεϨουʣ.PSUBM%"04ͷεϨουʣ.PSUBM%"04ͷεϨουʣ.PSUBM%"04ͷεϨουʣ%"04Ϣʔβϥϯυ%"04Χʔωϧ
%"04Λج൫ͱͨ͠ͳΊΒ͔ͳγεςϜ
ݚڀһੵۃతʹืूதIUUQSBOEQFQBCPDPN