PyCon JP 2018 Talk Session https://pycon.jp/2018/
Baseball Science, Web Application, Barrel Zone, and more...
Pythonista’s Batting EyeShinichi NAKAGAWAʢٿΤϯδχΞʣ a.k.a. @shinyorkeNEXT BASE Corp. Chief Technology OfficerPyCon JP 2018 Talk Session 2018/9/17Pythonistaͷબٿ؟ʢͤΜ͖Ύ͏͕Μʣ
View Slide
ൃදͷલʹ…͓ئ͍ :bow:• ϓϩΞϚΘͣɺຊͷٿʹؔ͢Δ࣭ɾ͝ҙݟʹ ͍͓ͭͯ͑Ͱ͖·ͤΜʢ͓ࣄͳͷͰ͓͍ͩ͘͠͞ʣ• ϝδϟʔϦʔάʹ͍ͭͯՄೳͳݶΓ͑·͢ ˞͜ͷൃදͷࡐͰ͢• Pythonɾٕज़ͷجຊతʹ͓͑͠·͢ ˞ۀʢٿʣʹ৮͠ͳ͍ݶΓ• ίʔυެ։͠·ͤΜɺεϥΠυެ։͠·͢ ࣸਅɾSNSγΣΞΨϯΨϯͪ͠Ό͍ͬͯͩ͘͞ʂ
ʊਓਓਓਓਓਓਓਓਓਓʊʼɹಥવͷٿΫΠζɹʻʉY^Y^Y^Y^Y^Y^Y^Y^Yʉ
ϝδϟʔϦʔάࠓγʔζϯͷϗʔϜϥϯԦͱ͍͑ʂʁ※2018/9/17(JST)ݱࡏ,྆Ϧʔά౷ҰԦऀ
ʲʳΫϦεɾσʔϏε• Khris Davis,௨শʮKhrushʯ• Ξ۠ΞεϨνοΫεͷओ๒• 3࿈ଓ40ຊྥଧҎ্(2016ʙ2018) ※ࠓγʔζϯ43ຊྥଧ(9/17 JSTݱࡏ)• ӈӈଧ,എ൪߸2• ʮ࢛൪DHʯ,ྥͱकඋμϝ• 180cm/86kgɺҙ֎ͱখ͍͞ݩը૾ɿWikipedia
Βͳ͍ͬ͢ΑͶʢ͠ʣσʔλͰ͓ݟͤ͠·͢Ͷ#σϞ͠·͢
σʔλͰݟͯΈΑ͏ᶃࠨ͔Βଧٿ݁Ռɺώοτνϟʔτɺଧٿछผ
σʔλͰݟͯΈΑ͏ᶄࠨ͔Βଧٿɺඈڑɺ×֯
ϗʔϜϥϯʢؚΉଧʣ͕ग़͍͢κʔϯ͕ଘࡏ͢Δͱ͍͏͜ͱ͕Θ͔͖ͬͯͨ
ʮੌ͍×͍͍֯ʯͰඈڑ৳ͼΔՊֶͱσʔλͷݕূʹΑΓɺ×֯ͷΈ߹ΘͤͰඈͿ͜ͱ͕Θ͔ͬͯΔϝδϟʔͰʮόϨϧɾκʔϯʯͱݺΕ͍ͯ·͢&kwskϕʔεϘʔϧΪʔΫεͰʂݩը૾ɿhttp://m.mlb.com/glossary/statcast/barrel
ʮ͍ϑϥΠΛଧͯʯ #ҙ༁ଧٿΛ্͛ͯɺఔΑ͍֯Ͱඈ͢ͱ৳ͼΔ※ɿ্͕͕֯Γ͗͢Δͱଧٿ͕৳ͼͳ͍
όϨϧɾκʔϯʹͯΊΔͱJupyter + BokehͰόϨϧΛ࡞ਤʢֻ͚෦ʣώοτੑଧٿͷ͕ߴ͍ɺଧ͕֯͋Δ͜ͱ͕Θ͔ΔͩΖ͏͔ʁ
ϗʔϜϥϯԦͷͻΈͭ• ଧٿΛ৳͢ʢ160km/hҎ্ʣ• ͍͍ײ͡ͷ֯ʹඈ͢• ૯ͯ͡ɺʮϑϥΠΛଧͭྗΛ͢Δʯ ˠʮϑϥΠϘʔϧֵ໋ʯ͍ͬͯ͏ͭͰ͢• ϑϥΠΛଧͭͨΊͷϘʔϧͷݟۃΊͱٕज़͕େࣄ
ϘʔϧΛݟۃΊΔʮબٿ؟ʯͱ͍͏ٕज़͕͘͢͝େࣄϑϥΠΛଧٕͭज़ͱηοτͰଧࢁੜ·ΕΔ
ͦͯ͠զʑΤϯδχΞ͓ΑͼPythonistaʹʮબٿ؟ʯ͕ଘࡏ͢Δ#ຊͷςʔϚ
͓ͬͱɺࣗݾհΛΕ͓ͯΓ·ͨ͠
ٿΤϯδχΞͰ͢• PyCon JPΛΩοΧέʹʮϗϯτʹٿͷਓʯ ʹͳͬͨʮٿͷΤϯδχΞɾݚڀऀʯͰ͢• Shinichi NAKAGAWA(@shinyorke)• ʢגʣωΫετϕʔε ٿΤϯδχΞ݉CTO• Pythonࣗ͘͘शࣨʢ#rettypyʣΦʔΨφΠβʔ• ʲCareerʳITίϯαϧˠϦΫϧʔτˠRetty→͖͏• ຊ৬αʔόʔαΠυΤϯδχΞɺࠓԿͰɺڕྉཧେ͖
ʲCMʳωΫετϕʔε #ͱ• Innovations For All Athletes (શͯͷΞεϦʔτʹٕज़ֵ৽Λ)• τϥοΫϚϯ(υοϓϥʔϨʔμʔ) ͔ΒಘΒΕͨٿσʔλΛղੳ͠, ੳɾՄࢹԽΛߦ͏ϓϩμΫτʮBACSʢόοΫεʣʯΛٿஂɾબखʹఏڙ• ϓϩΞϚΘͣɺٿνʔϜɾબखͷಈ࡞ղੳɾӡӦαϙʔτetc…• ͦͷଞϝσΟΞࣄۀͳͲͳͲɺৄ͘͠ https://nextbase.co.jp/• ݱࡏΤϯδχΞืूதͰ͢ʂҰॹʹεϙʔπΛՊֶ͓ͯ͠͠Ζ͍ੈͷதΛ࡞Ζ͏ʂ※BACSʮBaseball Analytics and Coaching Systemʯͷུ
ʲCMʳBaseball Geeks• ٿͷʮະདྷʯΛൃ৴͢ΔϝσΟΞͰ,ωΫετϕʔεͰӡӦ͍ͯ͠·͢• σʔλɾεϙʔπՊֶͰ໌Β͔ʹͳͬͨ͜ͱΛʮΘ͔Γ͘͢ʯ͑Δ• ΈΜͳಡΜͰͶ&ϒΫϚΑΖ͘͠ʂ https://www.baseballgeeks.jp/
ʲCMʳPythonࣗ͘͘शࣨ #rettypy• ࢲ͕Ҏલࡏ੶͍ͯͨ͠RettyͷΤϯδχΞؒͱڞʹ։࠵͍ͯ͠Δ͘͘ձ• झࢫ&Ϟοτʔ• ֤ࣗ,͓Λ࣋ࢀͯ͠ʮࣗश(͘͘)ʯ͢Δ• ൃදɾࡶஊΛ௨ͯ͡ใަֶͼΛಘΔ• ΠΠΰϋϯ(ϥϯνɾ͓ͭ)Λ༇͠Ή• ॳ৺ऀ͔ΒΤόϯδΣϦετ·Ͱଟछଟ༷ͳࢀՃϝϯόʔ• ࣍ճࠓिʢ9/22ʣͰ͢ɺདྷͯͶ https://retty.connpass.com/event/100173/
PyCon JPͱٿʢ5ʣ• 2014ɿDjango(WebΞϓϦ),ηΠόʔϝτϦΫε• 2015ɿੳج൫ͱPyData,ΞμϜɾμϯ• 2016ɿϏοάσʔλղੳ,Pitch f/x(pitchpx)• 2017 ɿੳΞϯυՄࢹԽج൫ϦχϡʔΞϧ,ಘՁ• 2018ɿ্هΛͯ͢Ұ৽͓ͯ͠ಧ͚ˡNewʂ
ٿੳج൫ʮMortonʯ• PyCon JP 2014ʙ2017Ͱഓ͖ͬͯͨϊϋΛू݁͠ɺ σʔλऩूʙੳʙՄࢹԽΛϦχϡʔΞϧͨ͠৽࣌ͷٿج൫• ॳ(2014)ͷʮNo Ballʢٿʣʯɺ2017ʮBradfordʯͷػೳʹ Ճ͑ɺτϥοΩϯάσʔλͷੳΛ৽ͨʹՃ• ໊લτϥοΩϯάσʔλͰ࠶ධՁ͞Εͨϝδϟʔ۶ࢦͷ ઌൃӈʮνϟʔϦʔɾϞʔτϯʢݱΞετϩζʣʯ͔Βഈआ ˠৄ͘͠ʮϏοάσʔλɾϕʔεϘʔϧʯ͍ͬͯ͏ຊʹ͋Γ·͢
ຊ͓͢ΔϞϊͷશମ૾
ͬͨͷҰཡɹ˞දతͳͷϙΠϯτ*1ZUIPOʢ%PDLFSͷ1ZUIPOެࣜΠϝʔδΛར༻ʣ*8FCΞϓϦɿ/VYUKT %KBOHP*ੳɾՄࢹԽɿ+VQZUFS #PLFI*ٿՊֶܭࢉɿQBOEBT TBCS˞ࣗ࡞*ϓϥοτϑΥʔϜɿ-VJHJ*ΫϥυɾΠϯϑϥɿ%PDLFS$&GPS.BD*ͳ͓ɺଞʹ৭ʑͬͯ·͢ʢ42-"MDIFNZͳͲʣ
ຊͷ͓͠ͳ͕͖ʢPythonʣ• Django REST Framework + Nuxt.jsͰSPA• LuigiΛ༻ָ͍ͨͪΜͳύΠϓϥΠϯ• PyDataͰͬ͘͞ΓϓϩτλΠϐϯά
Django REST FrameworkͱNuxt.jsPythonͰWebͱ͍͑Djangoͦͯ͠JSͩͱSPA͕དྷͯ·͢Ͷͱ.ઌ΄ͲͷΫϦεɾσʔϏεͷ݅Ͱ͓ݟͤͨͭ͠Ͱ͢.
ຊ͓͢ΔϞϊͷશମ૾ࠓ͜͜
Python×σʔλੳͷΠϝʔδ͕ڧ͍ٿPythonॳͷ࡞DjangoͰͨ͠
PythonͰ͡ΊΔٿϓϩάϥϛϯά (2014)࣌ϑΝϯλδʔϕʔεϘʔϧʢιγϟήʣʹউͭͨΊͷσʔλੳΛࢦ͍ͯͨ͠
࠶ͼDjangoʹ͍ͬͨϫέ• Web͓ΑͼPythonͷ4ؒͷਐԽʹਵʢޙड़ʣ• SPAʢSingle Page Applicationʣ࡞Γͱϝϯς͕ࣄʹ ˠͪͳΈʹ,ฐࣾBACSVue.jsͷSPA• ࠓޙͷϓϩμΫτ։ൃɾٕज़બఆʹ͚ͯͷΩϟονΞοϓ ˠҰԠCTOͳͷͰɺʮखΛಈ͔ͯ͠ʯੜ͖ͨࣝΛशಘ• ࠷ۙDjango͕ϒʔϜͬΆ͍ͷͰ࠶ͼʹΔ #νϟϥ͍
PyCon JP 2014͔ΒͷਐԽ• Pythonɿ3.4→3.7• Djangoɿ1.7→2.1• Bootstrapϕʔεͷී௨ͷWebΞϓϦˠSPA• άϥϑϥΠϒϥϦચ࿅͞Εͨ(Chart.jsͳͲ)• ٿσʔλɺ৽ͨʹʮτϥοΩϯάσʔλʯ͕ՃΘΔʂ ˠMLBެೝͷʮBaseball Savantʯͱ͍͏σʔληοτ͕ՃΘΓɺ ɹଧٿ֯ɺϘʔϧճసͳͲੳͷରʹ
Nuxt.js(Vue.js)• ղੳɾੳπʔϧͱͯ͠ٻΊΒΕΔϢʔβʔମݧʢUXʣΛ ͑ΔͳΒSPAͰ͠ΐ͏ʂͱ࠷ॳ͔ΒબࢶSPAҰͰͨ͠• ࣄͰVue.jsΛΓͭͭɺReactͳͲ͓ࢼ͠Ͱ৮ͬͯ ৭ʑߟ͑ͨʢࢼͨ͠ʣ݁ՌɺNuxt.jsʹͨͲΓண͍ͨ• Nuxt.jsVue.jsΛϕʔεʹͨ͠ϑϧελοΫͳSPA FW ϧʔϧʹैͬͯॻ͍ͯϏϧυͨ͠Βಈ͘ͷ͕खʹೖΔ• ؊৺ͷUI͓Αͼάϥϑ࿈ܞ.,Nuxt UIͰ΄΅΄΅͑ͨ ˠ͓͔͛ͰPyConʢࠓʣʹؒʹ߹͏ɹ˞ɿͱ͍͑ਏ͔ͬͨ
Nuxt UIʙCore UIͷNuxt.js൛• BootstrapϕʔεͷAdminʢཧʣը໘ͷ༗໊ͳ ύοέʔδͱͯ͠ʮCore UIʯ͍ͬͯ͏ͷ͕͋Δ• Core UIࣗମ৭ΜͳFWʢAnguler,VueͳͲʣʹ ରԠ͍ͯ͠Δ,ͦͷதʹNuxt.js൛͕• Nuxt UI͍ͬͯ͏ౕΛForkͯ͠ಠ࣮ࣗ͠·ͨ͠ https://github.com/muhibbudins/nuxt-coreui
Django REST Framework• UIपΓNuxt.jsʹͤ,DjangoJsonΛΓͱΓ͢Δ RESTful APIͱͯ͠ͷׂʹྗ →ϑϩϯτͱAPIͰׂ͕͔ΕΔ໌֬ͳਐԽ ʢઃܭํͱ͍͏ҙຯͰʣ• ͱ͍͏༁ͰDjango REST Frameworkͷग़൪• ηΠόʔϝτϦΫεͷࢦඪܭࢉSerializerͰ ៉ྷʹͰ͖ͨ :excellent:
SerializerͰࢦඪܭࢉ(งғؾ)from rest_framework import serializersfrom sabr.stats import Statsfrom mlb.models import Batterclass BattingSerializer(serializers.HyperlinkedModelSerializer):ba = serializers.SerializerMethodField('batting_average')slg = serializers.SerializerMethodField('slugging')obp = serializers.SerializerMethodField('onbase')@classmethoddef calc_single(cls, obj):return Stats.single(obj.h, obj.hr, obj.number_2b, obj.number_3b)@classmethoddef calc_tb(cls, obj):return Stats.tb(cls.calc_single(obj), obj.hr, obj.number_2b, obj.number_3b)@classmethoddef calc_avg(cls, obj):return Stats.avg(obj.h, obj.ab)@classmethoddef calc_obp(cls, obj):return Stats.obp(obj.h, obj.bb, obj.hbp, obj.ab, obj.sf)@classmethoddef calc_slugging(cls, obj):return Stats.slg(cls.calc_tb(obj), obj.ab)def batting_average(self, obj):return self.calc_avg(obj)def slugging(self, obj):return self.calc_slugging(obj)def onbase(self, obj):return self.calc_obp(obj)class Meta:model = Battingfields = (# ※͜͜ʹSerializerͷcolumn͕ฒͿ)
REST FrameworkͰྑ͔ͬͨ• ߦϨϕϧͷࢦඪܭࢉΛSerializerͰ݁Ͱ͖Δ ˠSerializerMethodFieldͰhookͰ͖Δ, ςετ͍͢͠ʢςετॻ͍ͯͳ͍ʣ• SerializerMethodField্Ͱࢦඪܭࢉ ˠҎલࣗ࡞ͨ͠ʮsabrʯͱ͍͏ύοέʔδͰඞཁͳܭࢉ͕Ͱ͖ͨ ɹ͍͍ͪͪSQLͰܭࢉͨ͠Γؔ࡞ͬͨΓ͢Δख͕ؒল͚ͨ• DBͷΫΤϦͱSerializerʢΓʣͷׂɾΛ͚Δ ˠViewͰΫΤϦൃߦ,SerializerͰΓܗͱ៉ྷʹ͚͔͚ͯΔ ɹ݁Ռ,ݟ௨͕͠ྑ͍ʢϝϯς͍͢͠ʣίʔυʹ ɹͱ͍͑ਏ͔ͬͨ(´ɾωɾʆ)
Pythonistaͷબٿ؟(2018)Nuxt.jsͱDjango REST FrameworkͰચ࿅͞Εͨ݁Ռ͍͍ײ͡ʹࡉ͔͍ٕज़ɾઃܭϊϋ͜ͷޙࡶஊ or PyLadies Tokyo 4पLT(10/8)Ͱʂ
LuigiΛ༻ָ͍ͨͪΜύΠϓϥΠϯσʔλৗʹ৽͘͠ɺͦΕָʹӡ༻͠·͠ΐ͏࡞Δͷগͳͯ͘͠Ͷͱ.
Luigi + pandasͰ࣍όον• Baseball Savant https://baseballsavant.mlb.com/ ͷσʔλʑߋ৽͞ΕΔʢࢼ߹ཌʹެ։ʣ• ͬͯฉ͘ͱ,ͬͺ৽͍͠σʔλͰੳɾղੳΛ ͨ͘͠ͳΔΑͶʁʢྫɿࡢͷOhtani-sanͬͯʁʣ• ͬͯࣄͰ, Luigi + pandasͰ࣍Ͱσʔλऔಘͱ DBʢMySQLʣͷߋ৽Λߦ͏ύΠϓϥΠϯΛ࡞ͬͨ,ͪΐͬͱਏ͔͚ͬͨͲ• ࣮ڈ,RettyͰಉ͡Α͏ͳࣄΛ͍ͯͯͦ͠ͷܦݧ͕ੜ͖ͨ ༧ಋઢΛ͑͞͞ΔPythonόοΫΤϯυΛLuigi+pandas+ScrapyͰ࡞ͬͨϋφγ https://qiita.com/shinichi-nakagawa-r/items/f91ee099e5bce7cd5a4f
LuigiύΠϓϥΠϯʢֆʣσϑΥϧτͰUI͕͋ΔͷͰؾ࣋ͪతʹָ࠶࣮ߦLuigiͷΈͰΠέ·͢ͱʢػցֶशք۾ʹਓؾͳͷΘ͔Δʣॲཧதˠ←ॲཧޙ
PyDataͰͬ͘͞ΓϓϩτλΠϐϯάಘΒΕͨσʔλͰ͍͖ͳΓαʔϏε࡞Εͳ͍ಓͳ࣮ݧͱϓϩτλΠϐϯά͕͋ͬͯͦ͜
͜͜Ͱݴ͏PyData #ͱ• PythonΛ༻͍ͨσʔλॲཧʢऔಘ,ܗ,ੳʣ ͳͲɺσʔλʹؔ͢ΔӦΈͯ͢• ػցֶशͳͲͷલॲཧͱ͔͕Α͋͘Δͭ• ํ๏ԿͰΞϦ͕ͩJupyter, pandasΛ ͏͜ͱ͕ଟ͍ʢҹʣ
PyDataͰϓϩτλΠϐϯά• WebΞϓϦ(Django/Nuxt.js),όοΫΤϯυ(Luigi)͓Αͼσʔλߋ৽ɾલॲཧͯ͢, Jupyterͱpandas, BokehͰϓϩτλΠϐϯάͨ͠• ࢼ͠ॻ͖ͨ͠Γσόοάͨ͠Γ͢Δͷʹ,ϒϥβͰಈ͘ڥ ͱͯΓ͍͢ʢؾܰʹ࡞ͬͯյͤΔʣ.• ιϑτΣΞͷʮՁʯৗʹTry and ErrorΛ܁Γฦ͠ͳ͕Βਫ਼៛Λ ্͛ΔϞϊ,͜͏͍ͬͨ࡞ۀJupyter࠷ڧ• ରσʔλΛʮࣂ͍ͳΒ͢ʯ·ͰΔͷ͕ϕετ. ͪΌΜͱ࡞Γ࢝Ί͔ͯΒਏΈΛຯΘ͏ΑΓίετֻ͕͔Βແͯ͘ྑ͍.
ࠓճ׆༂ͨ͠Ϟϊ• Bokehʢάϥϑඳըʣ• ࢄਤԁάϥϑ• ׳Εͳ͍JSͰඳ͘લʹ ଘʹ࣮ݧ• pandasʢσʔλॲཧʣ• CSVΛॲཧͨ͠Γ• DB͔ΒσʔλΛҾ͍ͨΓ• ܽଛॲཧͱ͔େ׆༂• ͜ΕΒΛJupyterͰ͍͍ײ͡ʹॲཧ
ͦͷଞͷͩ͜ΘΓϙΠϯτ• Sean LahmanʢηΠόʔσʔλʣDBߏங• PyCon JP 2014Ͱ࡞ͬͨϚΠάϨʔγϣϯπʔϧʢࣗ࡞ʣΛͬͯܭࢉ• εΩʔϚ͕มΘͬͨΛ৽نͰ։ൃʢେͯ͠ਏ͘ͳ͔ͬͨʣ• Docker• ΫϥυαʔϏεͰͷӡ༻͓Αͼ,ଞϝϯόʔͷಈ͘ͷڞ༗• ϗϯτK8SԽ͔͕ͨͬͨؒ͠ʹ߹Θͣorz #rettypy ͰΔͱࢥ͏• ։ൃɾςετҰ؏ͯࣗ͠ͷPC্ɺPyCharmΛ׆༻ͯ͠Γ·ͨ͠
ͱ͜ΖͰօ͞Μ͖͔ͬ͞Βʮ͋Δදݱʯ͕ଟ͍͜ͱʹ͓ؾ͖ͮͩΖ͏͔ʁ
ਏ͔ͬͨਏ͔ͬͨ(´ɾωɾʆ)ਏΈΛຯΘ͏ͳΔ΄Ͳʁ
ٿʹʮਏ͍ʯ͜ͱ͕25ʙ334ݸ͘Β͍͋ΔʢΠϝʔδʣ※ಛఆͷݸਓΛࢥ͍͍ͭͨํ,ଟԿ͔ͷצҧ͍Ͱ͢ʢʣ
ʲۓٸݕূʳεϥΠμʔਏ͍ʁ• ܝࣔ൘Ͱ༗໊ͳʮ֎εϥਏ͍ʯຊ͔ʁ• PyDataͱϝδϟʔͷ τϥοΩϯάσʔλͰ Θ͔Δ͔͠Εͳ͍• ͬͯࣄͰωλͬΆ͘ݟͯΈ·͢ ରϝδϟʔϦʔΨʔ ˞ࣄͰ͜Μͳదͳࣄ͠·ͤΜ ɹͱ͍͏͔ࣄωλવώϛπͰ͢ʂʂʂ
ਏ͍ʢਏ͘ͳ͍ʣϥϯΩϯά໊લ ଧ ਏ͍ʢࡾৼʣ(JBODBSMP4UBOUPOӈ +BWJFS#BF[ ӈ 1BVM(PMETDINJEUӈ +PFZ(BMMP ࠨ 5SFWPS4UPSZ ӈ ໊લ ଧਏ͘ͳ͍ʢ҆ଧʣ+PTF"MUVWF ӈ 5SFWPS4UPSZ ӈ .BSDFMM0[VOBӈ 1BVM(PMETDINJEUӈ ,FWJO1JMMBS ӈ
ਏ͞Λ؍ͯ͠ΈΑ͏ਏ͍…ͱ͍ɺεϥΠμʔͰΫϧοΫϧ͢ΔόολʔͷಛΛΈΜͳͰݟͯΈΑ͏
͋ͬʢ͠ʣ34ຊྥଧ,199ࡾৼͷώϛπεϥΠμʔʹΑΔࡾৼͩͬͨʢదʣ
݁ͼ
ٿͱٕज़ͷʮબٿ؟ʢͤΜ͖Ύ͏͕Μʣʯ ͱʁ
ຖසൟʹൃੜ͢Δʮબͱܾஅʯ…ͷ܁Γฦ͠ͷதͰʮબͱूதʯ͕͔ͬ͠ΓͰ͖Δ͜ͱ
બͱܾஅ• ΤϯδχΞʹʮબʯͱʮܾஅʯ͕ৗʹ͋Δ• DjangoͰ࡞Δ?Flask??ͦΕͱRails???• SPAͬͯVue.js͕͍͍ͷʁͦΕͱAngular?• ֮͑ΔͳΒPythonͳͷ͔JavaScript• ৗʹ͘ΔϘʔϧʹରͯ͠ʮৼΔʯ͔ʮৼΒͳ͍ʯ͔ બ͕ഭΒΕΔٿબखͩͬͯʮબʯͱʮܾஅʯͷ܁Γฦ͠ ˞ਏ͍εϥΠμʔࣺͯΔࣄඞཁ
ਖ਼͘͠ʮબʯ͢ΔͨΊʹʁ• Կͱ͋Εʮٕज़ྗʯΛຏ͘͜ͱ• ΤϯδχΞϦϯάΛਖ਼͘͠Δɾ࿅श͢Δ• ͓ͦΒ͚ͩ͘ͲٿҰॹ• ʑͷ࿅शɾ࿉ΛଵΒͳ͍• ݸਓษڧɾ࿅श• ֎ͷษڧձΠϕϯτͷ׆༻,νʔϜͰͷ࿅श
ʮܾஅʯΛڪΕͳ͍• ʮΠγϡʔ͔Β͡ΊΔʯ• ࡞ΔϞϊɾੳ͢ΔίτΛʮݴޠԽʯ͢ΔɺԾઆɾςʔϚࠐͰ• ޙड़͢Δʮܾஅ͢Δʯϧʔϧʹͦͷ··ܨ͕Δ• ϞϊΰτΛʮܾஅ͢ΔʯϧʔϧΛࣗʹ࡞Δ• ʮ໎ͬͨΒ˓˓ʯͷʮ˓˓ʯΛܾΊΔ• ࢲͷ߹ɺΤϯδχΞϦϯάͩͱ ʮ໎ͬͨΒPythonʯͱ͍͏ϧʔϧΛܾΊ͍ͯΔ• ٿͰݴ͏ͱ͜ΖͷʮϠϚΛுΔʯΈ͍ͨͳϞϊ• ʮܾஅϧʔϧʯͷ֎ʹ͋Δͷݟಀ͢ࣄΛڪΕͳ͍ʢεϥΠμʔΛݟૹΔ༻ʹʣ
ूத͢Δ• ʮબʯʮܾஅʯΛਖ਼͘͠ճ͢ʹʮूதʯେ• ʮબʯʮܾஅʯͨ͠ࣄΛΓ͖ΔҝͷϦιʔεΛʮूதʯ͢Δ• ৭ʑ͋Ε͜ΕͱΓ͗͢ͳ͍• ྲྀߦΓͷʹඈͼͭ͘• ຖɾຖिͷ༻ʹษڧձΠϕϯτʹߦ͘• ूத͢ΔͣͷϦιʔεʢ࣌ؒɾ͓ۚʣ͕ൃࢄ͢ΔΑ͏ͳࣄNG• ࣌ؒతʹʮूதʯͰ͖ΔΑ͏ͳʮश׳ʯ࡞ΓʢྫɿSNSઈͪʣ
ࢲͷʮٿ×PythonʯऴΘΓ• ʮٿΛΔͧʂʯͱબɾܾஅɾूத͓ͨ͠ӄͰ ೦ئͷʮٿΤϯδχΞʯͱͯ͠ࠓ͜͜ʹ͍Δ• εϙʔπͷੈքΛΑΓྑ͘ɺͬͱٿΛָ͘͢͠ΔͨΊɺ ʮٿΤϯδχΞͱͯ͠ͷຊۀʹूதʯ• ʮٿͱΤϯδχΞϦϯάͷֶͼͱϊϋʯ ͬͱ͍ੈքʹӋ͖ͨ·͢• ͜Εͦ͜·͞ʹʮͻΖ͕ΔPythonʯ
ʮऐ͍͠ʯͱࢥ͏͜ͱͳ͔Ε• ࢲࣗʮٿҎ֎ͷςʔϚʯͰདྷҎ߱ͷ PyCon JPεϐʔΧʔͱͯ͠ઓ͠·͢ ˠٿͱҧ͏ԹΊ͍ͯͨςʔϚΛΓ͍ͨ• ʮٿ×PythonʯதͷઐചಛڐͰͳ͍ Ή͠Ζ੮͕ۭ͍ͨͷνϟϯεͰ͢Αʁ ຊؾͰٿ͖ͳΒ͔͔͍ͬͯ͜ʂʂʂ• ͱ͍͑ࣗʮ͖͏ຽʯͳͷͰςϊώϥΫϧʔ͋Γ͑Δ()
ࠓ·Ͱ͝ԉ͋Γ͕ͱ͏͍͟͝·ͨ͠ʂϗϯτͷٿɾεϙʔπͰΤϯδχΞͱֵ໋ͯ͠ى͜͢ͷͰࠓޙΑΖ͘͠ʂʂ
ήʔϜηοτٿͱPythonͷ5ؒʹײँʂ͋Γ͕ͱ͏͍͟͝·ͨ͠&୭͔࣍ʹଓ͍ͯͶʂShinichi Nakagawa(Twitter/Facebook/etc… @shinyorke)