GoConference ’19 Summer in Fukuoka
DEMOはこちら https://gist.github.com/k1LoW/732360772475203fd6b7d8eb62309c83
খࢁ݈Ұ(.01FQBCP *OD(P$POGFSFODF`4VNNFSJO'VLVPLB%BUBBHHSFHBUJPOEFTJHOXJUI(PSPVUJOF $IBOOFM TZODQBDLBHF BOE4JNQMFEJBHSBN
View Slide
ϓϦϯγύϧΤϯδχΞখࢁ݈Ұ!L-P8ϗεςΟϯάࣄۀ෦ϗεςΟϯάάϧʔϓϚωʔδυΫϥυνʔϜIUUQTHJUIVCDPNL-P8
w UCMTJTB$*'SJFOEMZUPPMGPSEPDVNFOUBEBUBCBTF XSJUUFOJO(Pw σʔλϕʔεʹଓͯ͠υΩϡϝϯτΛੜͯ͘͠ΕΔίϚϯυϥΠϯπʔϧw 1PTUHSF42-.Z42-42-JUF42-4FSWFS#JH2VFSZ"NB[PO3FETIJGUw IUUQTHJUIVCDPNL-P8UCMT
%BUBBHHSFHBUJPO
%BUBBHHSFHBUJPOwʮσʔλΛऩूͯ͠ॲཧ͢Δʯwେنͳσʔλूج൫ͷ͓Ͱ͋Γ·ͤΜɻ͝ΊΜͳ͍͞wຊηογϣϯͰɺ୯७ʹʮೖྗ͕͋ͬͯɺͦΕΛ͍͍ײ͡ʹॲཧ͢ΔɻٻΊΔग़ྗΛಘΔʯͱ͍͏ͷΛࢦ͠·͢
ϞνϕʔγϣϯwαʔόʔΦϖϨʔγϣϯΛΑΓޮԽ͍ͨ͠wʮٕܳͷίʔυʹΑΔϘτϜΞοϓʯwʮϩάʯಛʹੜϩάΛޮՌతʹऔΓѻ͑ΔΑ͏ʹͳΕɺΦϖϨʔγϣϯޮతʹͳΔͷͰʁwϩάͷऔΓѻ͍ʮೖྗ͕͋ͬͯɺͦΕΛ͍͍ײ͡ʹॲཧͯ͠ɺٻΊΔग़ྗΛಘΔʯ
ྫ'MVFOUEw ೖྗΛड͚ͯʢJOQVUʣw ॲཧΛͯ͠ʢpMUFSCV⒎FSSPVUJOHw ग़ྗ͢ΔʢPVUQVUʣl8IBUJT'MVFOUE zΑΓIUUQTXXXqVFOUEPSHBSDIJUFDUVSF
ೖྗॲཧग़ྗ
ೖྗॲཧग़ྗwσʔλΛऩू͢Δͱ͍͏͜ͱɺͲ͔͜ʹσʔλ͕͋ΔwͦͷσʔλΛೖྗͱͯ͠ॲཧ͍ͯ͘͜͠ͱʹͳΔwٻΊΔग़ྗσʔλͷ֨ೲɺ୯७ʹඪ४ग़ྗͷදࣔͳͲɻw֨ೲɺೖྗσʔλΛͦͷ··֨ೲ͢Δ͜ͱ͋ΕɺϑΟϧλՃͷॲཧ͕͍Δ͜ͱ͋ΔwೖྗΛޮతʹॲཧ͠ग़ྗ͢Δ͜ͱΛߟ͑Δͱɺඞવతʹೖྗ͔Βग़ྗ·ͰͷؒετϦʔϜσʔλͷॲཧʹͳ͍ͬͯ͘σʔλऩूॲཧύΠϓϥΠϯॲཧ
ύΠϓϥΠϯwೖྗͱॲཧͱग़ྗΛεςʔδͱ͚ͯͯ͠ߟ͑Δw ,BUIFSJOF$PY#VEBZஶɺࢁޱೳ༁ʮ(PݴޠʹΑΔฒߦॲཧʯύΠϓϥΠϯೖྗ ॲཧ ग़ྗೖྗ ॲཧ ग़ྗॲཧεςʔδεςʔδྫ
ύΠϓϥΠϯͱฒߦॲཧwεςʔδͦΕͧΕͰฒߦʹॲཧΛΒͤΔw(PSPVUJOFwσʔλͦΕͧΕͷεςʔδͰฒߦʹॲཧ͞Εͭͭɺ࣍ͷεςʔδྲྀΕ͍ͯ͘
εςʔδ4UBHFwೖྗΛॲཧͯ͠ग़ྗ͢Δͷ͕·ͱ·Γʹͳ͍ͬͯΔग़ྗJP3FBEFSPSDIBOೖྗJP3FBEFSPSDIBOೖྗ͔ΒͷσʔλΛͪड͚ͯೖྗ͕དྷͨΒॲཧΛͯ͠ग़ྗʹॲཧͨ͠σʔλΛॻ͖ࠐΉ
εςʔδͱεςʔδΛͭͳ͛Δwલஈͷग़ྗͷܕͱޙஈͷೖྗͷܕ͕߹͍ͬͯΕܨ͛ΒΕΔೖྗJP3FBEFSग़ྗJP3FBEFS
4UBHFJP3FBEFSWFSw ೖྗJP3FBEFSw ग़ྗJP3FBEFSw )BOEMFͰJP1JQF Ͱ࿈݁w DBODFM ͕ൃՐͨ͠Βऴྃw ೖྗ͔ΒJP&0'͕དྷͯऴྃ˞ҙޙड़͠·͢
4UBHFDIBOWFSw ೖྗDIBO*Ow ग़ྗDIBO0VUw DUY%POF ͕ൃՐͨ͠Βऴྃw DIBO*O͕DMPTFͯ͠ऴྃ˞ҙޙड़͠·͢
ͪΐͬͱͬͨʂ
⚠%POPUTUPSF$POUFYUTJOTJEFBTUSVDUUZQFJOTUFBE QBTTB$POUFYUFYQMJDJUMZUPFBDIGVODUJPOUIBUOFFETJUIUUQTHPMBOHPSHQLHDPOUFYUߏମʹ$POUFYU࣋ͨͤͳ͍Α͏ʹ͍ͯͩ͘͠͞ΘΓʹ$POUFYUΛඞཁͱ͍ͯ͠Δؔʹ͍ͯͩ͘͠͞
͝ΊΜͳ͍͞
4UBHFJP3FBEFSWFSw ೖྗJP3FBEFSw ग़ྗJP3FBEFSw )BOEMFͰJP1JQF Ͱ࿈݁w DBODFM ͕ൃՐͨ͠Βऴྃw ೖྗ͔ΒJP&0'͕དྷͯऴྃ
4UBHFDIBOWFSw ೖྗDIBO*Ow ग़ྗDIBO0VUw DUY%POF ͕ൃՐͨ͠Βऴྃw DIBO*O͕DMPTFͯ͠ऴྃ
ύΠϓϥΠϯͷਖ਼ৗऴྃwग़ྗΛࢭΊΒΕΔͷɺͦͷग़ྗΛੜ͍ͯ͠ΔεςʔδwύΠϓϥΠϯͷ࠷ॳͷεςʔδͷग़ྗ͕ऴྃ͢Εɺ࣍ʑʹ࿈ͯ͠εςʔδ͕ऴྃ͢ΔwJP&0'ɺDMPTF DIBO
ύΠϓϥΠϯͷΩϟϯηϧwύΠϓϥΠϯͷ్தͷεςʔδΛ͍͖ͳΓΩϟϯηϧͰ͖ͯ͠·͏ͷྑ͘ͳ͍લஈͷεςʔδग़ྗΛΊͯ͘Εͳ͍ޙஈͷεςʔδͷ(PSPVUJOFࢭ·ͬͯ͘Εͳ͍wύΠϓϥΠϯͷશͯΛΩϟϯηϧͰ͖ΔΑ͏ʹ͢ΔDPOUFYU$POUFYUɺDPOUFYU$BODFM'VODશͯͷεςʔδʹDPOUFYU$POUFYUΛ͓ͯ͘͠
$POUFYUUSFFw $POUFYUͱ͔ͦ͜Βੜͨ͠$POUFYUͰࢠؔͷπϦʔ͕ܗ͞ΕΔΠϝʔδw $POUFYU8JUI$BODFMw ֤$POUFYUੜ$POUFYUͷ$BODFM'VODͷൖൣғΛ͏·͘ར༻ͯ͠ύΠϓϥΠϯʹΈࠐΜͰ͍͘
έʔεελσΟ
ඪ४ग़ྗʹ৭Λ͚͍ͭͨ
DPMSwҙͷͷจࣈྻΛࢦఆ࣮ͯ͠ߦ͢Δͱɺඪ४ೖྗͰड͚औͬͨετϦʔϜʹͦͷจࣈྻ͕͋ͬͨΒҙͷ৭Λ͚ͭͯ͘ΕΔwIUUQTHJUIVCDPNL-P8DPMSwUBJM'͍ͯ͠Δϩάͷจࣈྻʹ৭Λ͚ͭͯϩάͷͳͲΛࢹ֮తʹΘ͔Γ͔ͨͬͨ͘͢͠wطଘπʔϧଘࡏ͔͕ͨͬͨ͠ɺ୯७Ͱࣗͷ͍উख͕ྑ͍ͷΛ࡞ͬͨ
%&.0
DPMSwೖྗʜඪ४ೖྗwॲཧʜࢦఆͨ͠จࣈྻʹ৭Λ͚ͭΔwग़ྗʜඪ४ग़ྗ
DPMS
UBJM'ͷετϦʔϜΛࢭΊͣʹԿHSFQΛࢼ͍ͨ͠
pMUwετϦʔϜͷύΠϓઌʹpMUΛࢦఆ͓ͯ͘͜͠ͱͰɺετϦʔϜΛࢭΊͣʹύΠϓઌͷίϚϯυΛԿͰมߋͰ͖ΔwIUUQTHJUIVCDPNL-P8pMUwHSFQBXLTFE͕Լखͦ͘ͳͷͰɺUSJBMFSSPSͰࢼ͔ͨͬͨ͠wTUFSOͳͲɺ1PEʹϩά͕ཷ·͍ͬͯΔͱɺ࠷ॳͷग़ྗ·Ͱʹ͕͔͔࣌ؒΔͷͰɺ$USM$ͰࢭΊΔͷΛ᪳͢Δ͕࣌͋ͬͨ
pMUw ೖྗʜඪ४ೖྗw ॲཧʜw ͦͷ··ೖྗΛग़ྗʹͭͳ͛Δw αϒϓϩηεʹೖྗΛ͠ɺίϚϯυΛ࣮ߦͨ݁͠ՌΛग़ྗʹͭͳ͛Δw ग़ྗʜw ඪ४ग़ྗw EFWOVMM
pMU
pMUwೖྗͷྲྀྔΛ͏·੍͘ޚͰ͖ΕɺεςʔδΛΓସ͑ΔΑ͏ͳύΠϓϥΠϯΛߏஙՄೳwpMUͷ߹ϓϩϯϓτ͕ग़͍ͯΔؒग़ྗΛEFWOVMMʹࣺ͍ͯͯΔw1JQF͢Δ4VCQSPDFTT͚֎͠Ͱ͖ΔΑ͏ʹ͍ͯ͠Δ
ཧαʔόͷϩάLT1PEͷϩάҙͷλʔήοτΛࢦఆͯ͠ԣஅతʹ࣌ܥྻͰऔಘͨ͠ΓUBJM'ͨ͠Γ͍ͨ͠
)BSWFTUw͋Β͔͡ΊઃఆΛ༻ҙ͓ͯ͘͜͠ͱͰɺෳαʔόίϯςφʹࢄͨ͠ϩά͔ΒҙͷϩάΛࢦఆͯ͠ͷऔಘUBJM͕Ͱ͖ΔϙʔλϒϧͳϩάऩूπʔϧwIUUQTHJUIVCDPNL-P8IBSWFTUwΤʔδΣϯτϨεɻw44)ଓͰ͖Δαʔό͚ͩͰͳ͘,VCFSOFUFTͷ1PEͷϩάαϙʔτɻͦΕͧΕΛ۠ผ͢Δ͜ͱͳ͘ಁաతʹऔಘՄೳɻ
)BSWFTU
)BSWFTUw ೖྗʜw αʔόͷϩάϑΝΠϧʢ44)ͰϩάΠϯʣw ,VCFSOFUFT"1*ܦ༝Ͱͷ1PEͷϩάw ॲཧʜw ϩά͔Β࣌ࠁΛύʔεͯ͠औಘ͢Δw ग़ྗʜw ࡞ͨ͠42-JUFʹϩάใΛ*/4&35͢Δw ඪ४ग़ྗ
TZOD8BJU(SPVQwTZOD8BJU(SPVQͰϑΝϯΞτɾϑΝϯΠϯΛ࣮w$IBOOFMͰฒྻΛௐࢀߟIUUQTNBUUOLBPSJZBOFUTPGUXBSFMBOHHPIUN
UBJM'ͷ݁ՌΛ/ඵ͝ͱʹΧϯτ͍ͨ͠
FWSZwඪ४ೖྗͷ༰ΛɺҰఆ࣌ؒ͝ͱʢ͘͠Ұఆߦ͝ͱʣʹ·ͱΊͯࢦఆͷίϚϯυʹ͠ɺͦͷ࣮ߦ݁ՌΛγʔέϯγϟϧʹग़ྗ͢ΔίϚϯυwIUUQTHJUIVCDPNL-P8FWSZ
FWSZ
ฒྻ࣮ߦͭͭ͠ݩͷॱͰγʔέϯγϟϧʹग़ྗ͢Δ
TZOD.VUFY
ϩοΫ͖࣮ߦ݁ՌσʔλΧϓηϧwίϚϯυͷ࣮ߦ݁ՌΛอ࣋͢Δ$BQTVMFΛ༻ҙw/FX$BQTVMF ͰD-PDL ͯ͢͠wD0VUQVU Λ࣮ߦͯ͠ɺD6OMPDL ͕͞ΕΔ·Ͱग़ྗ͞Εͳ͍wग़ྗΛͭ
4FD4QMJUUFSwFYFDVUFS&YFDVUFS D ETUͷதͰɺίϚϯυͷ࣮ߦ݁Ռ͕ͰͨΒD6OMPDL ͕ൃՐUJDLFSͷॱͰγʔέϯγϟϧʹग़ྗ
·ͱΊ
·ͱΊwσʔλऩूॲཧύΠϓϥΠϯwࣗͷதͰύλʔϯΛ࡞ΕΕॻ͚Δɻಈ͘w(Pͷ͓͔͛Ͱɺϓϩάϥϛϯάͷ෯͕͕ͬͨɻͰ͖Δ͜ͱ͕͕ͬͨɻΓ͍ͨ͜ͱ͕͕ͬͨ
(PݴޠʹΑΔฒߦॲཧw ຊηογϣϯͰ͓͢Δ͜ͱͷ΄ͱΜͲ͕ຊॻ͔Βಘͨݟ͕ݩʹͳ͍ͬͯΔw ಘͨݟΛݩʹ࣮ͨ͠Β͏·͍ͬͨ͘w ຊʹΦεεϝʂʂ
5IBOLZPV࠷৽ͷ࠾༻ใΛνΣοΫˠ !QC@SFDSVJU