Save 37% off PRO during our Black Friday Sale! »

これからのメタプログラミングJavaScriptの正義を語ろう / meta programming JavaScript is Justice

A6a5e01b331d18dbd9c5de1f2cc2879f?s=47 erukiti
November 18, 2017

これからのメタプログラミングJavaScriptの正義を語ろう / meta programming JavaScript is Justice

コーディングタイムコンパイル
暖かき溢れる手作業による重複を根絶する
生産性を向上して、相対賃金を上げる

A6a5e01b331d18dbd9c5de1f2cc2879f?s=128

erukiti

November 18, 2017
Tweet

Transcript

  1. ͜Ε͔Βͷ ϝλϓϩάϥϛϯά JavaScriptͷਖ਼ٛΛޠΖ͏ @erukiti ϝλϓϩάϥϚ(AST෩)

  2. @erukiti • కΊ੾ΓۦಈͰٕज़ॻΛࣥච • ۭ૝ɾໝ૝υϦϒϯΤϯδχΞ • ϑϩϯτΤϯυ͋·Γ΍ͬͨ͜ͱͳ͍όοΫΤϯυ ͷܦྺ͹͔Γͳແ৬ (࣌ʑϑϦʔͰ࢓ࣄͯ͠Δ) •

    ࠷ۙ͸ɺASTΛ׆༻ͨ͠property based testingͷ࡞ ੒΄͔ɺͻͨ͢ΒAST৮ͬͯΔ
  3. ʮͰ͖ΔΤϯδχΞ͸ ੜ࢈ੑ͕Ұܻɾೋܻҧ͏ʯ

  4. ੈք͸अѱʹຬ͍ͪͯΔ

  5. ߦ௒͑ؔ਺ OJDFDBUDI ແࢹ͞ΕΔXBSOJOH ॥؀తෳࡶ౓௒͑ *%&͕ແ͍ͱίʔυͷ೺Ѳ͕Ͱ͖ͳ͍  ফͨ͠Βಈ͔ͳ͘ͳΓ·͢  ໊લۭؒԚછ ಉ͡ϩδοΫ͕ෳ਺Օॴʹ

    ʮ਺ࣈͬΆ͍จࣈྻͳͷͰ਺ࣈʹม׵͓͖ͯ͠·ͨ͠ʯ Ϣχοτςετ͕શ͘ແ͍ ͓·͡ͳ͍ ίϐϖϓϩάϥϛϯά ҉໧ͷܕม׵ Ͳ͜Λॻ͖׵͑Ε͹͍͍ͷ͔Θ͔Βͳ͍ ҰՕॴॻ͖׵͑ͨΒଞʹӨڹͰ·ͬͨ͘ DPOTPMFMPH IPHF ফ͢ͱԿނ͔ಈ͔ͳ͍ ಉ͡ϩδοΫ͕ෳ਺Օॴʹ
  6. ϘʔϧυϚʔΧʔ

  7. ਓ͕ؒཧղͰ͖Δఔ౓ʹ͸ γϯϓϧʹ͍ͨ͠

  8. ରࡦํ๏ • Ϋϥε΍ϝιουͷ੹຿ΛݮΒ͢ (جຊ͸୯Ұ ੹຿ͷݪଇ) • ૄ݁߹ʹ͢Δ • ෼ׂ౷࣏͢Δ •

    DRYݪଇΛकΔ
  9. DRY - Don’t Repeat Yourself • ʮ͋ͳͨͷखͰ܁Γฦͯ͠͸͍͚ͳ͍ʯ • ͭ·Γʮ͋ͳͨͷखʯ͡Όͳ͔ͬͨΒ܁Γฦ ͯ͠΋͍͍

    • ܁Γฦ͕͠ಘҙͰɺͱͯ΋ਖ਼֬ͳϠπʹ΍Βͤ Α͏
  10. ͦ͜Ͱϝλϓϩάϥϛϯά

  11. ϝλϓϩάϥϛϯά • ιʔείʔυͰιʔείʔυΛੜ੒͢Δ • ੜ੒ݩ͕DRYͰ͑͋͞Ε͹͍͍ • ੩తͳϝλϓϩͱಈతͳϝλϓϩ͕͋Δ

  12. None
  13. Babel • JSքͰҰ൪࢖ΘΕͯΔɺϝλϓϩάϥϛϯά ʹΑΔϓϩμΫτ • ϓϥάΠϯ΍ͦͷू߹ମͰ͋ΔϓϦηοτΛ ࢖ͬͯιʔείʔυΛม׵͢Δ • ϓϥάΠϯ࡞Δͷ͸ɺπʔϧνΣΠϯͷαϙʔ τ͕͋ΔͷͰ͔ͳΓ؆୯

  14. BabelπʔϧνΣΠϯ • ࣈ۟ղੳͱ͔໘౗͝ͱ͸શͯҾ͖ड͚ͯ͘Ε Δ • ؔ਺ఆٛɺม਺ఆٛɺೋ߲ԋࢉͳͲɺಛఆͷ ෦෼Λநग़Ͱ͖Δ • ੩తղੳʹΑΔม਺ͷείʔϓղੳɺ͋Δఔ ౓ͷࣗಈ࠷దԽ

  15. • 100ߦҎ಺Ͱͬ͘͞ΓDIΛ࡞ΕΔ • 100ߦҎ಺Ͱͬ͘͞Γ࠷దԽϓϥάΠϯΛ࡞Ε Δ • 100ߦҎ಺Ͱͬ͘͞ΓԋࢉࢠΦʔόϥΠυΛ࣮ ݱͰ͖Δ BabelͰͰ͖Δ͜ͱͷྫ

  16. https://github.com/erukiti/autodebugger

  17. ͜Ε͔Βͷϝλϓϩάϥϛϯά • BabelͷΤίγεςϜʹ৐͔ͬΔ • جຊ͸ࣄલbuild • ։ൃ࣌͸਺ߦ଍ͤ͹ಈతॻ͖׵͑΋Մೳ • ίʔσΟϯάλΠϜίϯύΠϧͱ͍͏৽ٕज़

  18. ίʔσΟϯάλΠϜίϯύΠϧ

  19. None
  20. s2s - source to source • @akameco ͞ΜͷϓϩμΫτ • ϑΝΠϧ͕࡞੒ɾߋ৽͞ΕͨΒࣗಈͰBabelϓϥά

    ΠϯΛ૸ΒͤΔ • React/ReduxΛ௒ߴ଎ίʔσΟϯά • ίʔσΟϯά్தͰ૸ΔίϯύΠϧ͔ͩΒίʔσΟ ϯάλΠϜίϯύΠϧ
  21. s2sͰͰ͖Δ͜ͱ • ReduxͷreducerΛ௥Ճͨ͠Βɺউखʹ combineReducers͞ΕΔ • ϑΝΠϧΛtouchͨ͠ΒςϯϓϨʔτ͕ࣗಈల։ • ؔ਺Λॻ͍ͨΒJsDoc͕ࣗಈੜ੒͞ΕΔ • ؔ਺Λॻ͍ͨΒɺରԠ͢ΔϢχοτςετ͕ࣗಈੜ੒

    ͞ΕΔ
  22. ΞΠσΞ͍ͬͺ͍ɺເ͍ͬͺ͍ • ܕਪ࿦ͰࣗಈͰܕΛ͚ͭΔ • ܕ৘ใ͔ΒassertΛࣗಈੜ੒ • ָͳॻ͖ํͰܖ໿ϓϩάϥϛϯάΛ࣮ݱ͢Δ • طଘͷ΋ͷΑΓ΋ڧྗͳproperty based

    testing͕࣮ݱͰ͖ͦ ͏ • ΤϯτϦϙΠϯτΛॻ͍ͨΒࣗಈͰJSON Scheme Λੜ੒͢Δ
  23. ASTΛ৮Δ͚ͩ͡Όͳ͍ • ࠷ۙϋϯυϥʔͱ͍͏࢓૊Έ͕ೖͬͯɺBabelϓ ϥάΠϯҎ֎΋૸ΒͤΒΕΔΑ͏ʹͳͬͨ • JavaScript, TypeScriptʹݶΒͣ͋ΒΏΔ΋ͷΛ watchͯ͠JSͷίʔυ΍͋Δ͍͸ଞͷԿ͔ʹม׵ ͢Δ͜ͱ΋Ͱ͖Δ •

    ྫ͑͹pegjsΛίʔσΟϯάλΠϜͰม׵Ͱ͖Δ
  24. ίʔσΟϯάλΠϜίϯύΠϧ • ίʔσΟϯά͠ͳ͕ΒϦΞϧλΠϜͰιʔείʔ υ͕ల։͞ΕΔ • ίϯύΠϧࡁΈͳͷͰɺVSCodeͳͲIDEͷࢧ ԉΛ࠷େݶड͚ΒΕΔ • ܕ৘ใ΋׆༻͠์୊

  25. ͜Ε͔Βͷϓϩάϥϛϯάͷਖ਼ٛ • ίʔσΟϯάλΠϜίϯύΠϧͱ͍͏৽ٕज़ • ஆ͔ΈᷓΕΔख࡞ۀΛࠜઈ • ੜ࢈ੑΛ޲্ͯ͠ɺ૬ର௞ۚΛ্͛Δ

  26. ࠂ஌ • ٕज़ॻయ3Ͱ൦෍ͨ͠ʰ؆୯JavaScript ASTೖ ໳ʱ਺࡭࢒ͬͯΔͷͰख౉͠Ͱ൦෍Ͱ͖·͢ɻ • લճͷModern JavaScriptʹଓ͍ͯɺASTຊ΋ ঎ۀԽ࡞ۀਐߦதͰ͢ɻ •

    ঎ۀ൛JSຊɺΞοϓσʔτ༧ఆͰ͢ɻ