はてなブログのフロントエンドに秩序はもたらされたのか
by
NanimonoDemonai
×
Copy
Open
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Slide 1
Slide 1 text
Hatena Engineer Seminar #15 @nanimono_demonai 1 ϑϩϯτΤϯυʹ டংͨΒ͞Εͨͷ͔ʁ 2020 12/23
Slide 2
Slide 2 text
ࣗݾհ • id:nanimono_demonai • ͯͳ2020৽ଔ • ϒϩάMediaνʔϜ • ϚϯϋολϯΫϥϜνϟμʔ • tadamono_dehanaiʹͳΓ͍ͨ 2
Slide 3
Slide 3 text
ͯͳϒϩάMediaʹ͍ͭͯ 3 ͯͳͷϓϥοτϑΥʔϜͱͯͳϒϩάͷػೳΛܧঝͨ͠CMSͰ ΦϯυϝσΟΞӡӦΛ࣮ݱʂ
Slide 4
Slide 4 text
ͯͳϒϩάΛಈ͔͍ͯ͠Δͷ • Perl + JavaScript + छʑͷϛυϧΣΞ • Perl: όοΫΤϯυ • JavaScript: ϑϩϯτΤϯυ 4 JavaScriptͷΛ͠·͢
Slide 5
Slide 5 text
டংʹ͍ͭͯ 5 https://speakerdeck.com/fand/hurontoendonizhi-xu-hali-tutaka https://speakerdeck.com/fand/hurontoendonizhi-xu-woqu-rili-sufang-fa ࠓͷτʔΫࠨܝͷਫ਼ਆతଓฤ • ͯͳϒϩάͷϑϩϯτΤϯυ։ൃ ͷBehind-the-Sceneʹடংͱͭ͘ • ࠨܝ2ฤલᩀ • ຊʮϑϩϯτΤϯυͷϞμϯԽʯ Λ࣠ʹൃද
Slide 6
Slide 6 text
ϑϩϯτΤϯυϞμϯԽͷࢹ • աڈͱະདྷͷ྆ํ͕ݟΕΔಏ͕ཉ͍͠ • ࠓ·ͰͷπʔϧνΣʔϯͷઃఆΛཧղ͢Δ • Ή͖πʔϧνΣʔϯΛߟ͑Δ • πʔϧνΣʔϯ࣍తʹվળͰ͖͏Δ • ҰؾʹΔඞཁͳ͍ 6 աڈࢹͱͯ͠ʮϑϩϯτΤϯυͷடংʯγϦʔζͷνΣοΫ͓קΊ͠·͢ʂ
Slide 7
Slide 7 text
ࠓճͷςʔϚ 7 ·ΕΔடং γϯϓϧ εϐʔυ ͜ͷͨΊʹ͖ͬͯͨࣄͱ…… ࣌nanimono͕νʔϜʹδϣΠϯͨ࣌͠ʹḪΔ
Slide 8
Slide 8 text
δϣΠϯͨ࣌͠ͷҹ w ͯͳϒϩάͰΘΕ͍ͯΔ+4ه๏͕ଟ͍ • AltJSs • Flow, Typescript, JavaScript • Ϟδϡʔϧղܾ • CJS, ESModule • require()import͍Ζ͍Ζॻ͍ͯ͋Δ 8 ϒϩάͷJSͷॻ͖ํ͍Ζ͍Ζ͋Δʂ
Slide 9
Slide 9 text
ϏϧυߏͷΠϥετ 9 #BCFM1PMZpMM
Slide 10
Slide 10 text
։ൃ্ͷ • ෳͷAltJSʹରԠ͍ͯ͠ΔͨΊ • Babelͷઃఆ͕͍ • Linter͕JS/FlowͱTSͰઃఆ͕ҧ͏ • ଞʹ • Gulp͕ෳࡶ • WebpackͱBrowserify͕ಉډ͍ͯ͠Δ 10 ։ൃ͕͘ͳΔ
Slide 11
Slide 11 text
։ൃ͕͍ • BrowserifyͰϏϧυ͢ΔʹTFD͔͔Δ • Karma + PhantomJSͰͷςετ͕TFD͔͔Δ • ͔͠୯ମͰςετͰ͖ͳ͍ • ͞ΒʹςετΧόϨοδ͕Θ͔Βͳ͍ • ςετͱϏϧυΛվળ͍͕ͨ͠ઃఆ͕ෳࡶ 11 վमͷͨΊʹϏϧυͱςετΛ܁Γฦ͍͕ͨ͠…
Slide 12
Slide 12 text
ςετߏͷΠϥετ 12 #BCFM1PMZpMM ݁Ռ ࣮ߦ
Slide 13
Slide 13 text
ϥΠϒϥϦߋ৽͕͘͢͝ԯ߷ • React͕ݹͼ͍ͯΔ • ReactΛલఏͱ͍ͯ͠ΔϥΠϒϥϦݹͼΔ • FlowͷܕͱTypescriptͷܕ͕ࠞࡏ͍ͯ͠Δ • PhantomJS͚ͷShim͕ݱ࣮ͱဃ͍ͯ͠Δ • jQueryUIͷఫୀ͕Ͱ͖ͳ͍ 13
Slide 14
Slide 14 text
டংͨΒ͢ํ๏ 14 ·ΕΔடং γϯϓϧ εϐʔυ • πʔϧνΣʔϯͷೖޱ͔Β࣍త ʹஔ͖͑Δ • औࣺબ͢Δ • ઃఆΛݟͯ͠γϯϓϧʹ͢Δ • ίπίπΔ ͷͨΊʹ
Slide 15
Slide 15 text
৽Ϗϧυߏ 15 DPSFKT
Slide 16
Slide 16 text
৽ςετߏ 16 $PSFKT ݸผͷ݁Ռ ࣮ߦ
Slide 17
Slide 17 text
։ൃ͕ૣ͘ͳͬͨ • Ϗϧυ͢Δʹ30sec • ςετ͕30sec ςετྔ૿͑ͨͷʹ͕࣌ؒ૿͑ͳ͍ • ୯ମͰςετͰ͖͍ͯΔ • ςετΧόϨοδ͕Θ͔ΔΑ͏ʹͳͬͨ • ઃఆ͕ݮͬͨ • օ͕ESlintͷϧʔϧ࠷దԽΛ͢ΔΑ͏ʹͳͬͨ 17
Slide 18
Slide 18 text
͋ͳͨԿΛ͠·͔ͨ͠ʁ • Flowఫୀ • BabelͱESLintͷઃఆ࠷దԽ • Browserify->WebpackҠߦ • Karma+PhatomJS -> JestҠߦ • jQueryUIఫୀ 18
Slide 19
Slide 19 text
Flowఫୀ w ߦΛಓʹͬͨ • δϣΠϯ࣌ͷλεΫͱͯ͠ྑ͔ͬͨ • Ұؾჿʹมߋͤͣࡉ͔͘Commit • FlowͷܕΛTypescriptͷܕʹॻ͖͑ͨ 19
Slide 20
Slide 20 text
BabelͱESLint࠷దԽ • FlowͷͨΊʹඞཁͳઃఆϑΝΠϧΛݮΒͤͨ • TSLintͱESLintͷಉډΛESLintʹҰຊԽ • ESLintͰPrettierΛॻ͚ΔΑ͏ʹ • Babel-Poly f i ll͔Β babel-preset-env + core-jsʹҠߦ 20 γϯϓϧʹͳͬͨ݁ՌνʔϜʹLintΧελϚΠζश׳͕͍ͭͨ
Slide 21
Slide 21 text
BrowserifyҠߦ • WebpackʹҠߦ • νϟϯΫׂͱ͍ͬͨ࠷దԽΛߦ͏Α͏ʹ • Ϗϧυͨ͠ίʔυʹIE11ඇରԠίʔυؚ͕· Ε͍ͯͳ͍͔੩తղੳ͢ΔCIΛGithubActions ʹՃ 21 Ҡߦͷ݁ՌϏϧυ͕࣌ؒʹ
Slide 22
Slide 22 text
IEඇରԠίʔυͷνΣοΫ 22 DPSFKT ͜ͷϑΝΠϧΛ੩తղੳ͢Δ↗ https://www.npmjs.com/package/compat-cli Ξϩʔԋࢉࢠؚ͕·Ε͍ͯͳ͍͔
Slide 23
Slide 23 text
JestҠߦ • before, afterΛbeforeAll, afterAllʹมߋ͢Δͩ ͚Ͱ΄ͱΜͲͷςετ͕ಈ͍ͨ • PhantomJSͱKarmaΛఫୀ • karma-html2js-processorʹ૬͢Δॲཧࣗ࡞ • windowʹจࣈྻͰͷhtml͕͋ΔఆͰॻ͔Ε͍ͯΔςετͷέΞ 23 ςετͷߏ͕γϯϓϧʹͳͬͨ
Slide 24
Slide 24 text
৽ςετߏͷ͜͜Βล 24 $PSFKT ݸผͷ݁Ռ ࣮ߦ
Slide 25
Slide 25 text
jQuery-UIఫୀ • ͜͜·Ͱ༻ҙ͖ͯͨ͠ͷΛָͬͯʹ։ൃ • jQueryUIϥΠϒϥϦͷ͓ֆ͔͖ػೳΛߋ৽ • ςετʹJest • ίϯϙʔωϯτಈ࡞νΣοΫʹStroybook • νϟϯΫׂʹWebpackΛͬͨ 25
Slide 26
Slide 26 text
ϑϩϯτΤϯυϞμϯԽͷίπ • աڈͱະདྷͷ྆ํ͕ݟΕΔಏΛಘΔ • աڈͷൃදͱ͔ಡΈղ͘ • ϑϩϯτΤϯυͷϑϩϯτϥϯφʔΛΔ • Ұؾʹม͑ΔͷͰͳ͘ॱΛ౿·͑ͯਐΊΔ • झຯͰࡉ͔͍ϓϩδΣΫτΛ1͔Β࡞ΔRTA͢Δ 26
Slide 27
Slide 27 text
͜Ε͔ΒடংΛҡ࣋͢Δͧ 27 ·ΕΔடং γϯϓϧ εϐʔυ • Ϗϧυ্ • ςετ্ • LintΧελϚΠζͷश׳ఆண ΛٻΊଓ͚ͯ
Slide 28
Slide 28 text
ϑϩϯτΤϯυϞμϯԽࡾํྑ͠ • νʔϜϝϯόʔྑ͠ • ػೳ։ൃͷෛ୲͕ܰݮ͢Δ • ࣗྑ͠ • ϓϩμΫτͷաڈͱະདྷͷཧղ͕ਂ·Δ • ੈؒྑ͠ • ΑΓ༏ΕͨϓϩμΫτΛఏڙͰ͖Δ 28
Slide 29
Slide 29 text
ͯͳͰ ΞʔΩςΫνϟͷࢹΛશ࣌ʹ͛ͳ͕Β ࣗ,ϝϯόʔ, ੈؒͷ̏ऀΛྑ͍ͯ͘͘͠ Λ࣋ͬͨΤϯδχΞΛืू͍ͯ͠·͢ʂ 29