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
mruby introduction -- jinbocho.rb #01
Search
Akira Yumiyama
April 19, 2013
Programming
9
1.1k
mruby introduction -- jinbocho.rb #01
Akira Yumiyama
April 19, 2013
Tweet
Share
More Decks by Akira Yumiyama
See All by Akira Yumiyama
GAE/Python2 to Python3 Migration Journey
akiray03
0
1.5k
オブジェクト指向で考える アプリケーションアーキテクチャ設計 / Object-Oriented Conference 2020
akiray03
6
19k
Terraform Introduction
akiray03
0
78
Case Study of Machine Learning in CrowdWorks
akiray03
0
1.9k
CrowdWorksを支える管理画面 - 管理画面チラ見せ♡ナイト #5
akiray03
0
1.4k
DevSumi2015 19-D-2 IIJ社内におけるアジャイル開発、DevOpsへの取り組み
akiray03
0
400
Other Decks in Programming
See All in Programming
Повторное использование кода в ML: почему ML-пайплайны могут помочь?
lamodatech
0
400
perl for shell, awk and sed programmers
mackee
2
1k
GrafanaのHTTP API を眺めてみよう
rinchoku
0
470
Vue SFCのtemplateでTypeScriptの型を活用しよう
tsukkee
3
920
Mercari AI/LLM Hackathon TeamBの発表資料
imaikosuke
0
190
2024-10-02 dev2next - Application Observability like you've never heard before
jonatan_ivanov
0
200
Cloud Adoption Framework にみる組織とクラウド導入戦略
tomokusaba
2
690
tsconfig.jsonの最近の新機能 ファイルパス編
uhyo
7
1.9k
Vue3の一歩踏み込んだパフォーマンスチューニング2024
hal_spidernight
3
2k
2万ページのSSG運用における工夫と注意点 / Vue Fes Japan 2024
chinen
3
850
ポケモンで考えるコミュニケーション / Communication Lessons from Pokémon
mackey0225
5
220
cgroup v2 support in Kubeadm
kentatada
0
220
Featured
See All Featured
The Language of Interfaces
destraynor
154
24k
Into the Great Unknown - MozCon
thekraken
31
1.4k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
228
52k
Building Applications with DynamoDB
mza
90
6k
Gamification - CAS2011
davidbonilla
80
5k
Bash Introduction
62gerente
608
210k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
250
21k
Agile that works and the tools we love
rasmusluckow
327
21k
It's Worth the Effort
3n
183
27k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
26
1.4k
YesSQL, Process and Tooling at Scale
rocio
167
14k
Pencils Down: Stop Designing & Start Developing
hursman
119
11k
Transcript
mruby introduction mruby unofficial logo by https://github.com/h2so5/mruby-logo @akiray03 jinbocho.rb #01
ࣗݾհ @akiray03 ࠷ۙ࡞ͬͨͷ: mruby-mtest: MiniTestϥΠΫͳςετϑϨʔ ϜϫʔΫ mruby-WiringPi: Raspberry PiͷGPIOΛૢ࡞ MRuby
Reporter: mrubyͷϏϧυ݁ՌΛू http://m.ruby.iijgio.com/ 2
Question? Rubyistͳํ? ΈࠐΈܥͳํ? CݴޠόϦόϦॻ͍ͯΔํ? 3
agenda mrubyͷհ mrubyͰHello, world mrubyͷ֦ுϞδϡʔϧΛॻ͍ͯΈΑ͏ 4
Hello, mruby git clone https://github.com/mruby/mruby.git cd mruby ruby minirake all
test ./bin/mruby -e “Hello, mruby!” 5
mrubyͱ Embeddable Minimal Implementation Considerable active committers have "M" as
their name initials, somehow. Some major committers have Matsumoto as their family name, somehow. (They are not relatives) Matz. 6 What means “m”?
ܰྔRuby? ʮܰྔRubyʯϓϩδΣΫτ໊ ϓϩδΣΫτͷՌ(ιϑτΣΞ)͕ mruby ܦ࢈লͷʮҬΠϊϕʔγϣϯग़ݚڀ։ൃࣄۀʯʹ࠾͞Εͨ(2010ʙ2012) ܰྔRubyʰΈࠐΈʱΛ೦಄ʹ։ൃ͞Ε͍ͯΔ 7
ΈࠐΈ? 8
mruby target ػثΈࠐΈ UI, Network, (ιϑτϦΞϧλΠϜͳ)੍ޚͳͲ ΞϓϦέʔγϣϯΈࠐΈ ίϯϑΟάهड़ݴޠ, ػೳ֦ு༻, Sandbox,
... 9
mrubyࡌϧʔλ! ϧʔλͷίϯϑΟάཧγεςϜͷಈ࡞ʹ mrubyΛ࠾༻ த NetBSD ϧʔλͷ౷Ұ͞ΕͨίϯϑΟάΛ ֤Daemon༻ͷίϯϑΟάʹ ม͢Δ෦ͰmrubyΛ ར༻͍ͯ͠Δ 10
ੈքॳ!
ApacheͷΈࠐΈ mod_mruby Λ͏͜ͱͰɺ Apache෦ͷঢ়ଶ Λ؆୯ʹࢹɾૢ࡞Ͱ͖Δ 11 http://blog.matsumoto-r.jp/?p=3376
mrubyͷ༦ – http://www.slideshare.net/IIJ_MOGOK/mruby-17436495
mrubyͷಛ OS / CPUґଘ͕ແ͍ (গͳ͍) CRubyͷιʔείʔυಡΉͱifdefͩΒ͚... ػೳCRubyͷαϒηοτ File, IO, Socket,
Thread, ... ؚ·Εͳ͍ จ๏CRubyͷϑϧηοτ (༧ఆ) ISO / JIS ४ڌ (༧ఆ) 13
configurable ෆཁͳػೳͦ͗མͱͤΔ Parser / Compiler p/puts/print, sprintf, Time, Math, Regexp,
... ز͔ͭͷػೳࠩ͠ସ͕͑Ͱ͖Δ Regexp: pcre, onigruma, HenrySpencer, etc... 14
mrbgems CRubyͷrubygemsͱࣅͨΈ CRubyϥϯλΠϜ࣌ʹrequire͢Δ mrubyϏϧυ࣌ʹࠐΉ͕ҟͳΔ mrubyʹ (ඪ४Ͱ) requireແ͍ͷͰ.. ΫϩεϏϧυʹରԠ طʹ60Λ͑Δgem͕ϦϦʔε͞Ε͍ͯΔ 15
mgem list mruby-msagent mruby- capability mruby-WiringPi mruby-girffi mruby-md5 mruby-discount mruby-cocoa
mruby-curl mruby-zabbix mruby-simple- random mruby-core-ext mruby-syslog mruby-process mruby-onig- regexp mruby-string- enhancement mruby-sinatic mruby-allegro mruby-sha1 mruby-sqlite3 mruby- javascriptcore mruby-dir mruby-fltk3 mruby-pack mruby-winapp mruby- httprequest mruby-oauth mruby- growthforecast mruby-audite mruby-cgroup mruby-thread mruby-libqrng mruby-jpeg mruby-random mruby-pcre- regexp mruby-mecab mruby-uv mruby-eject mruby-mysql mruby-hs-regexp mruby-redis mruby-http mruby-mtest mruby- updategems mruby-cfunc mruby-arduino mruby-require mruby-sleep mruby- simplehttp mruby-json mruby-base64 mruby-digest mruby-v8 mruby-env mruby-aws-s3 mruby-allocate mruby-gles mruby- markdown mruby-gntp mruby-dll mruby-iconv 16
iij mrbgems mruby-mtest mruby-dir mruby-digest mruby-process mruby-pack mruby-syslog mruby-env mruby-simple-
random mruby-errno mruby-aws-s3 mruby-io mruby-regexp-pcre mruby-tempfile mruby-require mruby-mdebug mruby-ipaddr Comming Soon 17
small is beautiful 18 ΤίγεςϜ(mrbgem)͕ग़དྷͨ͜ͱͰɺࣗͷ ཉ͍͠ػೳ͚͕ͩೖͬͨʮΧελϜmrubyʯ͕؆ ୯ʹखʹೖΔΑ͏ʹͳͬͨ
Hello, mruby! git clone https://github.com/mruby/mruby.git cd mruby ruby minirake all
test ./bin/mruby -e “Hello, mruby!” 19
build_config.rb .3VCZ#VJMEOFXEPcDPOGc UPPMDIBJOHDD DPOGHFN\SPPU^NSCHFNTNSVCZTQSJOUG DPOGHFN\SPPU^NSCHFNTNSVCZQSJOU DPOGHFN\SPPU^NSCHFNTNSVCZNBUI DPOGHFN\SPPU^NSCHFNTNSVCZUJNF DPOGHFN\SPPU^NSCHFNTNSVCZTUSVDU DPOGHFN\SPPU^NSCHFNTNSVCZFOVNFYU DPOGHFN\SPPU^NSCHFNTNSVCZTUSJOHFYU
DPOGHFN\SPPU^NSCHFNTNSVCZOVNFSJDFYU DPOGHFN\SPPU^NSCHFNTNSVCZBSSBZFYU DPOGHFN\SPPU^NSCHFNTNSVCZIBTIFYU DPOGHFN\SPPU^NSCHFNTNSVCZSBOHFFYU DPOGHFN\SPPU^NSCHFNTNSVCZQSPDFYU DPOGHFN\SPPU^NSCHFNTNSVCZSBOEPN DPOGHFN\SPPU^NSCHFNTNSVCZCJONJSC DPOGHFN\SPPU^NSCHFNTNSVCZCJONSVCZ FOE 20 ຊՈNSVCZͰఏڙ͢Δ NSCHFN͚ͩͰݸ
build_config.rb .3VCZ#VJMEOFXEPcDPOGc UPPMDIBJOHDD DPOGHFN\SPPU^NSCHFNTNSVCZTQSJOUG DPOGHFN\SPPU^NSCHFNTNSVCZQSJOU DPOGHFN\SPPU^NSCHFNTNSVCZNBUI DPOGHFN\SPPU^NSCHFNTNSVCZUJNF DPOGHFN\SPPU^NSCHFNTNSVCZTUSVDU DPOGHFN\SPPU^NSCHFNTNSVCZFOVNFYU DPOGHFN\SPPU^NSCHFNTNSVCZTUSJOHFYU
DPOGHFN\SPPU^NSCHFNTNSVCZOVNFSJDFYU DPOGHFN\SPPU^NSCHFNTNSVCZBSSBZFYU DPOGHFN\SPPU^NSCHFNTNSVCZIBTIFYU DPOGHFN\SPPU^NSCHFNTNSVCZSBOHFFYU DPOGHFN\SPPU^NSCHFNTNSVCZQSPDFYU DPOGHFN\SPPU^NSCHFNTNSVCZSBOEPN DPOGHFN\SPPU^NSCHFNTNSVCZCJONJSC DPOGHFN\SPPU^NSCHFNTNSVCZCJONSVCZ FOE 21 toolchain :gcc conf.gem “#{root}/mrbgems/mruby-time” ଞʹWTͳͲ
Customize mruby ./bin/mruby -e ‘p Time.now’ build_config.rb ͷ mruby-time ͷߦΛίϝϯτΞτ
ruby minirake clean all test ͏Ұ ./bin/mruby -e ‘p Time.now’ 22
Make mrbgem rand / srand Λ࡞ͬͯΈ·͠ΐ͏ mrbgems/mruby-random ϝϧηϯψπΠε λͰ͕͢ɺ؆୯ʹCͷrandͱsrandΛWrapping͢ ΔํͰ࡞ͬͯΈ·͢
αϯϓϧίʔυ github: jinbochorb/mruby mruby-rand ϒϥϯνʹ͋Γ·͢ :p 23
Make mrbgem – 1 cd $(MRUBY_DIR) mkdir mruby-rand mkdir mruby-rand/src
mkdir mruby-rand/test 24
Make mrbgem – 2 25 MRuby::Gem::Specification.new('mruby-‐rand') do |spec| spec.license
= 'MIT' spec.authors = 'mruby developers' end vi mruby-rand/mrbgem.rake
Make mrbgem – 3 26 #include “mruby.h” void mrb_mruby_rand_gem_init(mrb_state *mrb)
{ } void mrb_mruby_rand_gem_final(mrb_state *mrb) { } vi mruby-rand/src/rand.c
Make mrbgem – 3 27 #include “mruby.h” void mrb_mruby_rand_gem_init(mrb_state *mrb)
{ } void mrb_mruby_rand_gem_final(mrb_state *mrb) { } vi mruby-rand/src/rand.c gemͷ໊લΛ gsub(‘-’, ‘_’)ͨ͠ͷ
Make mrbgem – 4 28 MRuby::Build.new do |conf| #
... # mruby-‐random ΛίϝϯτΞτ͢Δ # conf.gem “#{root}/mrbgems/mruby-‐random” # mruby-‐rand Λ͢ conf.gem “#{root}/mruby-‐rand” end vi build_config.rb
Make mrbgem – 5 cd $(MRUBY_DIR) ruby minirake clean ruby
minirake all (ͱΓ͋͑ͣϏϧυ͕௨Δ͜ͱ͚ͩ֬ೝ) 29
Make mrbgem – 6 30 assert “rand is a Fixnum”
do rand.class == Fixnum end assert “rand is a positive value” do rand >= 0 end vi mruby-rand/test/rand.rb
Make mrbgem – 7 cd $(MRUBY_DIR) ruby minirake all test
(ࠓςετʹࣦഊ͍ͯ͠Δͱ͜Ζ·Ͱ֬ೝ) 31
Make mrbgem – 8 32 #include <stdlib.h> mrb_value mrb_f_rand(mrb_state *mrb,
mrb_value self) { return mrb_fixnum_value(rand()); } void mrb_mruby_rand_gem_init(mrb_state *mrb) { struct RClass *krn = mrb-‐>kernel_module; mrb_define_method(mrb, krn, “rand”, mrb_f_rand, ARGS_ANY()); } vi mruby-rand/src/rand.c
Make mrbgem – 9 cd $(MRUBY_DIR) ruby minirake all ./bin/mruby
-e ‘p rand’ ./bin/mruby -e ‘p rand, rand, rand’ 33
Make mrbgem – 10 34 #include <stdlib.h> #include <time.h>
// ←͜ͷߦΛ͢ void mrb_mruby_rand_gem_init(mrb_state *mrb) { // (snip)... srand((unsigned) time(NULL)); // ←͜ͷߦΛ͢ } vi mruby-rand/src/rand.c
Make mrbgem 35 RubyͷrandɺCͷrandͱҧ͏ͱ͜Ζ͕͋Δ Ҿແ: [0,1) ͷൣғͰFloatͷཚΛฦ͢ Ҿ༗: [0,max) ͷൣғͰFixnumͷཚΛฦ͢
Ұsrand͕ݺΕͯͳ͚ΕsrandΛݺͼग़͢ etc.. Λߟྀͯ͠࡞Δඞཁ͕͋Γ·͢ https://github.com/iij/mruby-simple-random/
·ͱΊ mruby configurable ͳ “͍ܰ” Ruby࣮ 2012य़ʹGithubͰެ։͞Εͨ mrbgemͳͲศརͳΈग़དྷͨ ػೳ֦ு(mrbgem)60
“·ͩ҆ఆ͠ͳ͍͠”... Θͳ͍ͱ҆ఆ͠·ͤΜʂ օͰͬͯ҆ఆͤ͞·͠ΐ͏ʂ 36
FAQ
FAQ Q. mrubyArduinoͰಈ͖·͔͢? Arduino DueͰಈ͍ͨͱ͍͏ใࠂ͕͋Γ·͢ http://blog.mruby.sh/201303161453.html mruby16bitڥΛਖ਼ࣜαϙʔτ͍ͯ͠·ͤΜ ArduinoͰ༻͞ΕΔAVR16bitϚΠίϯͰ͢ ArduinoϐϯޓͷchipKIT Max32,
Enzi, GR- SAKURA, Λར༻ͨ͠΄͏͕ݱ࣮తͰ͠ΐ͏ 38
FAQ Q. mrubyͷ҆ఆ൛ϦϦʔε͍ͭͰ͔͢? A. ͍ͭͳΜͰ͠ΐ͏.... ( ҆ఆ൛NPOʹͤΔ (ҙ༁) github͜ͷ··ಥ͖ਐΉ (ҙ༁)
... ͱ Matz ڼͬͯ·ͨ͠ 39
FAQ Q. mrubyͰ XXX(͓͖ͳΫϥε໊ΛೖΕͯͩ͘͞ ͍) ͑·͔͢? A. Object.const_defined?(:XXX)ͯ͠Έ͍ͯͩ͘͞ ແ͚Ε࡞ͬͯ mrbgem
ͱͯ͠ެ։͢Δͱɺ͍Ζ ͍Ζͳਓ͕تͿͱࢥ͍·͢ ཉ͍͠ͱᄁ͍ͨΒɺMͷ͘ਓ͕αΫοͱ࡞ͬͯ͘ ΕΔ͔͠Ε·ͤΜ :P 40
FAQ Q. ͳΜͰmrubyΛͬͨͷ? CRubyΛΘͳ͔ͬ ͨཧ༝? A. CRubyόΠφϦαΠζ/࣮ߦ࣌αΠζͱʹେ ͖͔ͬͨ CRubyඪ४ϥΠϒϥϦɾϑϧηοτ͕લఏ Ұ෦ͷΈऔΓ֎͢ͷ͕͍͠/໘
41