はてなブログのフロントエンドに秩序はもたらされたのか
by
NanimonoDemonai
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
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