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
Good interface: Command pattern as an example
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
Masafumi Okura
June 08, 2019
Programming
1.4k
1
Share
Good interface: Command pattern as an example
Masafumi Okura
June 08, 2019
More Decks by Masafumi Okura
See All by Masafumi Okura
Metaprogramming isn't real, it can't hurt you
okuramasafumi
0
160
Developing static sites with Ruby
okuramasafumi
1
430
Why doesn't Ruby have Boolean class - final version
okuramasafumi
0
400
Reading Rails 1.0 Source Code
okuramasafumi
0
370
RDoc meets YARD
okuramasafumi
4
250
Why doesn't Ruby have Boolean class?
okuramasafumi
0
54
My KaigiEffect at RubyKaigi 2025, part 1
okuramasafumi
1
110
Writing documentation can be fun with plugin system
okuramasafumi
0
270
Alba: Why, How and What's So Interesting
okuramasafumi
0
520
Other Decks in Programming
See All in Programming
Copilot CLI の継戦能力を高める コンテキスト管理
nozomutu
1
950
AI駆動開発で崩れていくコードベースを立て直す
kyoko_nr_nr
1
360
脅威をエンジニアリングの糧にして――現場編 / Turning Threats into Engineering Fuel — Field Edition
nrslib
0
120
GitHub Copilot CLIのいいところ
htkym
2
1k
cloudnative conference 2026 flyle
azihsoyn
1
210
Hive Metastoreを通して学ぶIceberg REST Catalog ― 仕様から実装まで
okumin
0
280
Transactional Change Stream Processing With Debezium and Apache Flink
gunnarmorling
1
130
デフォルト運用のCodeRabbit、1年で何が変わったか / How CodeRabbit Changed Our Code Review in 1 Year
bake0937
1
100
iOS26時代の新規アプリ開発
yuukiw00w
0
200
Old Dog, New Tricks: The Java 25 Reinvention - JNation
bazlur_rahman
0
120
~ 秘伝のタレ化した『神スプシ』と戦う ~ 関数型パラダイムで壊れない仕組みへ
h0r15h0
1
130
TSKaigi2026-静的解析への投資がAI時代のコード品質を支える ── カスタムESLintルールの設計と運用
hayatokudou
6
1.1k
Featured
See All Featured
コードの90%をAIが書く世界で何が待っているのか / What awaits us in a world where 90% of the code is written by AI
rkaga
61
44k
The Illustrated Guide to Node.js - THAT Conference 2024
reverentgeek
1
360
The AI Search Optimization Roadmap by Aleyda Solis
aleyda
1
5.8k
Navigating Weather and Climate Data
rabernat
0
200
A Modern Web Designer's Workflow
chriscoyier
698
190k
Deep Space Network (abreviated)
tonyrice
0
150
Getting science done with accelerated Python computing platforms
jacobtomlinson
2
210
Amusing Abliteration
ianozsvald
1
180
How Fast Is Fast Enough? [PerfNow 2025]
tammyeverts
3
580
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
360
30k
GraphQLとの向き合い方2022年版
quramy
50
15k
WENDY [Excerpt]
tessaabrams
10
37k
Transcript
ྑ͍ΠϯλʔϑΣΠεͷ୳ٻ ίϚϯυύλʔϯΛྫʹ େխ࢙ʢ@okuramasafumiʣ ໊ݹRubyձٞ04―େਢԋܳ 2019-06-08ʢʣ
ࠓͷൃද͕͋ͪͪ͜ʹ ભҠ͍͖ͯ͠·͢ɻ མޠͩͱࢥָͬͯ͠Έͳ͕Β ͓͔͚͖͍ͬͯͯͩ͘͞!
pp self • ໊લɿ͢ͱ·͞;Έʢେխ࢙ʣ • ॴଐɿϑϦʔϥϯε • ׆ಈॴɿ౦ژ • ͖ͳgemɿPry,
RSpec • ӡӦͯ͠ΔίϛϡχςΟɿGrow.rb
໊ݹRubyձٞ
໊ݹRubyձٞ
զʑͳͥRubyΛ͏ͷ͔
Rubyͷ
զʑͳͥRubyΛ͏ͷ͔ • ॻ͖͍͢ • ʮॻ͖͢͞ʯͬͯͳΜͩΖ͏ • ಡΈ͍͢ • ʮಡΈ͢͞ʯͬͯ(ry •
Rails
զʑ͕RubyΛ͏ཧ༝
ϓϩάϥϛϯάָ͕͍͠
ͳͥRubyͰϓϩάϥϛϯάΛ͢Δͱ ָ͍͠ͷͩΖ͏͔ʁ
https://www.atmarkit.co.jp/news/ 200907/24/ruby2.html
yuguiɿ ͦΕɺίϨΫγϣϯ͕͋ͬͯγϟοϑϧ ͍ͨ͠ͱࢥͬͨΒɺshuffleͱॻ͍ͯɺͦΕ Ͱಈ͔ͳ͖Ό͍͚ͳ͍ΜͰ͢Αɻ
ࢥͬͨͱ͓Γʹಈ͘ ʢৗʹಈ͘ͱݴ͍ͬͯͳ͍ʣ
ͱ͜ΖͰɿ ͳΜͰ͜ͷΛ͍ͯ͠Δͷ͔
ָ͘͠ϓϩάϥϛϯάͰ͖Δ ྖҬΛ͍͛ͨʂ
ϥΠϒϥϦΛॻ͍ͯΈΑ͏ →ॻ͖·ͨ͠
https://github.com/okuramasafumi/ neco
150ߦͪΐ͍ͷϥΠϒϥϦ
2ճ΄Ͳॻ͖͍ͯ͠Δ
ΠϯλʔϑΣΠεʹೲಘ͕͍͔ͳ͔ͬͨ
ΠϯλʔϑΣΠεʹ͍ͭͯ ͍Ζ͍Ζߟ͑ͨͷͰɺ ͦͷՌʢʁʣΛڞ༗͍ͨ͠
ͦͦɿ ΠϯλʔϑΣΠεͬͯ ͳΜ͚ͩͬʁ
Interface (MacOSͷࣙॻΑΓ) 1. a point where two systems, subjects, organizations,
etc. meet and interact 2. Computing a device or program enabling a user to communicate with a computer
ΠϯλʔϑΣΠε ίϯϐϡʔλͱͷίϛϡχέʔγϣϯ ͷͱΓํΛܾఆ͢Δͷ
ΠϯλʔϑΣΠεʹϝιου
ΠϯλʔϑΣΠεʹϝιουγάχνϟ
ʮࢥͬͨͱ͓Γʹಈ͘ʯ
Ruby ΠϯλʔϑΣΠεʢ㲓ϝιουγάχνϟʣ ͕ྑ͍͔ΒΘΕ͍ͯΔ
DSL
ҎԼɺ ʮDSLʯʮݴޠDSLʯΛࢦ͠·͢
Domain Specific Language
Ruby͕ΘΕΔཧ༝ͷҰͭ
RubyʹΑΔDSLͷ۩ମྫ • ActiveRecordʢRailsܥʣ • RakeʢϏϧυܥʣ • RSpecʢBDDʣ • PuppetChefɺVagrantʢDevOpsܥʣ •
HomebrewʢύοέʔδϚωʔδϟʣ
ڞ௨
DSLԿ͔Λఆ͍ٛͯ͠Δ
RubyʹΑΔDSLͷ۩ମྫʢ࠶ܝʣ • ActiveRecordʢRailsܥʣ • RakeʢϏϧυܥʣ • RSpecʢBDDʣ • PuppetChefɺVagrantʢDevOpsܥʣ •
HomebrewʢύοέʔδϚωʔδϟʣ
RubyʹΑΔDSLͷ۩ମྫʢఆٛྫ͖ʣ • ActiveRecordʢσʔλϞσϧͷఆٛʣ • RakeʢϏϧυϓϩηεͷఆٛʣ • RSpecʢ·ΕΔৼΔ͍ͷఆٛʣ • PuppetChefɺVagrantʢ֤छΠϯϑϥϦιʔεͷఆٛʣ •
Homebrewʢύοέʔδͷఆٛʣ
ͱ͜ΖͰɿ DSL୯ͳΔΫϥεϝιου ʢͷ߹͕ଟ͍ʣ
ͭ·Γɿ DSL·ͨΠϯλʔϑΣΠε
͜͜·Ͱͷ·ͱΊ • ΠϯλʔϑΣΠε͕ྑ͍ͱָ͘͠ϓϩάϥϛϯάͰ͖Δ • ΠϯλʔϑΣΠεͱ͍͍ͩͨϝιουγάχνϟͷ͜ͱ • ֤ॴͰΘΕ͍ͯΔDSL࣮ͨͩͷϝιου • DSLʮఆٛʯʹڧ͍ •
ΠϯλʔϑΣΠεʮ७ਮͳϝιουʯͱDSLʹ͚ΒΕΔ
https://rubykaigi.org/2019/ presentations/tanaka_akr.html
ྑ͍ΠϯλʔϑΣΠεͬͯ ͳΜͩΖ͏ʁʁʁ
⚠ ͜Εͯ͢ࢲͷ୯ͳΔҰҙݟͰ͢ Ͳ͔ͬͪͱ͍͏ͱ͕΄͍͠… ࠙ձͰ͓͠·͠ΐ͏
ྑ͍ΠϯλʔϑΣΠεͷ̏ݪଇ • ໎Θͳ͍ • ґଘ͠ͳ͍ • ͤ͗͢ͳ͍
໎Θͳ͍ • ϝιου໊ʹࡾ୯ݱͷʮsʯඞཁ͚ͩͬʁ • ͋ͷΫϥεcallͰݺͿΜ͚ͩͬɺperform͚ͩͬʁ • Πϯελϯεϝιου͚ͩͬɺΫϥεϝιου͚ͩͬʁ • Ҿͷॱংʁ
ґଘ͠ͳ͍ • ϝιουνΣʔϯΛલఏͱ͠ͳ͍ʢಛఆͷฦΓʹґଘ͠ͳ ͍ʣ • ςετ࣌ͷελϒ͕ߴʑҰͭͰࡁΉ
ͤ͗͢ͳ͍ • ΤϯυϢʔβʔ͕ࣗྗͰͰ͖Δ͜ͱΒͳ͍ • ୯७ͳόϦσʔγϣϯʹෳࡶͳDSLຊʹඞཁ͔ʁ • ΤϯυϢʔβʔ͕ࣗྗͰΓͮΒ͍͜ͱΛΔ • νΣʔϯͨ͠ϩʔϧόοΫॲཧࣗྗͰ͍͠ʢޙड़ʣ
௨ৗͷϝιου͔DSL͔ɺ ͦΕ͕ͩ
શ෦ϝιουͰ͍͍͡ΌΜɺ DSLͱ͔֮͑Δͷେมͩ͠ʂ Pure Ruby࠷ߴʂ
ͱࢥͬͯͨ࣌ظ͕ʹ͋Γ·ͨ͠…
ϝιουΠϯλʔϑΣΠεͷॴ • ҾselfͳͲ͕ࣗ໌ • ܧঝͨ͠ͱ͖ʹಈ࡞͕ཧղ͍͢͠ • ͦ͜ʹʮࠇຐज़ʯͳ͍
ϝιουΠϯλʔϑΣΠεͷॴ • ॊೈͳڍಈΛఏڙ͢ΔࡍʹϢʔβʔ͕ॻ͖͘ϝιου͕ࡶ ʹͳΓ͕ͪ • ϥΠϒϥϦ͕ϑϩʔΛίϯτϩʔϧ͠Α͏ͱ͢Δࡍʹඞཁͳ ϑοΫΛࠩ͠ڬΉͷ͕͍͠ʢϢʔβʔʹଟͷϝιουΛఆ ٛͯ͠Β͏ඞཁ͕ग़ͯ͘Δʣ
DSLͷॴ • ϒϩοΫҾϝιουҾΑΓॊೈ • దʹ໋໊͞Ε͍ͯΔ߹ɺՄಡੑ͕ߴ͍ • ϥΠϒϥϦ͕ҙͷॲཧΛϢʔβʔఆٛͷॲཧʹڬΈࠐΊΔ ʢϑοΫΩϟογϡͳͲʣ • ԿΛ͍ͨ͠ͷ͔ͷʮఆٛʯΛએݴతʹॻ͚Δ
DSLͷॴ • ʮࠇຐज़ʯ͕ଟ͘ͳΓ͕ͪͷͰɺڍಈΛਖ਼֬ʹѲ͢Δͷ͕ࠔ • దʹ໋໊͞Ε͍ͯͳ͍߹ɺՄಡੑ͕ஶ͘͠མͪΔέʔε͕ ͋Δ • ϝλϓϩάϥϛϯάΛར༻͢Δ߹ɺσόοά͕ࠔʹͳΔ
ॊೈੑͷͰDSL͕༏Ґ
͡Ό͋શ෦DSLΛ༻ҙ͠·͘Ε ͦΕͰ͍͍ͷ͔ʂʁ
ࠇຐज़͡Όͳ͍ͷͦΕʁ
DSLຐज़͕͍ ʢby Joker1007ʣ
அ͕͍͠έʔε
ྫɿ όϦσʔγϣϯఆٛͳͷͰDSLΛ͏ ͔͠͠ɺܕνΣοΫΛDSLͰߦ͏͖͔ʁ
ճྫɿ ͤ͗͢ͳ͍ݪଇʹै͍ɺ࣮ࡍͷ όϦσʔγϣϯϢʔβʔʹͤΔɺ ϥΠϒϥϦόϦσʔγϣϯఆٛͷ ϑοΫDSLͷΈఏڙ
۩ମྫ ʢࠓճͷυϝΠϯίϚϯυύλʔϯʣ
NecoϏδωεϩδοΫΛ ʮίϚϯυʯʹׂ͠ɺ ͦΕΒΛΈ߹ΘͤΔϑϩʔΛ ࢧԉ͢ΔϥΠϒϥϦ
·ͱΊ • ͔ͤͬ͘RubyͰॻ͍ͯΔΜ͔ͩΒΠϯλʔϑΣΠεʹͩ͜Θ Γ͍ͨʢָ͍ͬͯ͠ϥΠϒϥϦ͕΄͍͠ʣ • DSLRubyͷڧΈͰ͋Γɺదʹ໋໊ɾ࣮͢Ε୯७ͳϝ ιουΑΓॊೈͳఆٛΠϯλʔϑΣΠεΛఏڙͰ͖Δ • ͕Μͬͯॊೈͳ͍উखΛࢦͯ͠ΔͷͰNecoͬͯ͘ΕΑͳʢએʣ