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
メタプログラミングと生産性 / meta-programming
Search
erukiti
February 21, 2018
Programming
8
2.9k
メタプログラミングと生産性 / meta-programming
メタプログラミングを生産性向上手段の一つとして知っておくと、プログラマ人生が捗るかもしれません!
erukiti
February 21, 2018
Tweet
Share
More Decks by erukiti
See All by erukiti
Gemini 2.0 Flashで実現する高コスパAI開発 〜実践的プロンプトエンジニアリングと文書管理システムの実装例〜/gemini-2.0-flash-prompt-engineering
erukiti
17
6.1k
LLMをねじ伏せる/Conquer the LLM
erukiti
0
150
鮮度が高すぎて世界で誰も正解を見つけてない課題に取り組んでいる/ Freshness issues
erukiti
1
780
実演TypeScript + GitHub Copilot
erukiti
9
4.3k
Function Calling対応Playgroundを作って検証してみた/LLMMeetup#3
erukiti
0
500
プロンプトを管理しやすくするツールを作ってみた / I created a tool to make the prompts easier to manage.
erukiti
3
2k
実践モブプログラミング/ mob programming practice
erukiti
3
1.5k
今日からアウトプットを始めよう / let's start the output from today
erukiti
1
770
Markdownをスクリプト言語として走らせてみた / actual-code
erukiti
0
4.3k
Other Decks in Programming
See All in Programming
Memory API : Patterns, Performance et Cas d'Utilisation
josepaumard
0
140
AIコーディングの理想と現実
tomohisa
22
30k
タイムゾーンの奥地は思ったよりも闇深いかもしれない
suguruooki
1
670
スモールスタートで始めるためのLambda×モノリス(Lambdalith)
akihisaikeda
2
280
地域ITコミュニティの活性化とAWSに移行してみた話
yuukis
0
240
Dissecting and Reconstructing Ruby Syntactic Structures
ydah
0
720
Deoptimization: How YJIT Speeds Up Ruby by Slowing Down / RubyKaigi 2025
k0kubun
0
840
小田原でみんなで一句詠みたいな #phpcon_odawara
stefafafan
0
340
Compose Hot Reload is here, stop re-launching your apps! (Android Makers 2025)
zsmb
1
510
「”誤った使い方をすることが困難”な設計」で良いコードの基礎を固めよう / phpcon-odawara-2025
taniguhey
0
160
ウォンテッドリーの「ココロオドル」モバイル開発 / Wantedly's "kokoro odoru" mobile development
kubode
1
140
Boost Your Performance and Developer Productivity with Jakarta EE 11
ivargrimstad
0
1.7k
Featured
See All Featured
jQuery: Nuts, Bolts and Bling
dougneiner
63
7.7k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
5
520
A designer walks into a library…
pauljervisheath
205
24k
What's in a price? How to price your products and services
michaelherold
245
12k
Site-Speed That Sticks
csswizardry
5
490
Designing Experiences People Love
moore
141
24k
The World Runs on Bad Software
bkeepers
PRO
67
11k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
32
2.2k
Fashionably flexible responsive web design (full day workshop)
malarkey
407
66k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
26k
The Art of Programming - Codeland 2020
erikaheidi
53
13k
Into the Great Unknown - MozCon
thekraken
37
1.7k
Transcript
ϝλϓϩάϥϛϯάͱ ੜ࢈ੑͷ NFUBQSP@FT !FSVLJUJ
ࣗݾհ w FSVLJUJ 5XJUUFS (JUIVC 2JJUB .FEJVNͳͲ w Ҿ͖͜ΓؾຯϑϦʔϥϯεΤϯδχϟʔ
ڭࡐ࡞ͱ͔ ϥΠλʔͬΆ͍ײ͡ͷ͜ͱʜ w όοΫΤϯυϝΠϯ ϑϩϯτΤϯυɾΠϯϑϥͳͲ w ͖ͳݴޠ5ZQF4DSJQU ͱ͍͏͔ܕͷ͋Δ&$."4DSJQU w ಉਓࢽಉਓࢽۀԽಉਓࢽಉਓࢽ ߹ಉࢽ ۀԽਐߦத߹ಉࢽࣥචதˍಉਓࢽࣥචத
+4FSͱͯ͠৽ࢀऀ w &MFDUSPOͷҝʹ+BWB4DSJQUΛ࢝ΊΔ w $P⒎FF4DSJQU&45ZQF4DSJQU &4&4 'MPX5ZQF4DSJQU w %0.$44ͳͲͷݟ͕গͳ͍
͖ͬΆ͍ح৺Ԣ w ڈޙ͔ΒͷྲྀΕ ϑϨʔϜϫʔΫ࡞ϝ λϓϩάϥϛϯά҉߸௨՟ɾϒϩοΫνΣʔ ϯɾίϯϐϡʔλϏδϣϯ w ࠷ۙͪΐͬͱϝλϓϩάϥϛϯά͔ΒΕ͍ͯ ͨʜɻʢ"45ຊͷۀԽ͕ετοϓதʜʜ
w కΊΓۦಈ։ൃɺకΊΓۦಈࣥචɺษڧձۦ ಈษڧ
NFUBQSP@FT w ڈळࠒͷ+BWB4DSJQUࡇΓͷ࣌ʹQPUBUPE͞Μͱ ॳΊͯ͋ͬͯɺͦͷ͋ͱʮͳΜ͔ษڧձ։࠵͠· ͤΜ͔ʁʯͱ͓͕͚ͯ͠Βͬͨ w ͪΐͬͱ͍ͨͨͯͯ͠ɺ݁ہ݄ʹೖͬͯϝλ ϓϩͷษڧձΓ͍ͨͰ͢ʂͱݴͬͨΒ։࠵͕ܾ ఆ͠·ͨ͠ɻ w
৭ʑ͍͚ͬͯͨͩͯ΄Μͱ͋Γ͕͍ͨݶΓͰ͢ʂ
͘͞ΒΠϯλʔωοτ͞Μ ձͷ͝ఏڙ ͋Γ͕ͱ͏͍͟͝·͢ʂʂ
ΞδΣϯμ w ϝλϓϩάϥϛϯάͱԿ͔ w ੜ࢈ੑ w దͳબࢶͷҰͭͱͯ͠ͷϝλϓϩάϥϛ ϯά
None
ྫ w %#εΩʔϚఆ͔ٛΒɺσʔλϞσϧϦϙδ τϦύλʔϯΛࣗಈੜ w σʔλϞσϧ͔Β42-จΛࣗಈੜ w %4-Λݩʹύʔαʔ ߏจղੳث
Λੜ w ؔΛड͚औͬͯ߹͢Δؔ
ྫ w -JTQΈ͍ͨʹߏจΛࣗͰఆٛͰ͖Δݴޠ w 4DBMBͷϚΫϩ w ςϯϓϨʔτݴޠ ಛʹνϡʔϦϯάશͳ ͭ
w ϦϑϨΫγϣϯ ಈతʹใΛऔಘͨ͠Γॻ͖ ͑ͨΓ
˞ͨͩ͠ɺҙ͠ͳ͍ͱ ؆୯ʹࠇຐज़ ෛͷҨ࢈ʹͳΓ·͢
ͦͦϝλͱʁ
None
༷ʑͳϝλ w ࡞தͷΩϟϥ͕࡞ͷ֎ʹݴٴ͢Δʮϝλ ൃݴʯ w σʔλຊମʹରͯ͠σʔλΛཧ͢ΔͨΊͷ ใΛ༩͢Δʮϝλσʔλʯ w ྲྀߦΓͷσοΩΛલఏͱͨ͠ಛघͳઓུΛલ ఏͱ͢ΔσοΩߏஙʮ˓˓ϝλσοΩʯ
None
நͱ۩ w ϓϩάϥϛϯά ཁ݅ఆ͔ٛΒίʔσΟϯά· Ͱશ෦ؚΊΔ ɺେମநͱ۩ͷߦ͖དྷ ਓؒ χʔζϏδωεϩδοΫɺཁ݅ ઃܭ ΞʔΩςΫνϟͳͲେ͖ͳઃܭ
ৄࡉઃܭ ͬͱৄࡉʹ;Έ͜Μͩઃܭ ൚༻࣮ ൚༻ͷߴ͍ίʔυ ݸผ࣮ ৄࡉͳࣄʹ౿ΈࠐΜͩίʔυ
நͱϝλϓϩάϥϛϯά w ந͕ߴ͍ɺߴϨϕϧϓϩάϥϛϯάͬͯ ੑೳ͕མͪͦ͏͚ͩͲɺϝλϓϩάϥϛϯά Ͱίʔυੜ͢Εʜ w ϝλϓϩάϥϛϯάͬͯͦ͠͏ʹࢥ͑Δ͚ ͲɺৗతʹநԽͱ͔ͬͯΔϓϩάϥϚ ʹͱͬͯ͞΄Ͳқͷߴ͍ͷͰͳ͍ ͷͰʁʁ
None
None
ϓϩάϥϚͷੜ࢈ੑ w ͔͔ͬͨ࣌ؒ ίετ ʹର͢ΔɺՌͩͱࢥ ͏͕ɺࢦඪ͕͍͠ ίʔυͷߦʁ͍͡Γ ͢͞ʁ࣭ʁṶֹ͔ͬͨۚʁ w
Ͱ૬ରతʹࢉग़Ͱ͖Δ ಉ͜͡ͱΛୡ ͢Δͷʹཁ͢Δ࣌ؒͷࠩ w ഒʙഒͷࠩΛ࣋ͭਓ͕͍Δͱ͍ΘΕΔ
ͦͦ ͳͥੜ࢈ੑʹେ͖ͳ͕ࠩ͋Δʁ w ݸʑਓͷೳྗࣗମ͕ഒͷࠩΛੜΈग़ ͢ͷ͔ʁ w ಉ͡ࢥߟํ๏ͳΒ ࢥߟ͕ഒͷਓ͕ؒ ͍Δͱߟ͑ʹ͍͘ w
εϖοΫͷҧ͍ΑΓɺΓํͷҧ͍ͷํ͕ ܾఆతͳࠩʹͳΔͷͰʁ
తୡʹͱͬͯ࠷ݶͳ ఔ͚ͩΛಥ͖٧ΊΕ ͦΕ͕࠷ͳͷͰʁ
Α͋͘Δແବ w ͦͷ࣌ͰΒͳ͍͍ͯ͘͜ͱΛ͍ͬͯΔ w ͦͷ࣌Ͱͬͯͳ͍ͱ͍͚ͳ͍͜ͱΛ͍ͬͯͳ ͍ w ࣺͯͨํ͕ૣ͍࣌ʹɺແཧʹ࠶ར༻ w ෆඞཁʹ
ͳઃܭɺίʔυ w ΑΓΑ͍ख๏ɾಓ۩͕͋ΔͷʹΒͳ͍ɺ͑ͳ͍
ແବΛ͙ w ਖ਼͍͠ఔཧ ಛʹઓུͷޡΓΛઓज़ͰऔΓ ͞ͳ͍͜ͱ͕ॏཁ w ΑΓޮతͳखஈΛબΔΑ͏ʹखࡳΛ૿ ͢ w
ͦͷத͔ΒదͳબΛ͢Δ
ແବΛ͙ w ਖ਼͍͠ఔཧ ಛʹઓུͷޡΓΛઓज़ͰऔΓ ͞ͳ͍͜ͱ͕ॏཁ w ΑΓޮతͳखஈΛબΔΑ͏ʹखࡳΛ૿ ͢ w
ͦͷத͔ΒదͳબΛ͢Δ ༩͑ΒΕͨࡋྔ͕গͳ͗͢Δ߹ స৬Λߟ͑ͨํ͕͍͍͔͠Ε·ͤΜ ἤΓ
None
ϝλϓϩάϥϛϯάʹ ͍͔ͭ͘छྨ͕͋Δ
ϦϑϨΫγϣϯػೳ w ϝιουݺͼग़͠ϓϩύςΟΞΫηεΛIBDL ͢Δ w ຊདྷΒͳ͍͍ͯ͘ใΛऔಘͨ͠Γॻ͖ ͑ͨΓ
None
$ cat test.js class Hoge {} const hoge = new
Hoge() const fuga = new Proxy(hoge, { get(target, name) { console.log(`${target}の${name}をgetしにきやがりました`) return 'みせねーよ!' }, set(target, name, value) { console.log(`${target}の${name}に${value}をsetしにきやがりました。ふてえ やろうだ!`) } }) console.log(fuga.x) fuga.y = 10 $ node test.js [object Object]のxをgetしにきやがりました みせねーよ! [object Object]のyに10をsetしにきやがりました。ふてえやろうだ!
੩తͳͷ߹Θٕͤ w #BCFMͱ͔ w 8FCQBDLͱ͔ w QFHKTͱ͔ w CBCFMSFHJTUFS SFRVJSFIBDL
ϦϑϨΫγϣϯΛΘͳͯ͘ w ؔܕݴޠͷઃܭࢀߟʹͳΔ w ݴޠ%4- +4ͩͱදݱͮ͠Β͍͔ͳʜ w 03Ϛούʔͱ͔ʁ
ϝλϓϩάϥϛϯάΛؚΊͯ ݸʑͷख๏બࢶͷҰͭ
ݸਓతײ w ۩తͳίʔυΛ͍͍ײ͡ʹݮΒͭͭ͠ɺແବͳநԽΛ ͠ͳ͍ͱ͍͏όϥϯεײ͕֮؊ w ߴϨϕϧϓϩάϥϜʹੑೳతແବ͕͋Δͱ͍ΘΕΔ͚Ͳ ϝλϓϩάϥϛϯάʹΑΔίʔυੜͰ͋Δఔ͛Δ w ۩తͳίʔυΛݮΒ͢खஈͱͯ͠ϝλϓϩ͕ͬͱධՁ ͞Ε͍͍ͯͱࢥ͏Μͩʜʜ
w %3: ,*44 :"(/*͋ͨΓͷݪଇେ͖Ͱ͢
·ͱΊ w ϝλϓϩάϥϛϯάϓϩάϥϜΛѻ͏ϓϩάϥϜ w ͦ͠͏͚ͩͲͦ͏Ͱͳ͍ ߹ʹΑͬͯ໘ͩͬͨΓ ࠇຐज़ʹͳΓ͕ͪͰ͋Δ͚Ͳ w நͱ۩Λߦ͖དྷ͢Δͷ͕ϓϩάϥϚ
w ੜ࢈ੑͦͷόϥϯεͷऔΓํʹେ͖͘ࠨӈ͞ΕΔ ࣋ w ϝλϓϩάϥϛϯάόϥϯεͷྑ͍நԽΛΔखஈͷ ͻͱͭ
͝ΊΜͳ͍͞ DPOOQBTTϖʔδʹॻ͍ͯͨ ਅͷ%3:࣍ͷωλʹ͠·͢ʂʂ ࣍ɺ͋Εʂ
͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠