ͯͳʹ͓͚Δϓϩάϥϛϯάݴޠͷྺ࢙ͱ͜Ε͔Βid:hakobe932
View Slide
ࣗݾհ෬Ҫ ༸ฏ id:hakobe932@hakobeνʔϑΤϯδχΞ ΞϓϦέʔγϣϯΤϯδχΞ
ͯͳϒϩάͯͳϒοΫϚʔΫ.BDLFSFMͯͳμΠΞϦʔ ͯͳΩʔϫʔυ#,6."ͯͳελʔਓྗݕࡧͯͳͯͳϑΥτϥΠϑ ͏͝ϝϞͯͳͯͳίίϓϥοτϑΥʔϜ
ͯͳͷϓϩάϥϛϯάݴޠͱ͍͑?1FSM͔ͳ
࣮ࡍͷͯͳͰͷ࠾༻ݴޠ
ࠓͷΞδΣϯμ❖ͯͳͷϓϩάϥϛϯάݴޠ࠾༻ͷྺ࢙• ֤ݴޠͷ࠾༻ͷܦҢͱධՁ❖ϓϩάϥϛϯάݴޠબʹ͍ͭͯͷߟ͑ํ• બͷํͱ࠾༻ϓϩηε
ͯͳͷϓϩάϥϛϯάݴޠ࠾༻ͷྺ࢙
ࠓ αʔόαΠυͷ࣮ݴޠͷΛ͠·͢ϑϩϯτΤϯυͷ͋ͱͰฉ͍͍ͯͩ͘͞ʂ
࠾༻ද• 2001 ۀͱಉ࣌ʹPerlΛ࠾༻• 2013 Mackerelͷ։ൃͰScalaͱGoΛ࠾༻• 2015 ࠂؔ࿈ϓϩμΫτͰPythonΛ࠾༻ʙ 12ͷ͕࣌ྲྀΕΔ
1FSM
Perl❖Web։ൃͷᴈ໌ظΛࢧ͑ͨεΫϦϓτݴޠ❖ຊͷίϛϡχςΟ͕׆ൃ• YAPC::AsiaͳͲͷઆతΠϕϯτੜ·Εͨ❖όʔδϣϯΞοϓܧଓͯ͠Δ❖ISUCON্ҐৗʹPerlͩͬͨ࣌
ͯͳʹ͓͚ΔPerl❖2001ʙ❖࠾༻αʔϏε• ͯͳϒϩά• δϟϯϓ+ϚϯΨܥ/ΧΫϤϜ• ͯͳϒοΫϚʔΫ(BFFͱͯ͠)• ଞ΄ͱΜͲͯ͢ͷαʔϏε❖جຊతʹಠࣗϑϨʔϜϫʔΫΛͬͯ։ൃ
Perl ࠾༻ͷ͖͔͚ͬ❖͡Ίʹͬͨͷ͕Perlͩͬͨ• ࣌ͷWeb։ൃݴޠͱ͍͕ͯ͋ͬͨ͠• ߴʹࢼߦࡨޡ͠ͳ͕Β͑Δݴޠͱͯ͠ બΕͨ❖ͯͳPerlίϛϡχςΟͷதͰҭͯͯΒͬͨ
ͯͳΤϯδχΞͷݪ͚ͩͲ…❖ڞ௨Ϟδϡʔϧڭҭ༻ࢿྉͳͲࢿݯ๛❖CPAN AuthorPerl͕͖ͳΤϯδχΞଟ͍❖৽ٕज़ͷैʹ՝• JSON Schema/GraphQL/AWS Client ͋ͨΓͰۤ࿑• ϥΠϒϥϦΛࣗ͢Δ͜ͱ❖৽͍͠ϓϩδΣΫτͰͦΜͳʹ࠾༻͞Εͳ͍͔..?
4DBMB
Scala❖ߴػೳϚϧνύϥμΠϜͷJVMݴޠ❖DDD ۙతΞʔΩςΫνϟΛදݱ͍͢͠❖Java༝དྷͷ๛ͳϥΠϒϥϦ❖ίϛϡχςΟ׆ൃ
ͯͳʹ͓͚ΔScala❖2013ʙ❖࠾༻αʔϏε• Mackerel(αʔόαΠυ)• ͯͳϒοΫϚʔΫ (ίΞ෦)• ͯͳϒϩάͷ՝ۚγεςϜ❖PlayFrameworkScalatra + Slick
Scala ࠾༻ͷ͖͔͚ͬ❖Mackerelͷ৽ن։ൃ• ৽ٕज़ͷಋೖͷ͢͠͞• εΫϦϓτݴޠʹΑΔ։ൃͷେม͔͞Β͘Δ੩తܕγεςϜͷಌΕ• ͋ΔΤϯδχΞͷHaskellॻ͖ͨ͗͢Δؾ͕࣮࣋ͪ݁ͨ͠ͱݴΘΕ͍ͯΔ
ෳࡶͳυϝΠϯΛରͱ͢Δͱ͖ʹ࠾༻❖MackerelͯͳϒοΫϚʔΫͷϞσϧͱͯෳࡶ❖ߴػೳͳܕγεςϜ͕ղͳίʔυΛੜΉ͜ͱ• ࣗͨͪͷίʔυͰ͋ΕҙͰ͖Δ͕ ϥΠϒϥϦίʔυΛಡΉ࣌ʹେม❖ίϯύΠϧ࣌ؒ• ॲཧܥͷόʔδϣϯΞοϓͰߴԽ͢Δ͜ͱʂ
@YAPC::Asia 2014http://yapcasia.org/2014/talk/show/d557ddbe-fde4-11e3-b7e8-e4a96aeab6a4
(P
Go❖͍͘͢ਓؾͷ੩తܕ͚ݴޠ❖γϯϓϧͳจ๏ͱॆ࣮ͨ͠πʔϧͰ։ൃ͍͢͠❖GoroutineʹΑΓαʔόϛυϧΣΞʹ࠷ద• ϚΠΫϩαʔϏεͷྲྀߦʹϑΟοτ❖࠷ۙͷISUCONͷ༗ג
ͯͳʹ͓͚ΔGo❖2013ʙ❖࠾༻αʔϏε• Mackerel‣ ࢹΤʔδΣϯτ/֎ܗࢹϛυϧΣΞ‣ ࣌ܥྻσʔλϕʔε• ͯͳϒοΫϚʔΫ(δϣϒΩϡʔ)• ෦͚ϚΠΫϩαʔϏε• Πϯλʔϯγοϓͷڭҭʹར༻(2018͔Β)
Go࠾༻ͷ͖͔͚ͬ❖Mackerelͷ৽ن։ൃ• ࢹΤʔδΣϯτͷ࣮ͷͨΊ‣ mackerel-agent‣ ఆظతʹαʔόͷϝτϦΫεΛऔಘͯ͠ αʔόʹૹ৴• ࣌ͷCTOʹGo͔RubyͰͬͯݴΘΕͨͷͰ (͕)
ϛυϧΣΞϚΠΫϩαʔϏε։ൃͰਓؾ❖ύϑΥʔϚϯεͱγϯϓϧ͕͞ٻΊΒΕΔ໘• ΠϯϑϥνʔϜͷCLIπʔϧͳͲͰ❖ࣾʹϑΝϯ͕ଟࣗ͘વͱݟ͕ू·͖ͬͯͯศར• CTOͷmotemen͞Μେ͖❖WebΞϓϦέʔγϣϯ։ൃͷݟ͋·Γͳ͍• ࠓͷΠϯλʔϯͰࢼͯ͠Έͨ
1ZUIPO
Python❖γϯϓϧͰॻ͖͍͢εΫϦϓτݴޠ❖ػցֶशσʔλੳͷϥΠϒϥϦͷॆ࣮Ͱਓؾʹ❖ਓ͕د͖͍ͬͯͯͯͦͷଞͷϥΠϒϥϦॆ࣮• ࠷৽ٕज़͕ར༻͍͢͠(ྫ: GraphQL)❖͏Python3͍͍ͬͯ
ͯͳʹ͓͚ΔPython❖2015ʙ❖࠾༻αʔϏε• BrandSafe ͯͳ• ͚ࣾࠂઃఆཧπʔϧ• εύϜఆπʔϧ(։ൃத)• ͦͷଞඇެ։ͷϓϩδΣΫτͰ❖FlaskΛར༻͍ͯ͠ΔαʔϏε͕େ
Python࠾༻ͷ͖͔͚ͬ❖ػցֶशͱσʔλੳ• ΤίγεςϜ͕͞Ε͍ͯΔ• PerlͰॻ͖͢ϝϦοτ͕͋·Γͳ͍❖GoogleܥϥΠϒϥϦ• ࠂܥͰར༻Ͱ͖Δͱศར
ͯͳʹ͓͚ΔPython❖ػցֶशσʔλੳؔ࿈Ͱͷ࠾༻͕جຊ• ͱ͍͑ਵ͢ΔWebΞϓϦέʔγϣϯ෦ ݁ߏॻ͔Ε͍ͯͯݟ͕ཷ·͖͍ͬͯͯΔ❖ࠓޙPerlͷΘΓʹ࠾༻͢Δ໘૿͑ͦ͏❖ݸਓతʹ Type hint͕ͬͱΓ্͕ͬͯཉ͍͠• TypeScript ͷ typesʹൺΔͱॆ࣮͍
@ͯͳࣾษڧձhttps://hakobe932.hatenablog.com/entry/2017/11/03/190000
Ruby❖Perlͱ͔ͭͯϥΠόϧؔͩͬͨ͜ͱ͋ͬͯ ࣾͰͷ࠾༻ʹ͍ͨΒͳ͔ͬͨ❖ͯͳͷਓ͍͍ͩͨॻ͚Δ͠ɺ͍͍͖ͩͨ• ͖Ͱ͢❖࠾༻γʔϯ• Chef, Capistrano
͜͜·Ͱͷ·ͱΊ❖ͯͳ10Ҏ্PerlͷձࣾΛ͍ͬͯΔ❖ۙඞཁʹԠͯ͡৽ͨͳݴޠΛ͍ͬͯΔ• Scala: ෳࡶͳυϝΠϯઃܭ• Go: ϛυϧΣΞϚΠΫϩαʔϏε• Python: ػցֶशͱσʔλੳ
ϓϩάϥϛϯάݴޠબʹ ͍ͭͯͷߟ͑ํ
ݴޠબͷࢹมΘͬͨ❖ੲWeb։ൃͷͨΊͷݴޠΛҰͭબྑ͔ͬͨ❖ࠓWeb։ൃͷྖҬ͕͕Γɺదࡐదॴʹ• WebΞϓϦέʔγϣϯ͚ͩͰͳ͘…• ϛυϧΣΞ• ϚΠΫϩαʔϏε• αʔόʔϨε• ػցֶश
ͯͳͷϓϩάϥϛϯάݴޠʹର͢Δ࢟❖ඞཁͰ͋Ε৽͍͠ݴޠΛͲΜͲΜ͍ͬͯ͘• ϓϩδΣΫτ͝ͱʹݕ౼• σϑΥϧτPerlͱ͍͏͜ͱʹͳ͍ͬͯΔ❖ͱ͍͑ɺݴޠ͕૿͑͗͢ΔͱࠔΒͳ͍͔?
ݴޠͷ૿ՃͷσϝϦοτ❖ڭҭίετ/ΤϯδχΞͷՄൖੑͷԼ• ͯͳͷΤϯδχΞҙͷݴޠ͕͑Δͱ͍͏લఏͷͱͳΜͱ͔ͳ͍ͬͯΔ• ϓϩδΣΫτʹඞཁͳٕज़ͷҧ͍େ͖͘ͳ͖͍ͬͯͯΔ❖ݟࢿ࢈ͷࢄ• ผͷ͜ͱΛͬͯΔͱڞৼ͕ੜ·Εʹ͍͘
৽ݴޠಋೖͰؾΛ͚͍ͭͯΔ͜ͱ❖Λղܾ͢ΔͨΊʹຊʹඞཁ͔?❖νʔϜ͕ड͚ೖΕΒΕΔ͔?• Ұ࣌తʹ૿Ճ͢ΔίετΛड͚ೖΕΒΕΔ͔?• Ϧʔυ͢Δਓ͕͍Δ͔? ϑΥϩϫʔ͕͍Δ͔?‣ ձࣾʹఆணͤ͞Δͱ͜Ζ·ͰΛݟਾ͑Δ
৽ݴޠಋೖͰؾΛ͚͍ͭͯΔ͜ͱ❖ݴޠͷίϛϡχςΟ׆ൃ͔?• ϝϯςφϯε͢Δͻͱ͕͍Δ͔?• ϥΠϒϥϦॆ࣮͍ͯ͠Δ͔?• ͯͳ͕ߩݙ͍͚ͯ͠Δ͔?
৽ݴޠ࠾༻ͷϓϩηε❖ٕज़άϧʔϓ͕அ• ٕज़άϧʔϓ = ΤϯδχΞԣ۲ͷ৫• ར༻͍ͨ͠ਓ͕ٕज़άϧʔϓʹਃ• CTOνʔϑ͕ώΞϦϯά͠ͳ͕Βܾఆ• ݴޠ x ༻్͝ͱʹར༻ͯ͠Α͍͔ఆΊΔ• ඞཁҎ্ʹ͕രൃ͢ΔͷΛ͙
εϜʔζʹݴޠΛಋೖ͢ΔͨΊʹ❖ΤϯδχΞͷதͰݟධՁΛूΊ͓ͯ͘• ݴޠͷษڧձΛ։࠵• झຯΠϯλʔϯɺϥϘϓϩδΣΫτͰධՁ❖ࣗવʹಋೖ͍͚ͯ͠Δ͔Ͳ͏͔ͷΛ࡞Δ• ແཧͦ͏ͳΒࣗવͱཱͪফ͑Δ
ࠓޙ৽ݴޠಋೖ͍͔ͯ͘͠?❖ඞཁʹԠͯ͡࠷దͨ͠ݴޠΛ͍͖͍ͬͯͨ• Web։ൃͷఆٛࠓޙ֦େ͍͖ͯͦ͠͏• ৽͍͠ݴޠొ͢ΔͩΖ͏❖ͱ͍͑૿͑͗͢ΔͷࠔΔ• ΤϯδχΞͷྗΛͲΜͲΜߴΊΔ? ݴޠ͝ͱͷڭҭ੍Λॆ࣮͢Δ?• ͦͦ͜͜ࠔΓͭͭ͋ΔͷͰ͍ΖΜͳ͓Λฉ͖͍ͨ
ݸਓతؾʹͳΓݴޠ❖Node• ϦΞϧλΠϜੑ͕ඞཁͳͱ͖ʹ❖Elixir• োੑ͕ΊͪΌͪ͘Όඞཁͳͱ͖ʹ❖Rust• γεςϜϨϕϧͷϓϩάϥϛϯά͕ඞཁͳͱ͖ʹ
·ͱΊ
ͯͳͱϓϩάϥϛϯάݴޠ❖ͨ͜͠ͱ• ͯͳͷϓϩάϥϛϯάݴޠͷྺ࢙• ݴޠબͷࢹϓϩηεࠓޙʹ͍ͭͯ❖Web։ൃͷ͕ΓʹదԠ͍ͯͨ͘͠Ίʹ• ৽ͨͳݴޠͷಋೖ͍ͯ͘͠• ͜Ε·ͰͷલఏͰ͘͠ͳΓͦ͏ Λ͍͖͍ͯͨ͠❖࠙ձͰͥͻօ͞Μͷ͓͖͔͍ͤͯͩ͘͞ʂ