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
3.9k
Claude Codeを使って不確実性と戦う / claude-code-fights-uncertainty
erukiti
10
4.6k
Claude Code活用において、メンタルモデルを変える必要がある / rethinking-claude-code-mental-models
erukiti
20
14k
AIとの対話で加速する学び / ai learnig
erukiti
1
950
コーディングエージェントを作ってるけどうまくいかなかった話 ~あるいは二ヶ月本気でコーディングエージェントと向き合った話~ / 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
970
実演TypeScript + GitHub Copilot
erukiti
9
4.6k
Other Decks in Programming
See All in Programming
Apache Hive: そしてCloud Native Lakehouseへ
okumin
1
110
Snowflake Summitでの新機能 CoCo / CoWork / snowflake-summit-2026-overall-what-new-coco
tatsuhiro
1
230
symfony/aiとlaravel/boost
77web
0
130
【やさしく解説 設計編 #1】「ドメイン駆動」と「実装駆動」ってなに? 〜設計の考え方を、たとえ話で学ぼう〜
panda728
PRO
1
120
共通化で考えるべきは、実装より公開する型だった
codeegg
0
240
初めてのKubernetes 本番運用でハマった話
oku053
0
120
気圧・高度・GPSを記録&可視化するアプリ「Koudo」を作った話
hjmkth
1
360
Creating Composable Callables in Contemporary C++
rollbear
0
210
Developing with AI Agents — Codex, Claude Code & Cowork Practical Guide
x5gtrn
PRO
0
1.4k
Claude Team Plan導入・ガイド
tk3fftk
0
190
フィードバックで育てるAI開発
kotaminato
1
120
Claude Opus 4.6以後の受託開発エンジニアの変化(Claude Code開発ノウハウ大公開スペシャルbyクラスメソッド)
iidatakuma
1
730
Featured
See All Featured
The Impact of AI in SEO - AI Overviews June 2024 Edition
aleyda
5
1.1k
brightonSEO & MeasureFest 2025 - Christian Goodrich - Winning strategies for Black Friday CRO & PPC
cargoodrich
3
750
More Than Pixels: Becoming A User Experience Designer
marktimemedia
3
460
Agile that works and the tools we love
rasmusluckow
331
22k
Tell your own story through comics
letsgokoyo
1
990
A brief & incomplete history of UX Design for the World Wide Web: 1989–2019
jct
2
420
Building a Modern Day E-commerce SEO Strategy
aleyda
45
9.1k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.8k
Building a Scalable Design System with Sketch
lauravandoore
463
34k
Navigating the moral maze — ethical principles for Al-driven product design
skipperchong
2
420
Applied NLP in the Age of Generative AI
inesmontani
PRO
4
2.4k
Building AI with AI
inesmontani
PRO
1
1.1k
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ຊɺΞοϓσʔτ༧ఆͰ͢ɻ