Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
これからのメタプログラミングJavaScriptの正義を語ろう / meta programm...
Search
erukiti
November 18, 2017
Programming
5
2.5k
これからのメタプログラミングJavaScriptの正義を語ろう / meta programming JavaScript is Justice
コーディングタイムコンパイル
暖かき溢れる手作業による重複を根絶する
生産性を向上して、相対賃金を上げる
erukiti
November 18, 2017
Tweet
Share
More Decks by erukiti
See All by erukiti
Codex時代の新たなバイブコーディングワークフロー/ after Codex workflow
erukiti
7
1.8k
Claude Codeを使って不確実性と戦う / claude-code-fights-uncertainty
erukiti
10
3.9k
Claude Code活用において、メンタルモデルを変える必要がある / rethinking-claude-code-mental-models
erukiti
20
13k
AIとの対話で加速する学び / ai learnig
erukiti
1
710
コーディングエージェントを作ってるけどうまくいかなかった話 ~あるいは二ヶ月本気でコーディングエージェントと向き合った話~ / Two Month Agent Struggle
erukiti
40
20k
Gemini 2.0 Flashで実現する高コスパAI開発 〜実践的プロンプトエンジニアリングと文書管理システムの実装例〜/gemini-2.0-flash-prompt-engineering
erukiti
17
6.7k
LLMをねじ伏せる/Conquer the LLM
erukiti
0
230
鮮度が高すぎて世界で誰も正解を見つけてない課題に取り組んでいる/ Freshness issues
erukiti
1
890
実演TypeScript + GitHub Copilot
erukiti
9
4.5k
Other Decks in Programming
See All in Programming
詳しくない分野でのVibe Codingで困ったことと学び/vibe-coding-in-unfamiliar-area
shibayu36
3
4.7k
monorepo の Go テストをはやくした〜い!~最小の依存解決への道のり~ / faster-testing-of-monorepos
convto
2
440
アメ車でサンノゼを走ってきたよ!
s_shimotori
0
210
CSC305 Lecture 04
javiergs
PRO
0
260
複雑化したリポジトリをなんとかした話 pipenvからuvによるモノレポ構成への移行
satoshi256kbyte
1
940
Pull-Requestの内容を1クリックで動作確認可能にするワークフロー
natmark
2
480
The Flutter Journey of Building a Live Streaming App — With a Side of Performance Tuning
u503
1
100
登壇は dynamic! な営みである / speech is dynamic
da1chi
0
170
Domain-centric? Why Hexagonal, Onion, and Clean Architecture Are Answers to the Wrong Question
olivergierke
2
700
Things You Thought You Didn’t Need To Care About That Have a Big Impact On Your Job
hollycummins
0
200
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
120
Goで実践するドメイン駆動開発 AIと歩み始めた新規プロダクト開発の現在地
imkaoru
4
770
Featured
See All Featured
GitHub's CSS Performance
jonrohan
1032
460k
The Cult of Friendly URLs
andyhume
79
6.6k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
29
2.6k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
189
55k
Agile that works and the tools we love
rasmusluckow
331
21k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
358
30k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
54
3k
The Illustrated Children's Guide to Kubernetes
chrisshort
48
51k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
667
120k
VelocityConf: Rendering Performance Case Studies
addyosmani
332
24k
Java REST API Framework Comparison - PWX 2021
mraible
33
8.8k
Gamification - CAS2011
davidbonilla
81
5.5k
Transcript
͜Ε͔Βͷ ϝλϓϩάϥϛϯά JavaScriptͷਖ਼ٛΛޠΖ͏ @erukiti ϝλϓϩάϥϚ(AST෩)
@erukiti • కΊΓۦಈͰٕज़ॻΛࣥච • ۭɾໝυϦϒϯΤϯδχΞ • ϑϩϯτΤϯυ͋·Γͬͨ͜ͱͳ͍όοΫΤϯυ ͷܦྺ͔Γͳແ৬ (࣌ʑϑϦʔͰࣄͯ͠Δ) •
࠷ۙɺASTΛ׆༻ͨ͠property based testingͷ࡞ ΄͔ɺͻͨ͢ΒAST৮ͬͯΔ
ʮͰ͖ΔΤϯδχΞ ੜ࢈ੑ͕Ұܻɾೋܻҧ͏ʯ
ੈքअѱʹຬ͍ͪͯΔ
ߦ͑ؔ OJDFDBUDI ແࢹ͞ΕΔXBSOJOH ॥తෳࡶ͑ *%&͕ແ͍ͱίʔυͷѲ͕Ͱ͖ͳ͍ ফͨ͠Βಈ͔ͳ͘ͳΓ·͢ ໊લۭؒԚછ ಉ͡ϩδοΫ͕ෳՕॴʹ
ʮࣈͬΆ͍จࣈྻͳͷͰࣈʹม͓͖ͯ͠·ͨ͠ʯ Ϣχοτςετ͕શ͘ແ͍ ͓·͡ͳ͍ ίϐϖϓϩάϥϛϯά ҉ͷܕม Ͳ͜Λॻ͖͑Ε͍͍ͷ͔Θ͔Βͳ͍ ҰՕॴॻ͖͑ͨΒଞʹӨڹͰ·ͬͨ͘ DPOTPMFMPH IPHF ফ͢ͱԿނ͔ಈ͔ͳ͍ ಉ͡ϩδοΫ͕ෳՕॴʹ
ϘʔϧυϚʔΧʔ
ਓ͕ؒཧղͰ͖Δఔʹ γϯϓϧʹ͍ͨ͠
ରࡦํ๏ • ΫϥεϝιουͷΛݮΒ͢ (جຊ୯Ұ ͷݪଇ) • ૄ݁߹ʹ͢Δ • ׂ౷࣏͢Δ •
DRYݪଇΛकΔ
DRY - Don’t Repeat Yourself • ʮ͋ͳͨͷखͰ܁Γฦ͍͚ͯ͠ͳ͍ʯ • ͭ·Γʮ͋ͳͨͷखʯ͡Όͳ͔ͬͨΒ܁Γฦ ͍͍ͯ͠
• ܁Γฦ͕͠ಘҙͰɺͱͯਖ਼֬ͳϠπʹΒͤ Α͏
ͦ͜Ͱϝλϓϩάϥϛϯά
ϝλϓϩάϥϛϯά • ιʔείʔυͰιʔείʔυΛੜ͢Δ • ੜݩ͕DRYͰ͑͋͞Ε͍͍ • ੩తͳϝλϓϩͱಈతͳϝλϓϩ͕͋Δ
None
Babel • JSքͰҰ൪ΘΕͯΔɺϝλϓϩάϥϛϯά ʹΑΔϓϩμΫτ • ϓϥάΠϯͦͷू߹ମͰ͋ΔϓϦηοτΛ ͬͯιʔείʔυΛม͢Δ • ϓϥάΠϯ࡞ΔͷɺπʔϧνΣΠϯͷαϙʔ τ͕͋ΔͷͰ͔ͳΓ؆୯
BabelπʔϧνΣΠϯ • ࣈ۟ղੳͱ͔໘͝ͱશͯҾ͖ड͚ͯ͘Ε Δ • ؔఆٛɺมఆٛɺೋ߲ԋࢉͳͲɺಛఆͷ ෦Λநग़Ͱ͖Δ • ੩తղੳʹΑΔมͷείʔϓղੳɺ͋Δఔ ͷࣗಈ࠷దԽ
• 100ߦҎͰͬ͘͞ΓDIΛ࡞ΕΔ • 100ߦҎͰͬ͘͞Γ࠷దԽϓϥάΠϯΛ࡞Ε Δ • 100ߦҎͰͬ͘͞ΓԋࢉࢠΦʔόϥΠυΛ࣮ ݱͰ͖Δ BabelͰͰ͖Δ͜ͱͷྫ
https://github.com/erukiti/autodebugger
͜Ε͔Βͷϝλϓϩάϥϛϯά • BabelͷΤίγεςϜʹ͔ͬΔ • جຊࣄલbuild • ։ൃ࣌ߦͤಈతॻ͖͑Մೳ • ίʔσΟϯάλΠϜίϯύΠϧͱ͍͏৽ٕज़
ίʔσΟϯάλΠϜίϯύΠϧ
None
s2s - source to source • @akameco ͞ΜͷϓϩμΫτ • ϑΝΠϧ͕࡞ɾߋ৽͞ΕͨΒࣗಈͰBabelϓϥά
ΠϯΛΒͤΔ • React/ReduxΛߴίʔσΟϯά • ίʔσΟϯά్தͰΔίϯύΠϧ͔ͩΒίʔσΟ ϯάλΠϜίϯύΠϧ
s2sͰͰ͖Δ͜ͱ • ReduxͷreducerΛՃͨ͠Βɺউखʹ combineReducers͞ΕΔ • ϑΝΠϧΛtouchͨ͠ΒςϯϓϨʔτ͕ࣗಈల։ • ؔΛॻ͍ͨΒJsDoc͕ࣗಈੜ͞ΕΔ • ؔΛॻ͍ͨΒɺରԠ͢ΔϢχοτςετ͕ࣗಈੜ
͞ΕΔ
ΞΠσΞ͍ͬͺ͍ɺເ͍ͬͺ͍ • ܕਪͰࣗಈͰܕΛ͚ͭΔ • ܕใ͔ΒassertΛࣗಈੜ • ָͳॻ͖ํͰܖϓϩάϥϛϯάΛ࣮ݱ͢Δ • طଘͷͷΑΓڧྗͳproperty based
testing͕࣮ݱͰ͖ͦ ͏ • ΤϯτϦϙΠϯτΛॻ͍ͨΒࣗಈͰJSON Scheme Λੜ͢Δ
ASTΛ৮Δ͚ͩ͡Όͳ͍ • ࠷ۙϋϯυϥʔͱ͍͏Έ͕ೖͬͯɺBabelϓ ϥάΠϯҎ֎ΒͤΒΕΔΑ͏ʹͳͬͨ • JavaScript, TypeScriptʹݶΒͣ͋ΒΏΔͷΛ watchͯ͠JSͷίʔυ͋Δ͍ଞͷԿ͔ʹม ͢Δ͜ͱͰ͖Δ •
ྫ͑pegjsΛίʔσΟϯάλΠϜͰมͰ͖Δ
ίʔσΟϯάλΠϜίϯύΠϧ • ίʔσΟϯά͠ͳ͕ΒϦΞϧλΠϜͰιʔείʔ υ͕ల։͞ΕΔ • ίϯύΠϧࡁΈͳͷͰɺVSCodeͳͲIDEͷࢧ ԉΛ࠷େݶड͚ΒΕΔ • ܕใ׆༻͠์
͜Ε͔Βͷϓϩάϥϛϯάͷਖ਼ٛ • ίʔσΟϯάλΠϜίϯύΠϧͱ͍͏৽ٕज़ • ஆ͔ΈᷓΕΔख࡞ۀΛࠜઈ • ੜ࢈ੑΛ্ͯ͠ɺ૬ରۚΛ্͛Δ
ࠂ • ٕज़ॻయ3Ͱ൦ͨ͠ʰ؆୯JavaScript ASTೖ ʱͬͯΔͷͰख͠Ͱ൦Ͱ͖·͢ɻ • લճͷModern JavaScriptʹଓ͍ͯɺASTຊ ۀԽ࡞ۀਐߦதͰ͢ɻ •
ۀ൛JSຊɺΞοϓσʔτ༧ఆͰ͢ɻ