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
2.5k
5
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
これからのメタプログラミングJavaScriptの正義を語ろう / meta programming JavaScript is Justice
コーディングタイムコンパイル
暖かき溢れる手作業による重複を根絶する
生産性を向上して、相対賃金を上げる
erukiti
November 18, 2017
More Decks by erukiti
See All by erukiti
Codex時代の新たなバイブコーディングワークフロー/ after Codex workflow
erukiti
9
4k
Claude Codeを使って不確実性と戦う / claude-code-fights-uncertainty
erukiti
10
4.7k
Claude Code活用において、メンタルモデルを変える必要がある / rethinking-claude-code-mental-models
erukiti
20
14k
AIとの対話で加速する学び / ai learnig
erukiti
1
980
コーディングエージェントを作ってるけどうまくいかなかった話 ~あるいは二ヶ月本気でコーディングエージェントと向き合った話~ / Two Month Agent Struggle
erukiti
40
21k
Gemini 2.0 Flashで実現する高コスパAI開発 〜実践的プロンプトエンジニアリングと文書管理システムの実装例〜/gemini-2.0-flash-prompt-engineering
erukiti
17
7.1k
LLMをねじ伏せる/Conquer the LLM
erukiti
0
290
鮮度が高すぎて世界で誰も正解を見つけてない課題に取り組んでいる/ Freshness issues
erukiti
1
980
実演TypeScript + GitHub Copilot
erukiti
9
4.7k
Other Decks in Programming
See All in Programming
Flow は今どうなっているか
mizdra
PRO
0
920
AIを上手に使っていこうとしたら越境せざるを得なくなった話 〜実践1年で見えた境界を越えなければならない理由と進め方〜 / Crossing borders with AI
tomoyakitaura
3
1k
XHTMLが残したもの
yosuke_furukawa
PRO
1
390
GraphRAGのKnowledge Graphを 直接!見る/View-GraphRAG's-KnowledgeGraph-directly!
tyumugi1113
0
220
PHPプロジェクトの結合バランスを可視化する #php_night
kajitack
0
210
自分的「カンファレンスの楽しみ方」
syumai
0
190
PyConJP2026_wat_Python × Signal Processing: How to Draw Pictures with Sound Using Spectrogram Art
wat
0
660
Seeing Through Serverless: Observability for AWS Lambda with ADOT and CloudWatch Application Signals
seike460
PRO
1
120
Claude Codeを組織的に動かして月400PRを実現した話
happy_ryo
0
250
Can LLMs Replicate 4 Years of Compose Migration? Exploring the boundaries of automation with 279 XML files from a real product
makun
0
130
ハーネス設計入門 〜プロンプト、コンテキストの次〜
kinopeee
53
35k
Deep dive into the select statement (GopherCon UK)
jespino
0
170
Featured
See All Featured
We Are The Robots
honzajavorek
0
330
We Have a Design System, Now What?
morganepeng
55
8.3k
Gemini Prompt Engineering: Practical Techniques for Tangible AI Outcomes
mfonobong
2
520
Reality Check: Gamification 10 Years Later
codingconduct
0
2.3k
How to Grow Your eCommerce with AI & Automation
katarinadahlin
PRO
1
260
Why Your Marketing Sucks and What You Can Do About It - Sophie Logan
marketingsoph
0
400
BBQ
matthewcrist
89
10k
エンジニアに許された特別な時間の終わり
watany
108
250k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
249
1.3M
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
123
22k
Measuring Dark Social's Impact On Conversion and Attribution
stephenakadiri
2
270
Paper Plane (Part 1)
katiecoart
PRO
1
10k
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ຊɺΞοϓσʔτ༧ఆͰ͢ɻ