Wantedly の文化を支えるインフラとビジネスの変化に強いインフラ / #jtf2016

Wantedly の文化を支えるインフラとビジネスの変化に強いインフラ / #jtf2016

July Tech Fest 2016 @産業技術大学院大学
これまで Wantedly が取り組んできたインフラの改善とそこに至る文化についてお話しました。

Bc1e4b3a33fe6718f50285d1c1f53feb?s=128

Kodai Sakabe

July 24, 2016
Tweet

Transcript

  1. ,PEBJ4BLBCF!LPVEBJJJ8BOUFEMZ *OD จԽΛࢧ͑ΔΠϯϑϥͱϏδωεͷมԽʹڧ͍Πϯϑϥ +VMZ5FDI'FTU

  2. ABOUT ME — Software Engineer — 2010/4- TIS KOUDAI SAKABE

    2015/8- Wantedly @koudaiii Site: http://koudaiii.com
  3. WANTEDLY — γΰτͰίίϩΦυϧͻͱΛ;΍͢—

  4. None
  5. 3 @

  6. Wantedly Open API ͸ͨΒ͘Λ໘ന͘ʯΛςʔϚʹ͜Ε·ͰαʔϏε։ൃΛల։͖ͯͨ͠ 8BOUFEMZ͕ͦͷՁ஋Λ8BOUFEMZDPNυϝΠϯҎ֎ʹ΋޿͍͖͛ͯ·͢ɻ ੈͷதͷҰਓͰ΋ଟ͘ͷਓ͕ɺ͸ͨΒ͘Λ໘ന͘ʯײ͡ΒΕΔੈͷதʹͳΓ·͢Α͏ʹɻ Ͱ͖Δ͜ͱ ࣗಈೖྗ ΫοΫύουגࣜձࣾ ΫοΫύουגࣜձࣾ

    5݄13೔ʹฐࣾΦϑΟε಺ͷεϖʔεʹͯʮʲୈ17ճʳpotatotips(iOS/Android։ൃTips ڞ༗ձ)ʯ http://connpass.com/event/14143/ Λ։࠵͠·ͨ͠ʂ 18໊ͷൃදऀ͕5෼ؒͷLTʢϥΠτχϯάτʔΫɿΧϯϑΝϨϯεͳͲͰߦΘΕΔ୹͍ ΋ͬͱݟΔ ஑ా୓࢘ ϢʔβʔϑΝʔετਪਐ෦෦௕   ਓ͕ϑΥϩʔத  ਓ͕ϑΥϩʔத ϑΥϩʔ͢Δ ձࣾϑΟʔυϘοΫε ࿩Λฉ͖ʹߦ͘Ϙλϯ ϑΥʔϜࣗಈೖྗϘλϯ Wantedly্ʹ͋ΔʮձࣾϑΟʔυʯ Λɺϒϩά΍ίʔϙϨʔταΠτͳ Ͳɺ޷͖ͳϖʔδʹ؆୯ʹຒΊࠐΉ͜ ͱ͕Ͱ͖·͢ɻखܰͳ࠾༻ϒϥϯσΟ ϯά΍৘ใൃ৴ʹར༻Ͱ͖·͢ɻ ৄ͘͠ ৄ͘͠ ৄ͘͠ ࣗࣾαΠτ౳ͷืूཁ߲ʹɺʮ࿩Λฉ ͖ʹߦ͖͍ͨʯϘλϯΛઃஔ͠ɺ Wantedly্ͷʮ༡ͼʹ͍͘ମݧʯΛࣗ ࣾαΠτͰ΋ల։Ͱ͖·͢ɻ ࠾༻؅ཧγεςϜఏڙاۀ༷౳΁ͷಛ ผఏڙAPIͰ͢ɻީิऀ͕ืूʹΤϯ τϦ͢ΔࡍʹɺWantedly্ͷϓϩϑΟ ʔϧ৘ใΛ׆༻ͯ͠ΤϯτϦ͕Մೳʹ ͳΓ·͢ɻ
  7. WANTEDLY JOURNAL ͸ͨΒ͘Λ໘ന͘͢ΔϝσΟΞ γΰτͰίίϩΦυϧͬͯͳΜͩΖ͏ʁ 8BOUFMEZ͸ɺγΰτͰίίϩΦυϧਓΛ;΍͍ͨ͠ͱߟ͍͑ͯ·͢ɻ Ͱ͸ɺzγΰτͰίίϩΦυϧzͱ͸Ͳ͏͍͏ঢ়ଶͳͷͰ͠ΐ͏ʁ ͓٬͞Μʹʮ͋Γ͕ͱ͏ʯͱݴΘΕͨͱ͖ ໨ඪͷച্Λୡ੒ͨ͠ͱ͖ νʔϜϝϯόʔͷসإΛݟͨͱ͖ʜ ͦΕ͸ɺਓʹΑͬͯҧ͏Ͱ͠ΐ͏͠ɺ

    ࣌୅΍ࠃʹΑͬͯ΋·ͬͨ͘ҟͳΔͰ͠ΐ͏ɻ ࠓճϦϦʔε͢Δʮ8"/5&%-:+063/"-ʯͰ͸ɺ 8BOUFEMZΛ௨ͯ͠స৬ͨ͠ํ΍ɺීஈ͋·Γݟͨ͜ͱ͕ͳ͍اۀ΁ͷ ΠϯλϏϡʔΛ௨ͯ͠ɺzγΰτͰίίϩΦυϧzͱ͸Կͳͷ͔Λ୳ٻ͠·͢ɻ γΰτΛ୳͍ͯ͠Δਓ΋ɺͦ͏Ͱͳ͍ਓʹͱͬͯ΋ɺ ʮ8"/5&%-:+063/"-ʯ͕ಇ͖ํͷώϯτʹͳΕ͹޾͍Ͱ͢ɻ
  8. ੈքʹࣗ෼ͷ੠Λൃ৴͠Α͏

  9. None
  10. จԽΛࢧ͑ΔΠϯϑϥϏδωεͷมԽʹڧ͍Πϯϑϥ 40'5 จԽ΍େࣄʹ͍ͯ͠Δ͜ͱ )"3% %FQMPZͷ࢓૊Έ΍4DBMBCMFͳ؀ڥ

  11. 8BOUFEMZ7BMVF จԽΛࢧ͑ΔΠϯϑϥ 40'5

  12. 8BOUFEMZ7BMVF w 0XOFSTIJQ w -FBEFSTIJQ w 8BOUFEMZ8BZ

  13. ίοϓʹਫΛஷΊΑ͏ w ۭͷίοϓ͕ͻͱͭ͋ͬͨͱͯ͠ɺԿ͔ʹࣦഊ͠ɺ1%$"αΠΫϧΛҰ౓ ճ͢ͱɺࣦഊ͔ΒֶΜͩ෼ίοϓʹਫ͕ཷ·͍ͬͯ͘ w ࠷ऴతʹਫ͕͋;ΕΔ͕࣌੒ޭ w ͦͷਓͷ࢟੎ͰਫͷೖΓ۩߹͸มΘΔ w ҙࢥܾఆ΍ܦݧ஋͕ߴ·Δͱɺίοϓ΋େ͖͘ͳΔ͠ɺਫͷྔ΋มΘΔ

    w ୭΋͕0XOFSTIJQͱ-FBEFSTIJQΛൃش͍ͯ͜͠͏ͱ͢ΔจԽ 0XOFSTIJQ -FBEFSTIJQ
  14. 8BOUFEMZ8BZ 6TFS'JSTU$PEF8JOT"SHVNFOUT4JNQMFJT/PU&BTZ

  15. 6TFS'JSTU w ʮ΋ͬͱ଎͍അं͕΄͍͠ʯͱ͍͏Ϣʔβͷ੠Λฉ͖ଓ͚ΔͷͰ͸ͳ͘ɺ ʮ଎͘Ҡಈ͍ͨ͠ʯͱ͍͏Ϣʔβͷຊ࣭తͳཉٻʹԠ͑Δߦҝ w ʮݴ༿ߦಈʯ w ϢʔβʔςετͰਓؒҧ͑ΔΑ͏ͩͬͨΓ·͍ͭͨ͝Γͨ͠Βվળ ͯ͠ɺ΋͏Ұճࢼͯ͠΋Βͬͯҧ͏ਓʹ΋ࢼͯ͠΋Β͏

  16. $PEF8JOT"SHVNFOUT w νʔϜͰ࣌ؒ.5(͢ΔͳΒDPEFΛॻ͍ͯݕূ͠Α͏ w ΤϯδχΞͷ৔߹ w ݶΒΕͨ৘ใͰܾஅΛͯ͠ɺલʹਐΜͰ͍Δ͔ w ԾઆΛ͋Ε͜Εߟ͑ΔΑΓɺ·ͣϓϩτλΠϓΛ࡞ͬͯૣֶ͘श͍ͯ͠Δ͔ w

    Ӧۀͷ৔߹ w ࣗ෼Ͱྑ͍ػೳ͕ු͔Μ͔ͩΒΤϯδχΞʹཔΉͷͰ͸ͳ͘ w اըॻΛॻ͍ͯձࣾΛճͬͯɺࣾఔ౓Λ֬໿ͯ͠ɺ͜ΕͳΒߦ͚ΔͱࢥͬͨΒΤϯδχΞʹཔΉ͜ͱ ͕ग़དྷΔ͔
  17. 4JNQMFJT/PU&BTZ w ࡞Δଆ͕࢖͏ଆͷࣄΛపఈతʹߟ͑ൈ͍͍ͯΔ͔ w ଍͢ΑΓ΋Ҿ͍ͯϑΥʔΧεΛ͍ͯ͠Δ͔ w ޮՌ͕ߴ͍ࢪࡦ ޮՌ͕௿͍ͱͦͷֻ͚ͨ޻਺෼Ͱ΋ͬͱ༗ޮͳվળ͸ͳ ͔ͬͨʁ 

    w ԾઆΛͨͯͯɺͦͷԾઆͷίΞͱͳΔ෦෼͚ͩʹϑΥʔΧεͰ͖͍ͯΔ͔
  18. αʔϏεͷ֦େͱ৽نαʔϏε

  19. )FSPLV"84 %PDLFSJO1SPEVDUJPO ࣾһ਺ʢ๮άϥϑʣͱച্ʢંΕઢάϥϑʣ KPJO

  20. -BVODI/FX d WANTEDLY JOURNAL ͸ͨΒ͘Λ໘ന͘͢ΔϝσΟΞ ੈքʹࣗ෼ͷ੠Λൃ৴͠Α͏

  21. *OGSBTUSVDUVSF ϏδωεͷมԽʹڧ͍Πϯϑϥ )"3%

  22. ೥݄೔ΑΓ)FSPLV͔Β"84΁

  23. 9BBTͱ"84ͷ྆ํΛ࢖͏ w ར༻Ͱ͖Δ΋ͷ͸ͲΜͲΜར༻͢Δ w εϐʔυײ w ίετײ w ؀ڥͷબ୒ CVJMEQBDLͩͱ΍Γʹ͍͘

     w ωοτϫʔΫ w )FSPLV΍3FEJT΍'JSFCBTFͱ"84૊Έ߹Θͤ
  24. #PUUMFOFDL ΤϯδχΞͷ૿ՃɺαʔϏεͷ૿Ճ Developer ΠϯϑϥνʔϜ λεΫґཔ WANTEDLY JOURNAL ͸ͨΒ͘Λ໘ന͘͢ΔϝσΟΞ ੈքʹࣗ෼ͷ੠Λൃ৴͠Α͏

  25. 1SPCMFN w ґཔλεΫ͕૿Ճ w ৽ͨͳαʔϏεͷϩʔϯν w αʔϏε͕ҭͪ%FQMPZ͕࣌ؒ௕͘ͳΔ w ೔ʑ௥ΘΕΔ࢓ࣄ͹͔Γ

  26. Ͳ͏ղܾ͢Δ͔ʁ w $PEF8JOT"SHVNFOUTΛՄೳʹ͢ΔΠϯϑϥ w طଘ৽نΞϓϦͰ͙͢ʹσϓϩΠͰ͖ΔมԽʹڧ͍Πϯϑϥ w มԽΛආ͚ΔΠϯϑϥͰ͸ͳ͘ɺΉ͠ΖมߋΛલఏͱͨ͠Πϯϑϥ w ٞ࿦΍ݖྗͰ͸ͳ͘ɺ·ͣग़ͯ͠Έͯ݁ՌΛݟΔจԽΛՄೳʹ͢Δ

  27. ࣗಈԽͱ5PPM "1* w ΠϯϑϥΛૢ࡞͢Δ5PPMࣾ಺Ͱศརͳ$-*(6* Developer ΠϯϑϥνʔϜ API and Tool WANTEDLY

    JOURNAL ͸ͨΒ͘Λ໘ന͘͢ΔϝσΟΞ ੈքʹࣗ෼ͷ੠Λൃ৴͠Α͏
  28. ͜Ε·ͰͷऔΓ૊Έ w $BQJTUSBOP w %PDLFS$IFG1BDLFS w ೋஈ֊ϏϧυʹΑΔEFQMPZߴ଎ԽCMVFHSFFOEFQMPZNFOU w 5FSSBGPSN w

    $PSF04 w TBQEFQMPZTFSWFS w DFMM
  29. IFSPLVίϚϯυͷΑ͏ͳৼΔ෣͍ w "84΁Ҡߦͨ࣌͠ʹ%FWFMPQFSʹӨڹͰΔͷ͸ɺ͜Ε·Ͱͷӡ༻ͷมԽ w ࠩҟΛݮΒͤΔΑ͏ʹDBQJTUSBOPͰ%PDLFS΍"84΍%BUBEPH౳Λѻ͑Δʹͨ͠ w IFSPLVDPNNBOEͰΑ͘ར༻͢ΔίϚϯυΛ࣮ݱ $ cap -T

    cap config # Display the config vars for an app cap deploy[revision] # Deploy an application cap deploy:diff[ref] # Display diff deployed revision and the revision to cap deploy:rollback # Rollback application cap logs:t[container_name] # Display stream logs for an container cap maintenance:on # Enable maintenance mode cap ps # Display web, worker, scheduler, run type containers cap ps:scale[role,num] # Scale out/in containers cap ps:restart:web[color,chained_task?] # Start web containers cap releases # Display deploy history cap run[command] # Run on-off commands cap scheduler # Display scheduling cap scheduler:clear # Clear scheduler config cap scheduler:update # Update scheduler cap status # Show application status
  30. $ heroku -h Usage: heroku COMMAND [--app APP] [command-specific-options] Primary

    help topics, type "heroku help TOPIC" for more details: addons # manage add-on resources apps # manage apps (create, destroy) auth # authentication (login, logout) config # manage app config vars domains # manage domains logs # display logs for an app ps # manage dynos (dynos, workers) releases # manage app releases run # run one-off commands (console, rake) IFSPLVI
  31. %PDLFS$IFG1BDLFS w %PDLFSJNBHFͷதʹ$IFGΛ࢖ͬͯΠϯϑϥΛߏங w 1BDLFSͰ"84ͷJOTUBODFͷ".*Λ࡞Δ w #BTFͱͳΔUFNQMBUFΛ༻ҙͯ͠ɺ৽͍͠αʔϏε͕ग़͖ͯͯ΋ྲྀ༻Ͱ ͖ΔΑ͏ʹͨ͠ w ΞϓϦέʔγϣϯͷߏங෦෼͕$PEFԽ͞ΕΔ$IFG1BDLFS͸Πϯ

    ϑϥνʔϜͷ࡞ۀʹͳΓɺεέʔϧ͠ͳ͍ͨΊࠓ͸%PDLFSͷΈ
  32. ೋஈ֊ϏϧυʹΑΔ%FQMPZߴ଎Խ w ఆظతʹ$IFG1BDLFSΛ࢖͍ɺ%PDLFSΠϝʔδΛ࡞੒͠ɺ4΁ Ξοϓϩʔυ w %FQMPZ͢Δͱ͖͸Ξοϓϩʔυͨ͠4ͷΠϝʔδΛݩʹϏϧυ͢Δ w ͦͷࡍ͸ɺ%PDLFSͷJNBHFDBDIFΛ࢖ͬͯϏϧυ͕ߦΘΕΔͷͰૣ ͍

  33. %FQMPZqPX ϏϧυαʔόʹࢦఆϒϥϯνΛ(JU)VC͔Βऔಘ ϏϧυαʔόͰ༧Ί࡞੒͞ΕͨΠϝʔδΛݩʹ%PDLFSΠϝʔδΛ࠶Ϗϧυ ϓϥΠϕʔτ%PDLFSϨδετϦ 4 ΁Ξοϓϩʔυ ຊ൪αʔό܊ʹ࠷৽ͷ%PDLFSΠϝʔδΛμ΢ϯϩʔυ ຊ൪αʔό܈Ͱ৽͍͠ίϯςφΛىಈ͠ɺIFBMUIDIFDLΛ௨Δ ݹ͍΋ͷͱೖΕସ͑

  34. #MVF(SFFO%FQMPZNFOU w IFBMUIDIFDLͰϨεϙϯεΛฦͨ͠Β੾Γସ͑Δ UBHT OBNFBQQ BQQSBJMT DPMPSHSFFO UBHT OBNFBQQ BQQSBJMT

    DPMPSCMVF DBQEFQMPZTXJUDI@DPMPSCMVF QPSU QPSU
  35. 5FSSBGPSN  w "84 43%4&-#FUD EOTJNQMFΛૢ࡞ IUUQTTQFBLFSEFDLDPNEUBOUFSSBGPSNBUXBOUFEMZUFDIDJSDMFOVNCFS

  36. $PSF04 w 6CVOUVΛར༻͍ͯͨ࣌͠ɺ%PDLFS΍3FHJTUSZͷWFSTJPOVQ͕େม w $PSF04͸0⒏DJBMʹBNJ͕༻ҙ͞Ε͍ͯΔ఺ɺCMVFHSFFOʹΑΔ 04WFSTJPOVQ͕ັྗతͰࢼݧӡ༻͍ͯͨ͠ w TZTUFNE΍)PTU্Ͱ࡞ۀΛߦ͍೉͍౳ɺ࢖ͬͯΈͯ৽ͨͳར఺ w 6CVOUV$PSF04΁Ҡߦ

    
  37. TBQ%FQMPZ4FSWFS w ඞཁͳ༷ʑͳ伴΍؀ڥม਺ΛݸਓͰઃఆ͠ͳͯ͘Α͍ w %FQMPZํ๏͕มΘΔΑ͏ͳΠϯϑϥͷߏ੒มߋ࣌ʹ΋ɺ֤ΤϯδχΞ͸खݩͷΞοϓσʔτΛ͢Δඞཁ͕ͳ͍ w %FQMPZ࣌ͷ֤ݸਓͷ࡞ۀ͕ίϯςφͷϩάͱͯ͠࢒Δ IUUQEFWDMBTTNFUIPEKQEFWPQTEFWPQTXBOUFEMZ TBQRBQT %FQMPZ4FSWFS

    TBQTZODEFQMPZ DBQTZODEFQMPZ TBQQSPESVOSBJMTD
  38. DFMM w "845"(ΛݩʹTZTUFNEʹαʔϏεΛొ࿥ w "VUP4FSWJDFJO w "EE%FMFUF%/43FDPSE

  39. "84ͷ5"(ͱ"VUP4DBMF(SPVQ w ͢΂ͯͷ5PPMʹΑΔJOTUBODFͷಛఆ͸ɺ"84ͷ5"(Λ࢖ͬͯΔ w Կ୆ಈ͔͍͔ͨ͠ʁ"4(ʹ͢΂ͯఆٛ w ඞཁͳΠϯϑϥπʔϧ͸"4(ͷVTFSEBUBʹఆٛ w JOTUBODF্ཱ͕͕ͪΔͱ౰࣌ʹࣗ෼ͷ5"(Λ؍ͯɺඞཁͳTFSWJDF ΛTZTUFNEʹొ࿥

  40. ͞ΒͳΔ՝୊

  41. .POPMJUIJD"SDIJUFDUVSF • αʔϏεͷ֦େͱಉ࣌ʹίʔυ΋ංେԽ • Deploy ߴ଎ԽΛߦͬͯ΋ͲΜͲΜ Deploy ͕࣌ؒ௕͘ͳΔ • ϛυϧ΢ΣΞɺϥΠϒϥϦͷόʔδϣϯґଘؔ܎

    • ίʔυґଘؔ܎΍Өڹൣғ͕େ͖͘ͳͬͨ
  42. 1SPCMFN w αʔϏεͷ෼ׂ΍৽نαʔϏεΛग़͢৔ ߹ɺΠϯϑϥνʔϜͷ΍Δ͜ͱ͕ଟ͍ w Πϯϑϥͷ҆ఆԽʹΑΓෳࡶԽ w ಉ͡Α͏ͳ࡞ۀ΋ଟ͍ Web Application

    Monitoring Logging Auto Scale Load Balancer Internal DNS
  43. ,VCFSOFUFT $MVTUFSJOHෳ਺ͷJOTUBODF͔Βେ͖͞ϦιʔεΛ࣮ݱ

  44. ΫϥελϦϯάͰԿ͕ग़དྷΔ w "QQMJDBUJPOΛಈ͔ͤΔΠϯϑϥΛ͙͢࡞ͬͯ͘ΕͱݴΘΕͨ࣌ʹ࡞ΕΔ w JOTUBODFΛ૿΍͚ͩ͢ͰίϯςφΛԿ୆෼ಈ͔ͯ͠΋ߏΘͳ͍ w ճݶΓͷ͙͢ऴΘΔλεΫͰ΋ྑ͍ w Τϥʔ͕͋ͬͨͱͯ͠΋ɺผͷͱ͜ΖͰ૸Βͤ௚ͤΔ w

    Ұͭͷେ͖ͳϦιʔεͱͯ͠ಈͨ͘Ίɺࠓ·Ͱߦ͖͍ͬͯͯͨ.POJUPSJOH༻ʹίϯ ςφΛઃఆͯ͠ɺ࣍͸"4(༻ʹϚγϯΛཱͯͯɺ࣍͸Έ͍ͨͷΑ͏ͳΠϯϑϥ࡞ ۀ͜ͱ͕ͳ͍ ʮԿ͕ԿॲͰಈ͍͍ͯΔ͔Λҙ͍ࣝͯ͠ͳ͚Ε͹ͳΒͳ͍ੈքʯ͔ΒʮԿ͕ಈ͍͍ͯΔ͔͚ͩҙ͍ࣝͯ͠Ε͹ྑ͍ੈքʯ
  45. ,VCFSOFUFT w IUUQCMPHSBJOUPXOPSHMPHHJOHLVCFSOFUFTQPETVTJOHqVFOUEIUNM w /PEFJOTUBODF w ෳ਺ͷJOTUBODFΛҰͭϦιʔε w -PHHJOH΍.POJUPSJOHͷΑ͏ͳ ֤/PEFʹ഑ஔ͍ͨ͠΋ͷ΋"1*

    Λ௨࣮ͯ͡ݱ w %FWFMPQFS͸ඞཁͳ4QFDΛఆٛ ͠ɺ"1*Λݺͼग़͢
  46. .POJUPSJOHCZ%BUBEPH %BFNPO4FU ֤/PEFʹରͯ͠഑ஔ͢Δ  $MVTUFSʹରͯ͠Ұ౓NBOJGFTUpMFΛૹΕ͹ͦͷ$MVTUFS͢΂ͯͷ.POJUPSJOH͕ग़དྷΔ

  47. %BTICPBSE TDPQFQPESDSDOBNFTQBDFͰߜΓࠐΈ"MFSUઃఆ

  48. Πϯϑϥͱσϕϩούʔͷ؀ڥ෼ׂ ʮԿ͕ԿॲͰಈ͍͍ͯΔ͔Λҙ͍ࣝͯ͠ͳ͚Ε͹ͳΒͳ͍ੈքʯ͔ΒʮԿ͕ಈ͍͍ͯΔ͔͚ͩҙ͍ࣝͯ͠Ε͹ྑ͍ੈքʯ Web Application Monitoring Logging Auto Scale Load Balancer

    Internal DNS Web Application Monitoring Logging Auto Scale Load Balancer Internal DNS Web Application Monitoring Logging Auto Scale Load Balancer Internal DNS Monitoring Logging Auto Scale Load Balancer Internal DNS ΠϯϑϥνʔϜ ΠϯϑϥνʔϜ ΠϯϑϥνʔϜ ΠϯϑϥνʔϜ
  49. NEXT — API Gateway and API generate —

  50. ,POH"SDIJUFDUVSF w ,POH$MVTUFSJOH w QMVHJO w 0"VUI w "$- w

    *13FTUSJDUJPO w 3BUF-JNJU w 3FRVFTU4J[FMJNJU w 3FTQPOTFMBUFMJNJU
  51. "1*(FOFSBUF w (JU)VCXBOUFEMZBQJH w (PMBOH3&45GVM"1*4FSWFS (FOFSBUPS w 6TJOHHPSN

  52. ຊؾͰϚΠΫϩαʔϏεΛߏஙӡ༻͍ͨ͠ਓ8BOUFE IUUQTXXXXBOUFEMZDPNQSPKFDUT