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.2k
LLMをねじ伏せる/Conquer the LLM
erukiti
0
160
鮮度が高すぎて世界で誰も正解を見つけてない課題に取り組んでいる/ Freshness issues
erukiti
1
790
実演TypeScript + GitHub Copilot
erukiti
9
4.4k
Function Calling対応Playgroundを作って検証してみた/LLMMeetup#3
erukiti
0
510
プロンプトを管理しやすくするツールを作ってみた / 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
780
Markdownをスクリプト言語として走らせてみた / actual-code
erukiti
0
4.3k
Other Decks in Programming
See All in Programming
Optimizing JRuby 10
headius
0
590
Improve my own Ruby
sisshiki1969
1
110
七輪ライブラリー: Claude AI で作る Next.js アプリ
suneo3476
1
190
インプロセスQAにおいて大事にしていること / In-process QA Meetup
medley
0
170
ドメイン駆動設計とXPで支える子どもの未来 / Domain-Driven Design and XP Supporting Children's Future
nrslib
0
200
監視 やばい
syossan27
12
10k
GitHub Copilot for Azureを使い倒したい
ymd65536
1
330
REALITY コマンド作成チュートリアル
nishiuriraku
0
120
マイコンでもRustのtestがしたい/KernelVM Kansai 11
tnishinaga
0
870
ComposeでWebアプリを作る技術
tbsten
0
130
一緒に働きたくなるプログラマの思想 #QiitaConference
mu_zaru
81
21k
生成AI時代のフルスタック開発
kenn
3
400
Featured
See All Featured
Embracing the Ebb and Flow
colly
85
4.7k
The Cost Of JavaScript in 2023
addyosmani
49
7.8k
Statistics for Hackers
jakevdp
799
220k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
233
17k
Stop Working from a Prison Cell
hatefulcrawdad
268
20k
Making Projects Easy
brettharned
116
6.2k
Large-scale JavaScript Application Architecture
addyosmani
512
110k
Gamification - CAS2011
davidbonilla
81
5.3k
Unsuck your backbone
ammeep
671
58k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
3.8k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
32
5.6k
Producing Creativity
orderedlist
PRO
344
40k
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:࣍ͷωλʹ͠·͢ʂʂ ࣍ɺ͋Εʂ
͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠