超個体型データセンターOSを目指した選択性を持つコンテナ実行基盤
第5回Web System Architecture研究会(#wsa研)@福岡
2019/09/28
さくらインターネット株式会社 さくらインターネット研究所 上級研究員 まつもとりー / @matsumotory / 松本亮介
͘͞ΒΠϯλʔωοτגࣜձࣾ(C) Copyright 1996-2019 SAKURA Internet Inc͘͞ΒΠϯλʔωοτݚڀॴݸମܕσʔληϯλʔOSΛࢦͨ͠બੑΛ࣋ͭίϯςφ࣮ߦج൫2019/09/27 ্ڃݚڀһ দຊ ྄հୈ5ճWeb System Architectureݚڀձ(#wsaݚ)ˏԬ
View Slide
1. എܠͱత2. ݸମܕσʔληϯλʔ3. ࢄγεςϜʹ͓͚ΔબੑΛ࣋ͭίϯςφج൫ߏ4. ·ͱΊ2࣍
3େنσʔληϯλʔͷूதͱٕज़എܠͷมԽ• σʔληϯλʔͷେنԽͱूத• ίϯϐϡʔλϦιʔεͱίετͷޮԽ• Ϋϥυར༻͕͜͜Ͱਵͱଅਐ͞Ε͖ͯͨ• ٕज़എܠͷมԽʹͬͯOSSαʔϏεٸʹมԽ• ιϑτΣΞϕϯμʔʹڧ͘ґଘ͠ͳ͍มԽʹڧ͍ઃܭ͕ٸ• ΫϥυωΠςΟϒɾϚϧνΫϥυɾϚΠΫϩαʔϏεԽ• εϚʔτγςΟɾεϚʔτϞϏϦςΟ• Edge/FogίϯϐϡʔςΟϯάɾྔࢠίϯϐϡʔςΟϯά
4σʔληϯλʔͷूத͔Βࢄ• ΫϥυΛલఏʹϞϊϦγοΫͳαʔϏεઃܭ͔ΒϚΠΫϩαʔϏεԽ• αʔϏεͷ֤ػೳΛখ͞ͳαʔϏεͱ࣮ͯ͠͠gRPCͰ࿈ܞ• ೝূਪનɺͦͷଞ֤छػೳΛϚΠΫϩαʔϏεԽͯ͠Έ߹ΘͤΔ• ϚΠΫϩαʔϏεؒͰͷϨΠςϯγʔͷݮ͕ٻΊΒΕΔ• େنσʔληϯλʔͷڑʢ౦ژͱੴङؒʣͰ͕ٞੜ࢝͡ΊΔ• αʔό͚ͩͰͳ͘ηϯαʔσόΠεͷߴԽɾଟԽ• Edge/FogίϯϐϡʔςΟϯάɾεϚʔτγςΟɾεϚʔτϞϏϦςΟ• ϦΞϧλΠϜੑۙͰͷίϯϐϡʔλϦιʔεఏڙྔ૿Ճͷཁٻ
5σʔληϯλʔػೳ͕ࣾձʹ༹͚ࠐΉະདྷ• ֤ίϯϐϡʔςΟϯάػೳ͕ݸମͱͯ͠ػೳͭͭ͠૯ମͱͯ͠౷• ϥοΫϨϕϧͷίϯϐϡʔλ܈ɼEdge/FogίϯϐϡʔςΟϯάͳͲ• খɾதنσʔληϯλʔ͕ϋϒͱͳͬͯ݁Ռతʹશମ͕ଓɾߏ• ੜ׆ͷதͰਓʑ͕ίϯϐϡʔλͷΞγετΛৗʹड͚Δ࣌Λࢦ͢• ͍·͔ͩͭͯͳ͍ϚγϯύϫʔͱΠϯςϦδΣϯεͳػೳΛఏڙ• ࣾձʹ༹͚ࠐΉσʔληϯλʔػೳ͓ΑͼΫϥυͷϚγϯύϫʔ• ݸମܕσʔληϯλʔ͓ΑͼOSͱίϯηϓτΛఆΊΔ
6બੑΛ࣋ͭίϯςφ࣮ߦج൫• ݸମܕσʔληϯλʔOSʹඞཁͳཁ݅ͱ• ݱ࣮తͳWebΞϓϦέʔγϣϯΛѻ͏ίϯςΩετͰ·ͣݕ౼• ίϯϐϡʔςΟϯάϦιʔε͕ࢄԽͨ͠ࡍͷίϯςφͷ͋Γํ• σʔληϯλʔOSΛʹ͓͚ΔϓϩηεεϨουͱͯ͠ͷίϯςφ• ίϯςφͷϦΞΫςΟϒੑͷॏཁੑΛٞ• ֤छίϯςφϥϯλΠϜΛબతʹࣗࢄͨ͠DCల։͢Δج൫
ݸମܕσʔληϯλʔ
8͘͞ΒΠϯλʔωοτݚڀॴͷϑΥʔΧεTTF TASTAA PAPR TTTRIV
9ݱࡏͷΫϥυ͚ͩͰ͕ղܾͰ͖ΔΘ͚Ͱͳ͍• ΑΓҰநԽͷਐΜͩΠϯλʔωοτͷ༷૬ͷมԽ• ΫϥυωΠςΟϒʹΑͬͯ͞ΒͳΔσʔληϯλʔͷڊେԽ• தԝूݖతͳίϯϐϡʔςΟϯάͰ͍͠έʔε• ϨΠςϯγ͕େ͖ͯ͘அ͕ؒʹ߹Θͳ͍ϦΞϧλΠϜ͕ཁٻ͞ΕΔέʔε• Edge/FogίϯϐϡʔςΟϯάɾεϚʔτγςΟɾεϚʔτϞϏϦςΟ• ࠓޙΫϥυͷϚγϯύϫʔΛͲͷΑ͏ʹ׆༻Ͱ͖ΔੈքΛࢦ͖͔͢ʁ• ͘͞ΒΠϯλʔωοτݚڀॴͷίϯηϓτͱϏδϣϯΛ࠶ఆٛ
10͘͞ΒΠϯλʔωοτݚڀॴͷϏδϣϯ
ίϯηϓτɿݸମܕσʔληϯλʔ(໊͚࣮ @_tokibi ͞Μʣ
12ͦͦݸମͱ• ӳޠͰsuperorganism• ࣾձੑࠛͷࣾձूஂΛҙຯ͢Δ͜ͱ͕ଟ͍• ࣾձֶੜֶɺܦࡁֶɺαΠόωςΟοΫεͷͳͲͰٞ• ୯ػೳ͔ͭݸผͷػೳΛ࣋ͭݸମ͕૯ମͱͯ͠ݸମҎ্ͷৼΔ͍Λ͢Δ• ଟͷҟछͷݸମ͕ಠࣗʹಈ͕͘૯ମͱͯ͠ҰͭͷݸମͷΑ͏ʹৼΔ͏• ಉछͰߏ͞ΕΔ߹ݸମ܈ίϩχʔͳͲͱݺͿ߹• ͍͔ͭ͘εϚʔτγςΟͷจ຺Ͱจدߘ͕͋Δ [1][2][1] Franco Zambonelli, Toward Sociotechnical Urban Superorganisms, IEEE Computer Magazine, pp. 76-78, vol. 45, 2012.[2] Nicola Bicocchi, Alket Cecaj, Damiano Fontana, Marco Mamei, Andrea Sassi, Franco Zambonelli, Collective Awareness for Human-ICTCollaboration in Smart Cities, IEEE WETICE 2013, Volume: 1, Pages: 3-8, 2013.
13ίϯηϓτɿݸମܕσʔληϯλʔ1. ݱࡏσʔληϯλʔʹڊେͳίϯϐϡʔςΟϯάϦιʔε͕ଘࡏ͍ͯ͠·͕͢ɺࠓޙϨΠςϯγʗηΩϡϦςΟʗίετͷཁ͔݅Βɺ͋ΒΏΔॴࣾձɺ৫ʹίϯϐϡʔςΟϯάϦιʔε༹͕͚ࠐΜͰ͍͘͜ͱʹͳΓ·͢ɻ2. ͦΕΒࢄͨ͠ίϯϐϡʔςΟϯάϦιʔεɺ୯ಠͰίϯϐϡʔςΟϯάύϫʔΛఏڙ͢Δʹཹ·ΒͣɺͦͷॴࣾձͷཁٻʹԠͯ͡ɺࣗతʹɺࢄ͋Δ͍༗ػతʹ݁߹͠ɺݱɾΫϥυͦΕͧΕ͕ॎԣʹ݁ͼ͍ͭͨϋΠϒϦουߏΛ࠾ΔΑ͏ʹػೳ͠·͢ɻ3. ͜ͷΑ͏ͳγεςϜʹΑΓ࣮ݱ͞ΕΔͷɺਓʑͷۙʹଘࡏ͠ɺϦΞϧλΠϜ͔ͭΠϯςϦδΣϯεʹϢʔβΛࢧ͑ͳ͕Βɺ͔͠͠ಉ࣌ʹόοΫΤϯυଆ͕༗ػతʹ݁߹͢Δ͜ͱʹΑΓɺ͔ͭͯͳ͍ϚγϯύϫʔͱϦιʔεྔΛಈһ͢Δ͜ͱͰݱ࠷ద͔ͭશମ࠷దΛ࣮ݱ͢ΔSuperorganizm WorldͰ͢ɻฐॴͷʹΑΔղઆIUUQTSFTFBSDITBLVSBBEKQDPODFQUWJTJPO
14ίϯηϓτͷ͏ҰͭͷׂɿٞΛ͓͜͢1. ݱࡏσʔληϯλʔʹڊେͳίϯϐϡʔςΟϯάϦιʔε͕ଘࡏ͍ͯ͠·͕͢ɺࠓޙϨΠςϯγʗηΩϡϦςΟʗίετͷཁ͔݅Βɺ͋ΒΏΔॴࣾձɺ৫ʹίϯϐϡʔςΟϯάϦιʔε༹͕͚ࠐΜͰ͍͘͜ͱʹͳΓ·͢ɻ2. ͦΕΒࢄͨ͠ίϯϐϡʔςΟϯάϦιʔεɺ୯ಠͰίϯϐϡʔςΟϯάύϫʔΛఏڙ͢Δʹཹ·ΒͣɺͦͷॴࣾձͷཁٻʹԠͯ͡ɺࣗతʹɺࢄ͋Δ͍༗ػతʹ݁߹͠ɺݱɾΫϥυͦΕͧΕ͕ॎԣʹ݁ͼ͍ͭͨϋΠϒϦουߏΛ࠾ΔΑ͏ʹػೳ͠·͢ɻ3. ͜ͷΑ͏ͳγεςϜʹΑΓ࣮ݱ͞ΕΔͷɺਓʑͷۙʹଘࡏ͠ɺϦΞϧλΠϜ͔ͭΠϯςϦδΣϯεʹϢʔβΛࢧ͑ͳ͕Βɺ͔͠͠ಉ࣌ʹόοΫΤϯυଆ͕༗ػతʹ݁߹͢Δ͜ͱʹΑΓɺ͔ͭͯͳ͍ϚγϯύϫʔͱϦιʔεྔΛಈһ͢Δ͜ͱͰݱ࠷ద͔ͭશମ࠷దΛ࣮ݱ͢ΔSuperorganizm WorldͰ͢ɻ༗ػతͱʁॎԣͱʁ࠷దͱʁ→ ΜʹٞΛ͓͋͑ͯ͘͜͢ᐆດͳϫʔυΛબฐॴͷʹΑΔղઆIUUQTSFTFBSDITBLVSBBEKQDPODFQUWJTJPO
ݸମܕσʔληϯλʔOSͱίϯςφ
16ࠓίϯςφͷ໘ന͍ͱ͜Ζ• ΫϥυɾϗεςΟϯάۀքʹ͍ͨࣗͱͯ͠ཁૉٕज़͜Ε·Ͱͱಉ͕ͩ͡• ίϯςφΛऔΓר͘ΤίγεςϜඪ४Խ͕ੈքͰڠௐͯ͠ਐΈ࢝Ί͍ͯΔ• kubernetesɺistioͳͲͷαʔϏεϝογϡɺϚΠΫϩαʔϏεͷ׆༻• Open Container Initiative(OCI)ɺContainer Runtime Interface(CRI)• CNCFΛத৺ʹ͜ΕΒͷݚڀɾઃܭɾ։ൃɾඪ४Խ͕ΜʹߦΘΕ͍ͯΔ• ಛʹΦʔέετϨʔγϣϯ࣮ݱࠔͩͬͨͱ͜ΖΛօͰڠྗͯٞ͠ɾ։ൃ• ΞΧσϛΞͱاۀ͕ڠྗͯ͠ݚڀΛ࢝͠Ί͍ͯΔ
17ίϯςφͱݸମσʔληϯλʔ• ݸମܕσʔληϯλʔʹ͚ͨσʔληϯλʔOSͱίϯςφ• ࣮༻తͳWebAppɼWordPressͱ͔ɼΛ͏·͘ಈ͔͍ͨ͠ͱ͍͏είʔϓ• ComputeͱDataͷ͏ͪCompute-Intensiveʹ·ͣண• ࢄͨ͠σʔληϯλʔ্ʹಁաతʹࢄىಈ͢Δίϯςφ܈͕ඞཁ• ߴʹࢄͨ͠σʔληϯλʔ্ʹOSͷΑ͏ͳബ͍ϨΠϠʔ͕ඞཁ• ݸମܕσʔληϯλʔOS্ʹϓϩηεͱεϨου͕ଘࡏ͢Δੈք؍
18ಁաੑͱίϯςφͷϦΞΫςΟϒੑͷॏཁ͞• σʔληϯλʔΛಁաత͔ͭ༗ػతʹίϯςφ͕ॲཧΛߦ͏ඞཁ͕͋Δ• ߴʹࢄͨ͠ཧతಛੑΛҙࣝ͠ͳ͍Α͏ʹ͖͢• ࣄલ༧ଌతͰͳ͘ԠతʹΞΫηεมԽͱϦιʔεׂΛҰகͤ͞Δ• ίϯςφ͕ϦΞΫςΟϒʹঢ়ଶΛม͑ΒΕΔΑ͏ʹ͢Δඞཁ͕͋Δ※1˞3ZPTVLF.BUTVNPUP 6DIJP,POEP ,FOUBSP,VSJCBZBTIJ 'BTU$POUBJOFS")PNFPTUBUJD4ZTUFN"SDIJUFDUVSF)JHITQFFE"EBQUJOH&YFDVUJPO&OWJSPONFOU$IBOHFT 5IFSE"OOVBM*&&&*OUFSOBUJPOBM$PNQVUFST 4PGUXBSF BOE"QQMJDBUJPOT$POGFSFODF $0.14"$ +VMZ
19ಁաੑͱίϯςφͷϦΞΫςΟϒੑͷॏཁ͞• ݸମతʹߴʹࢄͨ͠σʔληϯλʔΛލ͍ͩ༗ػతͳ࿈ܞ• ֤छίϯςφϥϯλΠϜΛϓϩηεεϨουͱݟཱͯΔ• ίϯςφؒͷ࿈ܞαʔόσʔληϯλʔؒΛߴʹҠಈ• ঢ়ଶͷมԽʢఀࢭɾىಈΛؚΉʣΛՄೳͳݶΓ͘ಈ࡞ͤ͞Δඞཁੑ• ͋Δ͍ɺར༻ऀ͕ঢ়گʹԠͯ͡ඞཁͳϓϩηεεϨουΛબͰ͖Δ• ैདྷͷOS্ͰΞϓϦέʔγϣϯΛ࣮͢Δࡍͷ͍ํΛ౿ऻ
20dockerdΛܦ༝֤ͨ͠छίϯςφϥϯλΠϜ※1time sudo docker run --rm mizzy/hello:latest /hellotime sudo docker run --rm --runtime=runsc mizzy/hello:latest /hellotime sudo docker run --rm --runtime=kata-runtime mizzy/hello:latest /hellotime sudo docker run --rm --runtime=runnc mizzy/hello:latest /hello.nablatime sudo docker run --rm --runtime=kata-fc mizzy/hello:latest /hello˞দຊ྄հ ௶༎थ ٶԼ߶ี ࢄܕσʔληϯλʔ04Λࢦͨ͠ϦΞΫςΟϒੑΛ࣋ͭίϯςφ࣮ߦج൫ٕज़ ใॲཧֶձݚڀใࠂΠϯλʔωοτͱӡ༻ٕज़ʢ*05ʣ /P*05 7PM QQ ݄
21dockerdΛܦ༝࣮ͨ͠ߦdockerddocker-containerdOCIrunCPodͱίϯςφ܈docker
ϝοηʔδηΩϡϦςΟ ࣮ྫhelloworldੑೳ(Pod+ίϯςφىಈ)ऩ༰ޮ(1ίϯςφ͋ͨΓͷϝϞϦͷϑοτϓϦϯτ)ϓϩηεܕ ωʔϜεϖʔεͷִ runC 0.847 sdocker: 50356 KBcontainerd-shim: 6124 KB߹ܭ 56 MBαϯυϘοΫεܕϢʔβϥϯυΧʔωϧγεςϜίʔϧΞΫηε੍ޚgVisor(runsc) 1.034 sdocker: 50532 KBcintainerd-shim: 5812 KBrunsc-gopher: 12296 KBrunsc-sandbox: 18124 KB߹ܭ 85 MBϢχΧʔωϧܕϢχΧʔωϧ(ઐ༻appΠϝʔδͱ࠷ݶͷγεςϜίʔϧ੍ݶ)Nabla-Containers(runnc) 0.897 sdocker: 50720 KBcontainerd-shim: 5512 KBnabla-run: 6684 KB߹ܭ 62 MBmicroVMܕmicroVM(virtio-net,virtio-blockɼserial console, a 1-buttonkey-board controller)Firecracker(devmapper snapshotter)(Kata plugin)3.889 sdocker: 1170808 KBdocker-containerd-shim: 9960 KBkata-shim: 455664 KBfirecracker: 145952 KB߹ܭ 1700 MBVMܕ VM Kata-Containers 2.415 sdocker: 51056 KBcontainerd-shim: 6060 KBqemu-lite-system-x86_64: 227316 KBkata-proxy: 6132 KBkata-shim: 19536 KB߹ܭ 310 MB݄࣌
23Pod͓Αͼίϯςφͷىಈ࣌ؒͱAppੑೳ• VMMicroVMΞϓϩʔνPodىಈʹ͕͔͔࣌ؒΔ• Pod͕ىಈͯ͠͠·͑AppͷΞΫηε੍ޚݫີͰͳ͍• ίϯςφ্ͷWebAppൺֱతੑೳ͕ߴ͘ͳΔ• αϯυϘοΫϢχΧʔωϧͷΞϓϩʔνPodىಈ͍• AppͷγεςϜίʔϧϑΝΠϧΞΫηεΛࢹ͠ݫີʹΞΫηε੍ޚ• ίϯςφ্ͷWebAppݪཧతʹੑೳ͕͘ͳΔ
24ݸମܕDC/OSͷϓϩηε/εϨουʹؔ͢Δݚڀࣾձʹ༹͚ࠐΜͩϗετΤοδͷίϯϐϡʔςΟϯά܈ϓϩηεཧػߏࣾձʹ༹͚ࠐΜͩϗετΤοδͷίϯϐϡʔςΟϯά܈ࣾձʹ༹͚ࠐΜͩϗετΤοδͷίϯϐϡʔςΟϯά܈ϓϩηεεϨουϓϩηε ϓϩηεεϨουεϨουɾར༻ऀͷ༻్ʹԠͯ͡ΞϓϦέʔγϣϯΛࣗ༝ʹϓϩηεܕεϨουܕɺߋʹܰྔϓϩηεܕͰ࣮ߦͰ͖ΔɾϓϩηεεϨουΛϦΞΫςΟϒʹεέδϡʔϦϯά࣮ͯ͠ߦසͷมԽͱϦιʔε༻ྔͷมԽΛ͚ۙͮΔɾϓϩηεεϨουίϯϐϡʔςΟϯάར༻ऀͷঢ়گʹԠͯ͡ಁաతʹεέδϡʔϦϯάΛߦ͏ϓϩηεɺྫ͑Pod͕VMͰִ͞Εͨίϯςφ܈ͱఆٛεϨουɺྫ͑PodϢʔβʔϥϯυΧʔωϧͰִ͞Εͨίϯςφ܈ͱఆٛܰྔϓϩηεܰྔϓϩηεɺྫ͑Pod͕࠷ݶͷVMͷԾԽػೳͷΈͰִ͞Εͨίϯςφ܈ͱఆٛεέδϡʔϥʔݸମܕσʔληϯλʔOS
25ݸମܕσʔληϯλʔʹ͓͚Δίϯςφ• ඞཁͳͱ͖ཁ݅ʹ߹ΘͤͯదͳίϯςφϥϯλΠϜΛબతʹىಈ• OSʹ͓͚ΔϓϩηεεϨουͷ͍ํͱಉ༷• ίϯςφىಈͱىಈޙͷΞϓϦέʔγϣϯͷτϨʔυΦϑΛٞ• ىಈͱىಈޙͷੑೳͷόϥϯεΛऔΔίϯςφϥϯλΠϜͷ༗Γํ• ֎తͳΞΫηε༧ଌͰ͖ͳ͍มԽʹϦΞΫςΟϒʹରԠͤ͞Δ• ϓϩηεεϨουؒͷ࿈ܞʹ͓͍ͯϗετಁաతʹॲཧ͢Δ• ߴʹίϯςφͷঢ়ଶΛมԽͤͨ͞ΓҠಈ͢Δݚڀ͕ඞཁ[1][1] দຊ྄հɾ௶༎थɾٶԼ߶ี, CRIUΛར༻ͨ͠HTTPϦΫΤετ୯ҐͰίϯςφΛ࠶ஔͰ͖ΔίετͰߴͳεέδϡʔϦϯάख๏, IOT44, 20193݄.
·ͱΊ
27ݸମܕDC/OSʹ͓͚Δίϯςφج൫• ݸମܕσʔληϯλʔͷίϯηϓτΛհ• σʔληϯλʔػೳ͕ࣾձʹ༹͚ࠐΈͳ͕ΒΫϥυͷϚγϯύϫʔΛ׆༻• ۩ମతͳϏδϣϯΛհ• ར༻ऀͷ༻్ʹԠͨ͡બతͳίϯςφϥϯλΠϜ࣮ߦج൫ͷߏ• ϦΞΫςΟϒੑ͕ཁٻ͞ΕΔέʔεͰϢʔβϥϯυΧʔωϧܕ• ىಈޙͷΞϓϦͷੑೳ͕ཁٻ͞ΕΔέʔεͰVMִܕ• ίϯςφVMΛεϨουϓϩηεͷΑ͏ʹಁաతʹ࣮ߦ͢Δج൫
28ࠓޙͷ՝ͱݕ౼• OCIϥϯλΠϜͷྨʹ͓͍ͯߋʹݚڀ։ൃ• Podͱίϯςφ͕ΑΓ͘ىಈ͠ΞϓϦέʔγϣϯΛॲཧͰ͖Δݚڀ• ूੵɾੑೳɾηΩϡϦςΟɾ͍͢͞ͷόϥϯεΛ͞Βʹݕ౼͢Δ• ߴʹࢄ͞ΕͨίϯςφͷใΛཧ͢ΔΈͷઃܭͱ࣮• ϦΞΫςΟϒͷจ຺ͰߴʹϦιʔεใΛऔಘɾ੍ޚͰ͖Δٕज़• Ϧιʔεใʹج͍ͮͨྔࢠίϯϐϡʔςΟϯάʹΑΔ࠷దԽͷղܾ• ͋ͷͭΔʔ @tsurubee3 ͞Μ͕औΓΜͰ͍Δݚڀˢ
29ݸମܕDC/OSͷࢄܕϦιʔεཧʹؔ͢Δݚڀࣾձʹ༹͚ࠐΜͩϗετΤοδͷίϯϐϡʔςΟϯά܈ࣾձʹ༹͚ࠐΜͩϗετΤοδͷίϯϐϡʔςΟϯά܈ࣾձʹ༹͚ࠐΜͩϗετΤοδͷίϯϐϡʔςΟϯά܈ϓϩηε εϨου ϓϩηεɾͲͷϗετΤοδʹϓϩηεεϨου͕ىಈɾఀࢭɾҠಈ͞ΕͯϦιʔεཧͰ͖ΔࢄϦιʔεཧγεςϜɾίϯηϯαεΞϧΰϦζϜͷҰ෦ػೳΛར༻ͨ͠ϝϯόʔγοϓཧͱ໋ྩͷฒྻԽʹΑͬͯϦιʔεΛ੍ޚɾཧऀ͕ݸମͷঢ়ଶʹ߹Θͤͯπʔϧ࣮ߦ͢ΔͷͰͳ͘πʔϧ࣮ߦʹݸମ͕ਖ਼͘͠Ԡͯ͑͠Λࣔܰ͢ྔϓϩηεϦιʔεঢ়گͷऔಘϦιʔεͷ੍ޚϝϯόʔγοϓཧʴ໋ྩฒྻԽཧऀͷπʔϧϦιʔεͷ੍ޚϦιʔεঢ়گͷऔಘϓϩηεཧػߏϝϯόʔγοϓཧʴ໋ྩฒྻԽ