ServerlessDays Fukuoka 2019
*P5σόΠεͷٙࣅσʔλૹ৴γεςϜʹ͓͚ΔαʔόʔϨεͳϩάॲཧػߏͷࢼߦࡨޡ4FSWFSMFTT%BZT'VLVPLB 4BUໟརܒଠ
View Slide
‣ 'VTJD$P -UE‣ ϓϦϯγύϧΤϯδχΞNPDLNPDLνʔϜϦʔμʔ‣ "84 403"$0. (P 3VCZ‣ ࣌ؒͰશཧղʂΘΓͱΰπ͍,VCFSOFUFTϋϯζΦϯʂʂw IUUQTRJJUBDPN,UB.JUFNTDFDEEGEEໟརܒଠʢ͏Γ͚͍ͨʣ
*P5σόΠεͷٙࣅσʔλૹ৴γεςϜʹ͓͚ΔαʔόʔϨεͳϩάॲཧػߏͷࢼߦࡨޡ
*P5։ൃऀ͚ͷٙࣅσʔλੜɾૹ৴αʔϏεNPDLNPDL8FCίϯιʔϧ͔Β੍ޚBackendٙࣅσʔλԾσόΠεNPDL࣮σόΠεͳ͠Ͱ#BDLFOEͷςετෛՙࢼݧ͕࣮ࢪՄೳʹ
ը໘Πϝʔδࢥ͍௨ΓͷϑΥʔϚοτͰ+40/σʔλΛੜ ԾσόΠεͷεςʔλεͱͦͷมԽΛҙʹઃఆ͞·͟·ͳ࣌ܥྻσʔλੜػೳ
γεςϜશମ૾
PublicSubnetWebWebWebίϯιʔϧͰಈ࡞ΛઃఆmockΛૢ࡞PrivateSubnetRDS
PublicSubnet PrivateSubnetWebWeb WorkerWorkerWebίϯιʔϧͰಈ࡞ΛઃఆmockΛૢ࡞mockૢ࡞JobΛൃߦPrivateSubnetRDS
PublicSubnet PrivateSubnetS3 Bucket(Lot)S3 Bucket(Binary)WebWeb WorkerWorkermockૢ࡞JobΛൃߦઃఆϑΝΠϧΛΞοϓϩʔυmockαʔόʔʹૢ࡞ࢦࣔPrivateSubnetMockMockMockMockMockMockWebίϯιʔϧͰಈ࡞ΛઃఆmockΛૢ࡞PrivateSubnetRDS
PublicSubnet PrivateSubnetS3 Bucket(Lot)S3 Bucket(Binary)WebWeb WorkerWorkermockૢ࡞JobΛൃߦઃఆϑΝΠϧΛΞοϓϩʔυmockαʔόʔʹૢ࡞ࢦࣔઃఆϑΝΠϧόΠφϦΛDLPrivateSubnetMockMockMockMockMockMockWebίϯιʔϧͰಈ࡞ΛઃఆmockΛૢ࡞PrivateSubnetRDS
PublicSubnet PrivateSubnetS3 Bucket(Lot)S3 Bucket(Binary)WebWeb WorkerWorkermockૢ࡞JobΛൃߦઃఆϑΝΠϧΛΞοϓϩʔυmockαʔόʔʹૢ࡞ࢦࣔઃఆϑΝΠϧόΠφϦΛDLPrivateSubnetMockMockMockMockMockMockWebίϯιʔϧͰಈ࡞ΛઃఆmockΛૢ࡞mockϓϩηεىಈPrivateSubnetRDS
PublicSubnet PrivateSubnetS3 Bucket(Lot)S3 Bucket(Binary)WebWeb WorkerWorkermockૢ࡞JobΛൃߦઃఆϑΝΠϧΛΞοϓϩʔυmockαʔόʔʹૢ࡞ࢦࣔઃఆϑΝΠϧόΠφϦΛDLPrivateSubnetMockMockMockMockMockMockmockϓϩηεىಈWebίϯιʔϧͰಈ࡞ΛઃఆmockΛૢ࡞PrivateSubnet mockՔಇঢ়گΛ௨RDSϩάॲཧػߏʁLog Storageϩάૹ৴ϩάอଘ
PublicSubnet PrivateSubnetS3 Bucket(Lot)S3 Bucket(Binary)WebWeb WorkerWorkermockૢ࡞JobΛൃߦઃఆϑΝΠϧΛΞοϓϩʔυmockαʔόʔʹૢ࡞ࢦࣔઃఆϑΝΠϧόΠφϦΛDLPrivateSubnetMockMockMockMockMockMockmockϓϩηεىಈWebίϯιʔϧͰಈ࡞ΛઃఆmockΛૢ࡞PrivateSubnet mockՔಇঢ়گΛ௨RDSϩάॲཧػߏʁLog Storageϩάૹ৴ϩάอଘMockMock[ mock ]GoόΠφϦ͔ΒཱͯͨԾσόΠεϓϩηε[ tower ]GoόΠφϦ͔Βཱͯͨmockཧϓϩηε
ϩάॲཧػߏ
<*/165>֤NPDLϓϩηε͕ٙࣅσʔλૹ৴ͷͨͼʹϩάΛੜɾૹ৴<065165>Կ͔͠ΒͷετϨʔδʹੜϩάΛอଘ<065165>ϩάΛղੳͯ͠NPDLͷՔಇঢ়ଶΛ௨PrivateSubnetWorkerWorkerPrivateSubnetMockMockMockMockMockMockϩάॲཧػߏʁLog Storage
ը໘ͰݟΔͱʜ<065165>NPDLͷՔಇঢ়ଶΛදࣔ<065165>อଘͨ͠ϩάΛදࣔάϥϑදࣔ
ϙΠϯτ
PrivateSubnetWorkerWorkerPrivateSubnetMockMockMockMockMockMockϩάॲཧػߏʁLog StorageNPDLͷՔಇ࠷େͰສՔಇ͔Β͍͖ͳΓສʹͳΔ͜ͱ
PrivateSubnetWorkerWorkerPrivateSubnetMockMockMockMockMockMockϩάॲཧػߏʁLog StorageNPDLͷՔಇ࠷େͰສՔಇ͔Β͍͖ͳΓສʹͳΔ͜ͱNPDLͷσʔλૹ৴ִؒ࠷খͰඵ
ૹ৴ͨٙ͠ࣅσʔλͷαΠζʹΑͬͯϩάͷαΠζେ͖͘มಈ,#ະຬdे,#PrivateSubnetWorkerWorkerPrivateSubnetMockMockMockMockMockMockϩάॲཧػߏʁLog StorageNPDLͷՔಇ࠷େͰສՔಇ͔Β͍͖ͳΓສʹͳΔ͜ͱNPDLͷσʔλૹ৴ִؒ࠷খͰඵ
ૹ৴ͨٙ͠ࣅσʔλͷαΠζʹΑͬͯϩάͷαΠζେ͖͘มಈ,#ະຬdे,#NPDLͷՔಇঢ়ଶΛϦΞϧλΠϜʹө͍ͨ͠PrivateSubnetWorkerWorkerPrivateSubnetMockMockMockMockMockMockϩάॲཧػߏʁLog StorageNPDLͷՔಇ࠷େͰສՔಇ͔Β͍͖ͳΓສʹͳΔ͜ͱNPDLͷσʔλૹ৴ִؒ࠷খͰඵ
ૹ৴ͨٙ͠ࣅσʔλͷαΠζʹΑͬͯϩάͷαΠζେ͖͘มಈ,#ະຬdे,#NPDLͷՔಇঢ়ଶΛϦΞϧλΠϜʹө͍ͨ͠PrivateSubnetWorkerWorkerPrivateSubnetMockMockMockMockMockMockϩάॲཧػߏʁLog StorageNPDLͷՔಇ࠷େͰສՔಇ͔Β͍͖ͳΓສʹͳΔ͜ͱNPDLͷσʔλૹ৴ִؒ࠷খͰඵҰఆظ͕ؒܦաͨ͠ΒϩάΛফ͍ͨ͠
ૹ৴ͨٙ͠ࣅσʔλͷαΠζʹΑͬͯϩάͷαΠζେ͖͘มಈ,#ະຬdे,#NPDLͷՔಇʹΑͬͯඅ༻εέʔϧ͍ͤͨ͞NPDLͷՔಇঢ়ଶΛϦΞϧλΠϜʹө͍ͨ͠PrivateSubnetWorkerWorkerPrivateSubnetMockMockMockMockMockMockϩάॲཧػߏʁLog StorageNPDLͷՔಇ࠷େͰສՔಇ͔Β͍͖ͳΓສʹͳΔ͜ͱNPDLͷσʔλૹ৴ִؒ࠷খͰඵҰఆظ͕ؒܦաͨ͠ΒϩάΛফ͍ͨ͠
͋ͳͨͳΒͲ͏͢Δʁ
/PX-PBEJOHpowerd by ʮ࣮ࣸ൛ϞΫ͑ΜJO&YQMPSFSdѪɾ͓΅͍͑ͯ·͔͢dʯhttps://speakerdeck.com/ktam1219/shi-xie-ban-mokuemon-in-explorer-ai-oboeteimasuka
ୈ̍ੈ
‣ NPDLαʔόʔʹԿΠϯετʔϧ͠ͳ͍ ࢹͱ͔ΞοϓάϨʔυͱ͔͕໘‣ ϩάॲཧػߏʹωοτϫʔΫଳҬΛۃྗׂ͔ͳ͍ ϝΠϯػೳͷٙࣅσʔλૹ৴ʹ͍͍ͨୈੈํ
PrivateSubnetWorkerWorkerPrivateSubnetMockMockMockMockMockMockS3 BucketS3 BucketLambdaૹ৴ຖʹϩάΛॻ͖ग़͢1ຖʹશmockͷϩάΛूܭS3ͷputͰLambda͕ൃՐmockͷঢ়ଶΛHTTPͰ͑ΔmockຖʹϩάΛόϥͯ͠อଘ
ୈੈ݁Ռ(PPE #BE‣ NPDLαʔόʔʹԿΠϯετʔϧ͠ͳ͍͍ͯ͘‣ ϩάॲཧػߏʹׂ͘ωοτϫʔΫଳҬ͕࠷ݶ‣ ϩάͷୡʹ͕͔͔࣌ؒΔ‣ ϩάͷूղॲཧ͕͋ΔͨΊ ϩάͷαΠζ͕େ͖͘Ͱ͖ͳ͍‣ ҟৗܥ·Ͱߟ͑ΔͱUPXFSͰͷϩάूॲཧ͕ෳࡶʹͳΔ‣ 4͔ΒظؒࢦఆͰϩάΛऔΓʹ͍͘‣ XPSLFSʹNPDLঢ়ଶΛ͑Δͱ͜Ζ͕ಉظతw ࣦഊ࣌ͷ࠶ૹॲཧΛͤͶ
ୈੈ݁Ռ(PPE #BE‣ NPDLαʔόʔʹԿΠϯετʔϧ͠ͳ͍͍ͯ͘‣ ϩάॲཧػߏʹׂ͘ωοτϫʔΫଳҬ͕࠷ݶ‣ ϩάͷୡʹ͕͔͔࣌ؒΔ‣ ϩάͷूղॲཧ͕͋ΔͨΊ ϩάͷαΠζ͕େ͖͘Ͱ͖ͳ͍‣ ҟৗܥ·Ͱߟ͑ΔͱUPXFSͰͷϩάूॲཧ͕ෳࡶʹͳΔ‣ 4͔ΒظؒࢦఆͰϩάΛऔΓʹ͍͘‣ XPSLFSʹNPDLঢ়ଶΛ͑Δͱ͜Ζ͕ಉظతw ࣦഊ࣌ͷ࠶ૹॲཧΛͤͶͳΜ͔μα͍ʂ
/PX-PBEJOH
ୈ̎ੈ
‣ NPDLαʔόʔʹԿΠϯετʔϧ͠ͳ͍ ͬͺΓࢹͱ͔ΞοϓάϨʔυͱ͔͕໘‣ ϩάॲཧػߏʹωοτϫʔΫଳҬΛ͋Δఔׂ͜͏ Γͳ͔ͬͨΒ͓ۚͷྗʹཔͬͯੜ͖͍ͯ͜͏‣ 4͔Β%ZOBNP%#ʹม͑ͯΈΑ͏ %ZOBNP%#ͳΒ֤NPDL͔ΒϩάΛೖΕͯେৎͦ͏ ΫΤϦ͕ॻ͚ΔͷͰอଘͨ͠ϩά͕औಘ͍͢͠ ͰΩϟύγςΟͷཧ͕໘ʜୈ̎ੈํ
%ZOBNP%#0O%FNBOEരʂ!SF*OWFOU
%ZOBNP%#0O%FNBOEരʂ
ࢲͷͨΊͷΞοϓσʔτ͔
‣ ैདྷͷ%ZOBNP%#ͰɺΩϟύγςΟϢχοτ ಡΈॻ͖ੑೳΛ ͋Β͔͡Ίઃఆ͓ͯ͘͠ඞཁ͕͋ͬͨ 8$6 8SJUF$BQBDJUZ6OJU 3$6 3FBE$BQBDJUZ6OJU‣ ΩϟύγςΟϢχοτͷΦʔτεέʔϦϯάઃఆͰ͖Δ͕ɺ ॠؒతʹεέʔϧ͢ΔΘ͚Ͱͳ͍ ऑ͔͔Δ‣ 0O%FNBOEϞʔυͰɺͬͨΩϟύγςΟϢχοτʹରͯ͠ ैྔ՝ۚͯ͘͠ΕΔʂ ͋Β͔͡ΊΩϟύγςΟϢχοτΛઃఆ͓ͯ͘͠ඞཁ͕ͳ͍ʂ%ZOBNP%#0O%FNBOEരʂ
PrivateSubnetWorkerWorkerPrivateSubnetMockMockMockMockMockMockDynamoDB(On-Demand)LambdaSNSSQS֤mock͕DynamoDBʹϩάΛॻ͖ࠐΉWorker͔ΒσʔλΛऔΓʹߦ͘͜ͱͰඇಉظʹσʔλΛߋ৽DynamoDB StreamsʹΑͬͯLambdaΛൃՐੜϩάDynamoDBΛࢀরTTLͰҰఆظؒܦաޙʹআ
ୈੈ݁Ռ(PPE #BE‣ NPDLՔಇঢ়ଶͷୡ͕΄΅ϦΞϧλΠϜ‣ ػߏ͕ൺֱత؆୯ʹͳͬͨ‣ ϩάͷूղॲཧ͕ͳ͘ͳͬͨͷͰɺେ͖ΊͷϩάૹΕΔΑ͏ʹ‣ ϩάॲཧػߏʹׂ͘ωοτϫʔΫ ଳҬ͕େ͖͘ͳͬͨ‣ %ZOBNP%#0O%FNBOE ΰϦΰϦ͏ͱߴ͍ʜ
ୈੈ݁Ռ(PPE #BE‣ NPDLՔಇঢ়ଶͷୡ͕΄΅ϦΞϧλΠϜ‣ ػߏ͕ൺֱత؆୯ʹͳͬͨ‣ ϩάͷूղॲཧ͕ͳ͘ͳͬͨͷͰɺେ͖ΊͷϩάૹΕΔΑ͏ʹ‣ ϩάॲཧػߏʹׂ͘ωοτϫʔΫ ଳҬ͕େ͖͘ͳͬͨ‣ %ZOBNP%#0O%FNBOE ΰϦΰϦ͏ͱߴ͍ʜ#JLLVSJ‣ ࢥͬͨҎ্ʹॠؒతʹεέʔϧ͢Δw Ͱ<8$6>Ͱ0,
ୈ̏ੈ
‣ NPDLαʔόʔʹԿΠϯετʔϧ͠ͳ͍ ͬͺΓࢹͱ͔ΞοϓάϨʔυͱ͔͕໘‣ ϩάॲཧػߏʹωοτϫʔΫଳҬΛ͋Δఔׂ͜͏ Γͳ͔ͬͨΒ͓ۚͷྗʹཔͬͯੜ͖͍ͯ͜͏‣ %ZOBNP%#0O%FNBOE٫͠Α͏ ͓ۚʹݶք͕͋ΔΑͶୈ̏ੈํ
‣ ΩϟύγςΟ͕ৗʹେ͖͘มಈ͢Δ߹༗ޮ‣ NPDLNPDLͰมಈ͢Δ͕ɺ֤NPDL͕ॻ͖ࠐΉྔҰఆ ؤுΕ1SPWJTJPOFE͕͑ΔͷͰʁΰϦΰϦ%ZOBNP%#0O%FNBOEͣͬ͠ͱҰఆͰ͍ଓ͚ͨΒʜ0O%FNBOE 1SPWJTJPOFEར༻͍ͯ͠ΔΩϟύγςΟͷഒΛϓϩϏδϣϯ͍ͯ͠Δঢ়ଶʹ
ࢲͷͨΊͷΞοϓσʔτ͡Όͳ͔͔ͬͨ
‣ ىಈ࣌ʹඞཁͳΩϟύγςΟΛ༧ଌͰ͖Ε࣮ݱ͢Δ ૹ৴σʔλαΠζʹΑͬͯϩάͷαΠζ͕େ͖͘มಈ ૹ৴σʔλαΠζΛ༧ଌ͢Δͷࠔ%ZOBNP%#0O%FNBOE͔Βͷ٫
ը໘ͰݟΔͱʜʢ࠶ܝʣ<065165>NPDLͷՔಇঢ়ଶΛදࣔ<065165>อଘͨ͠ϩάΛදࣔάϥϑදࣔ
ը໘ͰݟΔͱʜʢ࠶ܝʣ<065165>NPDLͷՔಇঢ়ଶΛදࣔ<065165>อଘͨ͠ϩάΛදࣔάϥϑදࣔૹ৴σʔλͷใΛ͍ͬͯΔͷ͚ͩ͜͜ ผͷػߏͰอଘͯ͠ΈΑ͏
‣ ෳͷαʔόʔ͔ΒϚϯτͰ͖Δڞ༗ετϨʔδ ωοτϫʔΫϑΝΠϧγεςϜͱͯ͠Ϛϯτ‣ ༰ྔ͕ࣗಈͰεέʔϧ͢Δ‣ εϧʔϓοτ੍͕ޚՄೳ όʔετεϧʔϓοτϑΝΠϧγεςϜͷαΠζʹ߹Θͤͯεέʔϧ ϓϩϏδϣϯυεϧʔϓοτεϧʔϓοτΛઃఆ‣ ෳͷ";͔ΒΞΫηεՄೳ"NB[PO&MBTUJD'JMF4ZTUFN &'4
PrivateSubnetWorkerWorkerPrivateSubnetMockMockMockMockMockMockDynamoDB(Provisioned)LambdaSNSSQSDynamoDBʹmockঢ়ଶߋ৽༻ͷϩάEFSʹશͳϩάΛॻ͖ࠐΉΩϟύγςΟmockىಈ࣌ʹௐEFS
‣ ΩϟύγςΟ૿͢ํʹճ੍ݶ͕ແ͍͚ͲɺݮΒ͢ํʹճ੍ݶ͕͋Δ NPDLͷՔಇ୯Ґ͝ͱʹඞཁͳ8$6Λࢉग़ͯ͠Ճ DSPOͰ࣌ؒຖʹՔಇ୯Ґͷ8$6ͷ߹ܭΛग़ͯ͠ద༻%ZOBNP%#ͷ8$6ߋ৽
ୈੈ݁Ռ(PPE #BE‣ %ZOBNP%#ͷඅ༻͕࠷దԽ͞Εͨ ‣ ϩάॲཧػߏʹׂ͘ωοτϫʔΫ ଳҬ͕ͬͱେ͖͘ͳͬͨ‣ Ұఆ࣌ؒܦաޙʹ&'4͔ΒσʔλΛআ͢Δͷ͕खؒ‣ &'4*0Λ૿ͦ͏ͱ͢ΔͱͦΕͳΓʹඅ༻͕ʜ
ୈੈ݁Ռ(PPE #BE‣ %ZOBNP%#ͷඅ༻͕࠷దԽ͞Εͨ ‣ ϩάॲཧػߏʹׂ͘ωοτϫʔΫ ଳҬ͕ͬͱେ͖͘ͳͬͨ‣ Ұఆ࣌ؒܦաޙʹ&'4͔ΒσʔλΛআ͢Δͷ͕खؒ‣ &'4*0Λ૿ͦ͏ͱ͢ΔͱͦΕͳΓʹඅ༻͕ʜ:BSBLBTIJ‣ ςετڥͰ8$6Βͣߴֹٻ
ୈ̐ੈ
‣ NPDLαʔόʔʹԿ͔ΛΠϯετʔϧ͢ΔͷΛڐ༰͠Α͏ શମతʹ͜ͳΕ͖ͯͨͷͰɺࠓͳΒ͍͚Δؾ͕͢Δ‣ ࠓͦ͜,JOFTJTͱ͖߹͓͏ γϟʔυ͕ෳʹͳΔͱͪΐͬͱେม͚ͩͲ‣ ૣ͘&'4͔Β٫͍ͨ͠ؾ࣋ͪ ωοτϫʔΫଳҬͷϘτϧωοΫʹͳΓ͕ͪ ͓ۚͰղܾͰ͖Δ͚Ͳ͓ۚେࣄ ϩάͷͨΊʹNPDL͔ΒϲॴʹσʔλΛૹ͍ͬͯΔͷ͔ͬ͜ѱ͍ୈ̐ੈํ
‣ ,JOFTJT%BUB4USFBNTʹσʔλΛ͛ࠐΉϥΠϒϥϦ‣ ͋ΔఔσʔλΛ·ͱΊͯૹͬͯ͘ΕΔ γϟʔυ͋ͨΓͷॻ͖ࠐΈ੍ݶΛΫϦΞ͘͢͠ͳΔw .#ඵw ϨίʔυඵίϨ ωοτϫʔΫଳҬతʹ͞͠Ί -BNCEB࣮ߦճతʹ͞͠Ί‣ ૹ৴͕ඇಉظʹͳΔ‣ qVFOUEͱΈ߹Θͤͯ͏ͱΓ͍͢ BXTqVFOUQMVHJOLJOFTJT"NB[PO,JOFTJT1SPEVDFS-JCSBSZ ,1-
‣ ͦͷ໊ͷ௨ΓϩάΛཧͯ͘͠ΕΔͭ $MPVE8BUDI-PHT*OTJHIUTͰϩάσʔλΛੳ͢Δ͜ͱՄೳ อଘظؒઃఆͰ͖Δʂ‣ ୈੈͷͱ͖ʹҰճݕ౼͚ͯͨ͠Ͳ ੍ݶ༰Λצҧ͍͍ͯͯ͠Ϙπʹʜʂ‣ ϩάೖසͷ੍ݶ؇͕ඞཁ σϑΥϧτͰ݅ඵͷτϥϯβΫγϣϯ BQOPSUIFBTU"NB[PO$MPVE8BUDI-PHT
PrivateSubnetWorkerWorkerPrivateSubnetMockMockMockMockMockMockLambdaSNSSQS Kinesis Data Streams KPLͰσʔλΛ·ͱΊͯૹ৴CloudWatchLogsΞΧϯτ͝ͱʹLogGroupmock͝ͱʹLogStream
ୈੈ݁Ռ(PPE #BE‣ &'4͔Βͷ٫‣ ϩάॲཧػߏʹׂ͘ωοτϫʔΫଳҬ͕খ͘͞ͳͬͨ
ୈੈ݁Ռ(PPE #BE‣ &'4͔Βͷ٫‣ ϩάॲཧػߏʹׂ͘ωοτϫʔΫଳҬ͕খ͘͞ͳͬͨ*LLB‣ ͍ͭʹNPDLαʔόʔʹΠϯετʔϧͨ͠‣ ,1-ͰϩάΛूͯ͠ૹΔͨΊɺNPDLঢ়ଶͷୡϥά͕ŧŔŕŪũƄſ
ୈੈʁ
ظͷ৽"NB[PO5JNFTUSFBN!SF*OWFOU
‣ ߴͰεέʔϥϒϧͳશϚωʔδυܕͷ࣌ܥྻσʔλϕʔε ॻ͖ࠐΈΫΤϦετϨʔδʹΑΔैྔ՝ۚ *0ͷੑೳ ੍ݶ·ͩग़͍ͯͳ͍ʜ σʔλอଘظ͕ؒઃఆͰ͖ΔͷͰআॲཧඞཁͳ͍ʁظͷ৽"NB[PO5JNFTUSFBN
SF*OWFOUऴΘͬͨࠓʂ
·ͱΊ
‣ େྔͷNPDL͔Βൃੜ͢ΔϩάΛॲཧ͢ΔػߏͷมભΛݟ͖ͯͨ‣ ͳʹ͛ʹશ෦TFSWFSMFTT අ༻NPDLͷՔಇʹԠͯ͡εέʔϧ͢Δ ෦͕ଟ͍‣ ࣗͰ࡞Δͷ͕͍͠ػߏ͕ͨ͘͞Μ༻ҙ͞Ε͍ͯͯ ؾܰʹࢼߦࡨޡ͕Ͱ͖ΔͷΫϥυͳΒͰ ύζϧͷΑ͏ʹ͍Ζ͍ΖΈ߹Θ͍ͤͯ͘ͷָ͍͠ʂ‣ େنͳσʔλΛѻ͏ͱ͖ʹ࠷ޙʹϘτϧωοΫʹͳΔͷͬͺΓ*0·ͱΊ
͝ਗ਼ௌ ͋Γ͕ͱ͏͍͟͝·ͨ͠ʂNPDLNPDL͕ؾʹͳΔํޙΖͷϒʔεʂ