メジャーリーグのビッグデータ「Baseball Savant」をGoogle CloudおよびPythonライブラリを使ったデータ分析基盤として構築・可視化する事例の紹介となります.
【参考】
以下のプレゼンテーションの更新版となります.
Developers Summit 2023 10-C-6 「推しは推せる時に推せ」という俺のDXを実現するためのサーバレスなデータ基盤開発と運用
PythonͱΫϥυͱ ٿͷਪ͠׆.εϙʔπΞφϦςΟΫεΛ͍͍ײ͡ʹΔͨΊͷ ϓϥοτϑΥʔϜ࡞Γͱӡ༻, ͦͯ͠ਪ͠׆.Shinichi Nakagawa@shinyorke 2023/07/13 Start Python Club #95
View Slide
Who am I ?ʢ͓લ୭Α?ʣ• Shinichi Nakagawa@shinyorke• ΞΫηϯνϡΞגࣜձࣾ ςΫϊϩδʔίϯαϧςΟϯάຊ෦ Ϛωʔδϟʔ• ຊۀΫϥυɾΠϯϑϥѻ͏νʔϜͰ৭ʑͬͯΔਓ• ࣄझຯϑϧαΠΫϧͳΤϯδχΞ• ϓϩٿϋϜ, MLBΞεϨνοΫεਪ͠• ʮLean Baseballʯͱ͍͏ݸਓϒϩάͰ ʮٕज़ʯʮٿʯʮΩϟϦΞʯʹ͍ͭͯ৭ʑॻ͍ͯ·͢. https://shinyorke.hatenablog.com/
ॏཁͳεϥΠυ͜ͷ৭Ͱ͢※10ຕͳ͍Ͱ͢, ࠷ѱ͜ͷ৭ͷεϥΠυ͚͍ͩͬͯͩ͘͞.
ࠓͷςʔϚʮࢲͷਪ͠׆ʯ• Pythonͱ͏10Ҏ্ͷ͓͖߹͍Ͱ͢, ૬. ͱݴ͍ͭͭ, ࠷ۙGoTypeScriptͱྑ͍ͯ͘͠·͢.• ΫϥυαʔϏε, ಛʹGoogle Cloudެࢲڞ͓ੈʹͳͬͯ·͢. ͳ͓ݱ࣮ͷࣄझຯͰAWS͍·͢ʢͰGoogle͕େʣ.• ମೳྗ͕ૉΒ͍͠ٿબख͕͖Ͱ͢. ຊͩͱສதਖ਼ʢຊϋϜʣ, ϝδϟʔͪΖΜ͜ͷํ…
ʢݱ࣌ͰʣੈքҰͷٿબखʮΦΦλχαϯͷ2023ʯͷਪ͠ϙΠϯτΛτίτϯޠΔ.ຊ࣌ؒ2023/7/11࣌ͷσʔλʢMLBલઓऴྃʣ࣌ͷσʔλΛݩʹղઆ͠·͢. ※σʔλࢀরݩʢMLBެࣜσʔλʣ: https://baseballsavant.mlb.com/statcast_search
ΦΦλχαϯΤά͍͙Β͍ͷύϫʔʢଧٿʣͱ֯ͰϗʔϜϥϯΛྔ࢈͍ͯ͠Δ.
ΦΦλχαϯ6݄͝ΖಥવόοςΟϯά͕͍͍ײ͡ʹͳΓଧരൃ.ͦΓΌ͋6݄MVPΘ͔Δؾ͕͢Δʢͳ͓7݄಄ʹͪΐͬͱ༷࣪ͬͨʣ.
ΦΦλχαϯ֯ʹΊͬͪΌ͍ଧٿ͕ΊͬͪΌඈͿʢޠኮྗʣ.
खΦΦλχαϯ?ࠓεϥΠμʔʢਖ਼֬ʹSweeperʣ͓Խ͚ʹ. ͪΐͬͱඈᠳؾຯͳͷͱٿԼ͕ͬͯΔͷ͕ෆ҆…
ͪͳΈʹڈͷखΦΦλχαϯʢ2022γʔζϯऴྃ࣌ʣ
ϫΠʮ⽁σʔλج൫ཉ͘͠ͳ͖ͬͯͨϯΰʯ #ԶͷDXϓϩδΣΫτരݩσʔλʢhttps://baseballsavant.mlb.com/ ʣͷෳࡶɾղ͕݁͞ߏΩπ͍.ͱ͍͏͜ͱͰఆظతʹσʔλΛDWHʹ์ΓࠐΉ&ՄࢹԽ͢Δج൫Λ࡞Ζ͏ʂ ͱͳͬͨͷ͕͜ͷϓϩδΣΫτͷΩοΧέ.
اըɾઃܭɾ࣮ͦͯ͠ӡ༻…͔͚ۙͯ͘Γ͖ͬͨΓ·ͨ͠💪※ࠓ伱Λݟ͚ͭͯվળɾ৽ػೳ։ൃத.
ΞϓϦͱσʔλج൫ͷΞʔΩςΫνϟ
ΞʔΩςΫνϟͱαʔϏεબͼͷಛ• ʮϑϧϚωʔδυ͔ͭαʔόϨεʯͳΫϥυʹ߆Δ• ͓ࡒʹ༏͍͠ߏͱ͍ํʹప͢Δ
ʮϑϧϚωʔδυ͔ͭαʔόϨεʯͳΫϥυ• ʮϑϧϚωʔδυ͔ͭαʔόϨεͳΫϥυαʔϏεʯͷಛ• ͬ͘͟Γݴ͑ʮΞϓϦΛࡌͤͨΒͻͱ·ͣಈ͘ʯαʔϏεͷ͜ͱ.• نʹԊͬͯ։ൃͨ͠ίʔυ͘͠ContainerԽͨ͠ڥΛσϓϩΠͨ͠Βಈ͘.• ʮϑϧϚωʔδυ͔ͭαʔόϨεʯʮख͕͔͔ؒΒͳ͍ʯ• ΄΅ϝϯςφϯεϑϦʔ.ϛυϧΣΞͷอकɾӡ༻͔Β։์͞ΕΔ.• ҰਓͰ͏࣌αʔόʔΛݮΒ͠, େਓͷ࣌૿͢ॊೈͳରԠָ͕.• ϦΫΤετ͋ͨΓͷॲཧ࣌ؒ, ͑ΔϦιʔεྔͷ੍ݶɾϥϯλΠϜVersionͷ੍ݶ, etc… ߟྀ͖͢ཹҙɾܽ͋ΔͷͰ͏༷࣌ΛνΣοΫ&ͪΌΜͱςετ͠·͠ΐ͏.
ʲਤʳGoogle Cloudͷڞ༗ϞσϧʢComputeܥαʔϏεʣ
Cloud Run, GAE, Firebase, Cloud FunctionsҎ্͕GoogleܥͷαʔόϨεͳαʔϏε.
ʁʁʁʮݸਓͰΫϥυαʔϏεΛ͕ͬͭΓ͏ͱ͓͕ۚ৺ʯͬͯࢥ͏͡Όͳ͍Ͱ͔͢, ΫϥυͱαʔόϨεͰ͍͍ײ͡ʹग़དྷ·͢.
αʔόϨεͳΫϥυ͓ࡒʹ༏͍͠• ʮ͏ͱ্ཱ͖͚͕ͩͪΕ͍͍ʯͷͰΞϓϦέʔγϣϯج൫αʔόϨεʹશৼΓ• WebΞϓϦέʔγϣϯόονॲཧίʔϧυελϯόΠʢΞΫηεͨ͠Βىಈʣ• ʮಈ͍͍ͯͳ͍͓͕͔͔࣌ۚΔʯͷDWHͱετϨʔδͷΈʢͦΕ͘͝গֹʣ• ྉ͓ۚΑͼແྉͷϧʔϧΛͪΌΜͱಡΜͰཧղͯ͠ਖ਼͘͠͏• ྉۚମܥͱແྉͪΌΜͱެࣜυΩϡϝϯτΛಡΉ.• ྫ͑Google Cloud StorageదͳετϨʔδλΠϓͷબ͓Αͼ, ظอʢϑΝΠϧมߋͤͣ͘อଘʣͷར༻Ͱอίετ͕Լ͕ͬͨΓ͢Δ.
Ұϲ݄Ͱ$3ະຬ, ίʔώʔ3.34ഋఔͰࡁΈ·ͨ͠🐯 ※σʔλج൫ϓϩδΣΫτͷ࣮ίετΑΓࢉग़ʢίʔώʔίϯϏχίʔώʔج४ʣ, υϝΠϯऔಘྉ֎෦ίετΛআ͘
ΞʔΩςΫνϟղઆͷ·ͱΊ• ʮϑϧϚωʔδυ͔ͭαʔόϨεʯͳΫϥυαʔϏεָͰ͋Δ.• อकɾӡ༻࡞ۀ͔Βͷղ์, ͬͯͳ͍࣌ίʔϧυελϯόΠ.• αʔόϨεͳΒͰͷ੍ࣄ߲ʹҙʢॲཧ࣌ؒɾϦιʔεʣ.• ͓ࡒʹ༏͍͍͠ํ͕Ͱ͖Δ.• αʔόϨεʮ͚͓͕͔͔ͬͨ࣌ͩۚΔʯߏͳͷͰ͓ࡒʹ༏͍͠.• ετϨʔδDBແྉɾσʔλظอϧʔϧΛ׆༻.
σʔλੳμογϡϘʔυΛαʔόϨε͔ͭϞμϯͳPythonͰ͍͍ײ͡ʹ࡞Δ
ͪ͜Βશ෦PythonͰ։ൃ͍ͯ͠·͢.։ൃதʹJavaScript/HTMLҰߦॻ͍͍ͯ·ͤΜ.
PythonͳLow-codeͰ͍͍ײ͡ʹ࡞Δ.• PlotlyΛLow-codeπʔϧͱͯ͠ ͑ΔΑ͏ʹͨ͠ʮDashʯΛར༻.• ϓϩτλΠϓͰੳɾՄࢹԽʹ Jupyter LabͱPlotlyΛ͓ͬͯΓ, ͜ΕΛͦͷ··Ҡ২Ͱ͖ΔखஈͰ ࣮͔ͨͬͨ͠.• https://dash.plotly.com/
ࠓճ࡞ͬͨίʔυ ʢҰ෦ൈਮʣ• Python͚ͩͰॻ͚ΔͷΊͬͪΌศརͩͬͨ.• HTMLʹͨ͠ίϯϙʔωϯτΛPythonͰ ΰϦͬͱॻ͍ͯ࡞͢Δͱ͍͍ײ͡ʹಈ͘.• ΠϕϯτۦಈͰͷॻ͖͑Callbackͳ σίϨʔλʔͰ࣮.• ReactͬΆ͋ͬͯ͞ݸਓతʹେ͖͕ͩ, ςετ͕ॻ͖ʹ͍͘ҹ… ※গͳ͘ͱUI ίϯϙʔωϯτʹؔͯ͠
Dash࣮ͬͯ༻Ͱ͑·͔͢?• ݁ʮΧελϚΠζʢࣗ࡞ʣ͕ඞཁͳσʔλՄࢹԽΞϓϦͳΒ˕ʯ• ٿΞϓϦΧελϚΠζͰ࡞Δάϥϑ͕͋ͬͨͷͰॿ͔ͬͨ• ٿͷμΠϠϞϯυʢ֎ؚΉʣ• ετϥΠΫκʔϯදࣔ• ΧελϚΠζ͕ແ͚ΕΘͳ͍͍ͯ͘ʢΉ͠Ζ։ൃ͢Δͳʣ LookerTableau, RedashͰࡁΉͳΒͦΕ͕࠷ͤ
μογϡϘʔυΞϓϦͷϢʔεέʔε• σϞΞϓϦέʔγϣϯʢWebΞϓϦέʔγϣϯʣCloud Run্Ͱϗετ. ࣮PythonʢDashʣ.• όοΫΤϯυͷೝূAPI GatewayΛ༻͍ͯߦ͏, API KeyํࣜͷೝূʢSaaSతʹ͏ͨΊ͑ͯ͜͏͍ͬͯΔʣ.• BigQueryʹ֨ೲ͞ΕͨσʔλΛݕࡧ͢ΔόοΫΤϯυʢRESTful APIʣGoʢGinʣͰ࣮, Cloud RunͰϗετ.• RESTful APIͷResponse݅ผʹCloud StorageʹΩϟογϡʢಉ͡ΫΤϦΛԿ࣮ߦͤ͞ͳ͍ʣ.
ʮΫϥυαʔϏεબͼʯͷ͠͞Λղܾ͢Δ• αʔόϨεͳΫϥυαʔϏεͷબͼํ - Google Cloudฤ• App EngineͱFirebaseͱCloud Run, Կ͕ҧ͏ͷ?• Cloud Functions͍ͬͯͭ͏ͷ?ͦͦԿऀ??• Python͍తʹͲ͏ͨ͠Βྑ͍͔?• ϓϩάϥϛϯάݴޠͷબͼํ
αʔόϨεͳΞϓϦέʔγϣϯಈ࡞ڥओͳαʔϏεʢ(PPHMFʣ 63- ֓ཁ("& (PPHMF"QQ&OHJOF IUUQTDMPVEHPPHMFDPNBQQFOHJOFαʔόϨε͔ͭϑϧϚωʔδυͷݩΈ͍ͨͳଘࡏ ͍͍͢'JSFCBTF IUUQTfiSFCBTFHPPHMFDPNΞϓϦͷΈͳΒͣ %#ɾ௨ͱΕΔ͜ͱ͕ଟ͍͔ͭศརجຊ+BWB4DSJQU͕ͩҰ෦1ZUIPOར༻Մ$MPVE3VO IUUQTDMPVEHPPHMFDPNSVO͖ͳݴޠɾڥͰ࡞ΔͳΒ͜Ε ͻͱ·ͣ$POUBJOFS࡞ͬͯಈ͔ͤΔ$MPVE'VODUJPOT IUUQTDMPVEHPPHMFDPNGVODUJPOTͪΐͬͱͨؔ͠Λಈ͔͢ͳΒ4MBDL#PUͷখ͞ΊͳΞϓϦͳͲ
Cloud RunΛબͨ͠ʢPythonicͳʣཧ༝• μογϡϘʔυΞϓϦͷґଘϥΠϒϥϦతʹApp EngineͰಈ͔͘ո͔ͬͨͨ͠Ί• PandasʹDashʢPlotlyʣͱσʔλܥͷϥΠϒϥϦ͕Γͩ͘͞ΜͷWebΞϓϦ• ͜ͷ࣌ͰͪΌΜͱͨ͠ContainerܥͰಈ͔͞ͳ͍ͱବͩͳͬͯஅˠͦͷ௨Γͩͬͨ• બ͢Δ·Ͱͷࢥߟͱͯ͠…1.ґଘϥΠϒϥϦͳͲͷ߹Ͱ΄΅PythonʢҰ෦GoʣͰͷ։ൃ -> Firebase͕ީิ͔Βফ͑Δ2.Cloud FunctionsͰಈ͔͢ʹඍົͳ༷ͱͳͬͨͨΊબࢶͱͯ͠ফڈ3.App EngineʢStandardʣContainer͡Όͳ͍ -> Cloud Runʹܾఆ ※ContainerͰಈ͔ͤΔApp EngineʢFlexibleʣΛΘͳ͔ͬͨཧ༝…ͦΜͳબࢶΛೖΕͨ͘ͳ͔͔ͬͨΒͰ͢ʢٿʣ
σʔλऩूόονॲཧʢج൫ʣΛ͍͍ײ͡ʹ࡞Δ
σʔλऩूج൫ͷϢʔεέʔεᶃ Cron Scheduler͕ຖܾ·ͬͨ࣌ؒʹᶄͷTriggerΛݺͼग़͢ᶄ TriggerσʔλऩूαʔϏεʢCrawlerʣʹඞཁͳύϥϝʔλʔΛ࡞ͬͯ͢ᶅ CrawlerTrigger͔ΒͷύϥϝʔλʔΛͬͯσʔλݩαΠτ͔ΒCSVΛμϯϩʔυ, Datalakeʹอଘᶆ Cron SchedulerͷτϦΨʔΛݩʹImporterCSVσʔλΛDWHʢBigQueryʣʹೖ
ΫϥυωΠςΟϒͳʮόονॲཧʯ• ΫϥυͰ͋Γ͕ͪͳόονॲཧํࣜ• Cloud Functions + Pub/SubΛͬͯϐλΰϥεΠονతʹ࡞Δ
ΫϥυͰ͋Γ͕ͪͳόονॲཧํࣜݴޠ ڧΈͱॴ ΫϥυωΠςΟϒͳํ๏ͱͯ͠ʲΓํ࣍ୈʳࣗલͰαʔόʔ࡞ΔʲڧΈʳDSPOUBCͱԿ͔͠ΒͷݴޠͰ࡞ΕΔʲॴʳϝϯςɾӡ༻͕໘ɾଐਓԽ͢Δةݥ"84&$4'BSHBUFͳΒ͍͍ײ͡7.ܥͩͬͨΓϚγϯ͕ඞཁͳΒΫϥυ͏ҙຯ͕ݮΔ͔ʲΦεεϝʳ"QBDIF"JSflPXΛΫϥυαʔϏεͰ͏ʲڧΈʳ"JSflPXͷΈʹͬͯࢹɾӡ༻Մʲॴʳ"JSflPXͷֶशίετɾऔΓѻ͍ۀͰ͏ ͋Δఔͷن͕͋ΔόονॲཧͰྑ͍ײ͡ͷํ๏(PPHMF$MPVE "84྆ํ͍͚Δʲཁ͕݅߹͑Φεεϝʳ1VC4VCʹΑΔΠϕϯτۦಈʲڧΈʳϚΠΫϩαʔϏεతʹ࡞ΕΔʲॴʳઃܭɾ࣮Λཧղɾ׳ΕΔֶशίετΫϥυαʔϏεͳΒͰͷํ๏ઃܭɾ࣮ͷֶशίετ͔͔Δ͕׳Εͯ͠·͑݁ߏؾܰʹ࡞ΕΔ
ؾܰͰ͍҆ʮPub/SubΠϕϯτۦಈʯΛ࠾༻ݴޠ ڧΈͱॴ ΫϥυωΠςΟϒͳํ๏ͱͯ͠ʲΓํ࣍ୈʳࣗલͰαʔόʔ࡞ΔʲڧΈʳDSPOUBCͱԿ͔͠ΒͷݴޠͰ࡞ΕΔʲॴʳϝϯςɾӡ༻͕໘ɾଐਓԽ͢Δةݥ"84&$4'BSHBUFͳΒ͍͍ײ͡7.ܥͩͬͨΓϚγϯ͕ඞཁͳΒΫϥυ͏ҙຯ͕ݮΔ͔ʲΦεεϝʳ"QBDIF"JSflPXΛΫϥυαʔϏεͰ͏ʲڧΈʳ"JSflPXͷΈʹͬͯࢹɾӡ༻Մʲॴʳ"JSflPXͷֶशίετɾऔΓѻ͍ۀͰ͏ ͋Δఔͷن͕͋ΔόονॲཧͰྑ͍ײ͡ͷํ๏(PPHMF$MPVE "84྆ํ͍͚Δʲ࠾༻ʳ1VC4VCʹΑΔΠϕϯτۦಈʲڧΈʳϚΠΫϩαʔϏεతʹ࡞ΕΔʲॴʳઃܭɾ࣮Λཧղɾ׳ΕΔֶशίετΫϥυαʔϏεͳΒͰͷํ๏ઃܭɾ࣮ͷֶशίετ͔͔Δ͕׳Εͯ͠·͑݁ߏؾܰʹ࡞ΕΔ
Pub/Sub + Cloud FunctionsͳϐλΰϥεΠον• crontabͷΫϥυαʔϏεʢCloud Schedulerʣ͔ΒPub/Subܦ༝Ͱୟ͘ࣄͰόονॲཧΛ࣮ݱ• ֤Cloud Functionsؔʢᶄ, ᶅ, ᶆʣPub/Sub͔ΒͷϝοηʔδΛड͚ͯಈ͘ΈͰ࡞Δ• ͜ΕΒͷํ๏Google CloudެࣜʹQuick Start͕͋ΔͷͰਅࣅͨ͠Β࣮ݱՄೳʢਅࣅ͠·ͨ͠ʣ• ͪͳΈʹڥCloud RunͳͲ, ଞͷαʔϏε͑·͢&ݴޠPython͡Όͳͯ͘ߏ͍·ͤΜ
Ҏ্, ٕज़ύʔτͷ͓͠·͍.
ͦΖͦΖٿͷʹΓ·͢.
ࠓ֮͑ͯؼͬͯ΄͍͠ʮMLBͷ͓Խ͚ʯୡ• ϩφϧυɾΞΫʔχϟJr.ʢΞτϥϯλɾϒϨʔϒε/߈कͷ͓Խ͚ʣ• ౻࿘৾ଠʢΦʔΫϥϯυɾΞεϨνοΫε/ૉࡐܕͷ͓Խ͚ʣ
ϩφϧυɾΞΫʔχϟͬͯͲΜͳબखʁ• ΞτϥϯλɾϒϨʔϒε͍ϝδϟʔϦʔάͷະདྷΛഎෛ͏ ઈΞεϦʔτܕ֎खͰϙδγϣϯओʹϥΠτ• લઓऴྃ࣌ͷʢ89ࢼ߹ʣ: ଧ.331/ 21ຊྥଧ / 41౪ྥ ※લઓͰʮ20ຊྥଧ&40౪ྥʯMLB্࢙ॳͷه• લਓະ౸, 40ຊྥଧ&70౪ྥͱ͍͏Ғۀʢมଶͳهʣ͕ظ͞ΕΔ
ΞΫʔχϟΦΦλχαϯͱҟͳΓͯ͘ڧ͍ଧٿ͕ଟ͍.
ΞΫʔχϟΊͬͪΌ֯ʹଧͬͯΔ, ΦΦλχαϯͱλΠϓҧ͏ͷʹ🤔 ※2ਓຊྥଧͱೋྥଧͷʹ͕ࠩ͋Γ·͢ʢΞΫʔχϟೋྥଧଟ͍ʣ
ΦΦλχαϯͱಉੈͰࠓγʔζϯϝδϟʔʹͬͨਓ…ͱ͍͑ʂʁ
౻࿘৾ଠखͷલઓ.• ॳઌൃʢ4ࢼ߹ʣ -> Ϙʔϧͷίϯτϩʔϧ͕ΞϨͰதܧ͗ʹஔస ※ͨͩͨ͠·ʹઌൃ༗Γʢ1-2Πχϯά͛Δઌൃ, ΦʔϓφʔͱݺͿʣ• ͕ඇৗʹߥΕ͍ͯΔʢલઓ5উ7ഊ ޚ9.00ʣ͕࣮ঃʑʹվળ.• 4݄ʢ6ࢼ߹ʣ: 0উ4ഊʢ݄ؒʣޚ13.00• 5݄ʢ11ࢼ߹ʣ: 2উ1ഊʢ݄ؒʣޚ10.50• 6݄ʢ9ࢼ߹ʣ: 1উ2ഊʢ݄ؒʣޚ4.35• 7݄ʢ5ࢼ߹ʣ: 2উ0ഊʢ݄ؒʣޚ0.00←ࠓ͜͜• ঃʑʹྑ͘ͳͬͨͷͬͯԿ͕ى͖ͨͷ͔ؾʹͳΓ·ͤΜ͔?
ʲʳ҆ఆ࢝͠Ί͙ͨΒ͍͔ΒSweeper͕૿͑ͨʢ&ٿ͕ӈݞ্͕Γʣ. ͱͷؔṖͰ͕͢স, ͔֬Β͍͠มԽͦͷลͰͨ͠.
݁ͼ
ʲ࠶ܝʳࠓͷςʔϚʮࢲͷਪ͠׆ʯ• Pythonͱ͏10Ҏ্ͷ͓͖߹͍Ͱ͢, ૬. ※࠷ۙGoTypeScriptͱྑ͍ͯ͘͠·͢.• ΫϥυαʔϏε, ಛʹGoogle Cloudެࢲڞ͓ੈʹͳͬͯ·͢. ※ݱ࣮ͷࣄͪΐͬͱͨ͠झຯͰAWS͍·͢.• ମೳྗ͕ૉΒ͍͠ٿબख͕͖Ͱ͢. ຊͩͱສதਖ਼ʢຊϋϜʣ, ϝδϟʔΦΦλχαϯଞͨ͘͞Μ.
ࠓͷΛཁ͢Δͱ…• ϑϧϚωʔδυ͔ͭαʔόϨεͳΫϥυ͚ͩͰσʔλج൫࡞ΕΔ. ݸਓతʹGoogle Cloudਪ͠Ͱ͢ʢ, ଞͷΫϥυͰͰ͖·͢ʣ.• Կ͔ΔΜͩͬͨΒPythonͰ͍͍Μ͡Όͳ͍ΜͰ͔͢Ͷʢࡶʣ. ແʹԿͰͰ͖·͢…͕߹ʹΑͬͯGoͱ͔TypeScriptྑ͖.• ମೳྗ͓Խ͚ٿΛͬͱ໘ന͘͢Δʢਅإʣ. ΞΫʔχϟͷҒۀͱ, ౻࿘͞ΜͷࠓޙʢSweeperʹཔΔͷ͔ʣʹظ.
͓ࣄʢۀʣͰࢀߟʹ͠Α͏ͱࢥͬͨํ• ࠓճհͨ͠ΓํɾߏઈରతͳճɾϕετϓϥΫςΟεͰͳ͍Ͱ͢. ྫ͑αʔόϨεɾΞʔΩςΫνϟʹ͖͢/͖͢͡Όͳ͍ঢ়گ࣮֬ʹଘࡏ͠·͢.• ͜ͷࢲʢshinyorkeʣ͕Γ͍ͨࣄ, ͍͍ͱࢥͬͯΔࣄʢ&৮Γ͍ͨϞϊʣΛ ٧ΊࠐΜͰ࡞ͬͨ, ͕ࣗΓ͍ͨࣄͷूେͰ, ͋͘·Ͱղͷग़͠ํͷҰͭͰ͢.• ྫ͑, αʔόϨεʹ߆Βͳ͍ΓํͩͱʮGKEΫϥελཱͯͯͦ͜Ͱಈ͔͢ʯͰऴΘΔ. ͜ΕཱͳղͩͬͨΓ͠·͢, ϝϦσϝ࣍ୈͰʢK8sΛѻ͏ͷͦΕͳΓʹେมͰ͕͢ʣ.• Infrastructure as CodeͰ͖ͯͳ͍, ςετίʔυΓͳ͍etc…࣮՝ࢁੵΈ.• ίϯςΩετͷཧղ͕த్ͳ··ਅࣅ͢Δͱരࢮ͠·͢, ਅࣅ͢ΔͳΒࣗݾͰ. ※ߏɾࢹతʹ৽نࣄۀγϦʔζB͘Β͍ͷϕϯνϟʔͷγεςϜʹԠ༻Մೳͳఔʹ͑·͢.
Python͍ͷօ͞·.• Pythonʢ͘͠ΤϯδχΞϦϯάʣΛ͖ʹͳΓ, ҙࢤΛ࣋ͬͯԿ͔ΛΓ͖Δ, తͳʮҰ్ʹͳΕΔඪʯΛݟ͚ͭΔͱྑ͖.• ࢲPythonͱΫϥυ, ٿ͕͖Ͱެࢲڞ৭ʑ͖ͬͯͨ݁Ռ, ٕज़ଞͷϞϊຏ͔Εͯ, ͕ࣗཧͱ͢ΔΩϟϦΞΛาΜͰ͍·͢.• ΤϯδχΞϦϯάͳʮਪ͠׆ʯΤϯδχΞɾϏδωεύʔιϯͱͯ͠, ࣗͷਓੜͱΩϟϦΞΛ๛͔ʹ͢Δͷͩͱࢥͬͯ·͢ʂ͍ͬͯ͜͏ͥ🤛
͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠⽁@shinyorke