Lock in $30 Savings on PRO—Offer Ends Soon! ⏳
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
ミドルウェアにmrubyを組み込む方法 / How to Embed mruby into M...
Search
Kentaro Kuribayashi
July 28, 2017
Technology
3
2.9k
ミドルウェアにmrubyを組み込む方法 / How to Embed mruby into Middlewares Written in C
真夏の技術部&BPR室 TechMTG #3(ペパボ社内勉強会)
Kentaro Kuribayashi
July 28, 2017
Tweet
Share
More Decks by Kentaro Kuribayashi
See All by Kentaro Kuribayashi
あとはAIに任せて人間は自由に生きる
kentaro
4
1.7k
社会人力と研究力ー博士号をキャリアの武器にするー
kentaro
3
240
IoTシステム開発の複雑さを低減するための統合的アーキテクチャ
kentaro
2
2k
Bidirectional Quadratic Voting Leveraging Issue-Based Matching
kentaro
2
610
大高生へのメッセージ(令和6年度「大高未来塾」) / Messages to Current Students
kentaro
0
320
「始め方」の始め方 / How to Start Starting Things
kentaro
5
970
Dynamic IoT Applications and Isomorphic IoT Systems Using WebAssembly
kentaro
1
1.6k
わたしがこのところハマっている「ライセンスフリー無線」のご紹介 / An Invitation to License-Free Radio
kentaro
1
690
先行きの見えなさを楽しさに変える ーVUCA時代のキャリア論と絶対他力主義ー / How to develop your career in the VUCA era
kentaro
8
6.4k
Other Decks in Technology
See All in Technology
Digital omtanke på Internetdagarna 2025
axbom
PRO
0
140
GitHub を組織的に使いこなすために ソニーが実践した全社展開のプラクティス
sony
17
8.9k
All About Sansan – for New Global Engineers
sansan33
PRO
1
1.3k
"'TSのAPI型安全”の対価は誰が払う?不公平なスキーマ駆動に終止符を打つハイブリッド戦略
hal_spidernight
0
210
学術的根拠から読み解くNotebookLMの音声活用法
shukob
1
540
インフラ室事例集
mixi_engineers
PRO
2
120
Pandocでmd→pptx便利すぎワロタwww
meow_noisy
2
1.1k
Introduction to Sansan for Engineers / エンジニア向け会社紹介
sansan33
PRO
5
46k
タグ付きユニオン型を便利に使うテクニックとその注意点
uhyo
1
140
組織の“見えない壁”を越えよ!エンタープライズシフトに必須な3つのPMの「在り方」変革 #pmconf2025
masakazu178
1
1.1k
adk-samples に学ぶデータ分析 LLM エージェント開発
na0
3
990
Introduction to Bill One Development Engineer
sansan33
PRO
0
320
Featured
See All Featured
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
31
3k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
17k
4 Signs Your Business is Dying
shpigford
186
22k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
508
140k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.3k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
130k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
132
19k
Rails Girls Zürich Keynote
gr2m
95
14k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
31
2.7k
How GitHub (no longer) Works
holman
316
140k
A Tale of Four Properties
chriscoyier
162
23k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
1.8k
Transcript
ʙγϯϓϧͳαʔόͷ֦ுΛࡐʹઆ໌͠·͢ʙ ܀ྛ݈ଠ(.01FQBCP *OD ਅՆͷٕज़෦#13ࣨ5FDI.5(ʢࣾษڧձʣ ϛυϧΣΞʹmrubyΛΈࠐΉํ๏
(.0ϖύϘגࣜձࣾ ܀ྛ݈ଠ@kentaro औక$50 https://kentarok.org
ຊτʔΫʹΑͬͯಘΒΕΔ͜ͱ w$ͷϓϩάϥϜʹNSVCZΛΈࠐΈɺNSVCZͷεΫϦ ϓτΛ࣮ߦ͢Δํ๏͕Θ͔Γ·͢ wطଘͷϛυϧΣΞʹɺNSVCZΛΈࠐΜͰ֦ுͰ͖ ΔΑ͏ʹͳΓ·͢ wͭ·ΓɺOHY@NSVCZͷΑ͏ͳͷΛ࡞ΕΔΑ͏ʹͳ Δͱ͍͏͜ͱͰ͢Ͷʂʢݪཧతʹʣ
࣍ ֦ு͢ΔϛυϧΣΞ NSVCZΈࠐΈͷखॱ ͓ΘΓʹ
֦ு͢ΔϛυϧΣΞ
FDIPαʔόΛ֦ு͍͖ͯ͠·͢
FDIPαʔόɺΫϥΠΞϯτͷ3VCZͰͷྫ αʔό ΫϥΠΞϯτ
FDIPαʔόɺΫϥΠΞϯτΛ࣮ߦ ೖྗ͞ΕͨจࣈྻΛ ͦͷ··ฦ͚ͩ͢ͷ αʔόɻ
ͳͥFDIPαʔό͔ʁ w࣮ࡍɺ$Ͱॻ͍ͨFDIPαʔόΛ֦ு͠·͢ w͜ͷFDIPαʔόΛɺͨͱ͑OHJOYͷΑ͏ͳϛυϧΣ Ξͩͱࢥ͍ͬͯͩ͘͞ɻݪཧతʹɺಉ͡Α͏ͳΓ ํͰ֦ுͰ͖·͢ w͍͖ͳΓେ͖ͳϛυϧΣΞʹऔΓΜͰͭΒ͍˞ ͷͰɺ؆୯ͳͷΛྫʹ͡Ί͍͖ͯ·͠ΐ͏ ˞$ݴޠͱNSVCZͷࣝʹՃ͑ͯɺରͱͳΔϛυϧΣΞΛ֦ு͢ΔϊϋΔඞཁ͕͋Δ͔Βɻ
NSVCZΛΈࠐΜͩFDIPαʔό ೖྗ͞ΕͨจࣈྻΛ NSVCZͷίʔυͱ͠ ͯධՁ͠ɺ݁ՌΛฦ ͢αʔό
֦ுͨ͠FDIPαʔόͷಛ w༩͑ΒΕͨจࣈྻΛɺNSVCZͷίʔυͱͯ͠ධՁ͢Δ wNSVCZͷίʔυΛ࣮ߦͨ݁͠ՌͷܕΛผͯ͠ɺద ͳจࣈྻΛฦ͢ wFDIPαʔόͷߏମʢ(em * ܕʣͷఏڙ͢Δϝϯό ؔʹNSVCZίʔυ͔Β৮ΕΒΕΔ
NSVCZΈࠐΈͷखॱ
ΈࠐΈͷखॱ ೖྗ͞ΕͨจࣈྻΛNSVCZͷίʔυͱͯ͠ධՁ͢Δ NSVCZͷίʔυͱΈࠐΈରͷϛυϧΣΞͱͷ ؒͰɺΛదͳܕʹม͢Δ NSVCZͷίʔυத͔ΒϛυϧΣΞͷίʔυʹ৮Ε ͍ͨ߹ɺΫϥεͱϝιουΛ࡞͢Δ
MJCNSVCZΛϛυϧΣΞʹΈࠐΉ
ೖྗ͞ΕͨจࣈྻΛ NSVCZͷίʔυͱͯ͠ධՁ͢Δ
ೖྗΛNSVCZͷίʔυͱ࣮ͯ͠ߦ
͔͜͜ΒͲ͏ͬͯઌʹਐΉ͔ʁ
NSVCZͱϛυϧΣΞͷؒͰ ͷܕมΛ͢Δ
ϛυϧΣΞˠNSVCZˠϛυϧΣΞ NSVCZͷ ੈք ϛυϧΣΞͷ ੈք ϛυϧΣΞͷ ੈք (char * ܕͰ
ίʔυΛ͢˞ mrb_valueܕ ͔Βదͳܕม ˞ࠓճͦ͏͍ͯ͠Δ͚ͩͰɺ࣮ࡍʹͦͷଞʹϑΝΠϧΛΘͨ͢ͱ͔͍Ζ͍Ζํ๏͕͋Γ·͢ɻ
mruby_valueܕ͔Βͷܕม ࣮ࡍͷܕΛ ఆ͢Δ ܕ͝ͱʹ ม͍ͯ͘͠
લϖʔδͷิ wࠓճͷྫ؆୯ͳFDIPαʔόͳͷͰɺͲͷܕͰ͋ͬ ͯͯ͢(char * ܕʹม͍ͯ͠·͢ wͨͩ͠ɺݩͷܕ͕Θ͔ΔΑ͏ɺNSVCZίʔυͰͷ ܕ໊Λࣔ͢จࣈྻΛՃ͍ͯ͠·͢ɻ wҰൠతʹɺΈࠐΈରͷϛυϧΣΞ͕ظ͢Δ ܕʹม͍͖ͯ͠·͢
NSVCZίʔυͷத͔Β ϛυϧΣΞͷதʹ৮Δ
FDIPαʔόͷίΞߏମ typedef struct em_t { int reply_count; // ϦΫΤετͷฦ৴ճ char
*reply_prefix; // ϓϩϯϓτͷจࣈྻ mrb_state *mrb; } em; Emߏମͷఆٛ
NSVCZͷίʔυ͔ΒϛυϧΣΞʹ৮Δ NSVCZ͔Β Emߏମͷ ίʔυΛݺͿ Χϯτ͕ ͞Ε͍ͯΔ NSVCZ͔Β Emߏମͷ ίʔυΛݺͿ
ϓϩϯϓτͷ จࣈ͕มԽ
NSVCZʹΫϥεͱϝιουΛຒΊࠐΉ EmΫϥεΛ ࡞Δ EmΫϥεʹ ϝιουΛ࡞Δ
mrb_valueܕ ͔Βదͳܕม NSVCZˠϛυϧΣΞˠNSVCZ ϛυϧΣΞͷ ੈք NSVCZͷ ੈք NSVCZͷ ੈք mrb_valueܕ
ม ͖ͬ͞ͱٯͩͶ
ϝιουΛఆٛ͢Δ Em ߏମΛ औΓग़͢ Em ߏମͷ ϝϯόΛมߋ
ϙΠϯτmrb_stateͷudϝϯό mrb_value em_mrb_method_set_reply_prefix(mrb_state *mrb, mrb_value self); ϝιουఆٛͷγάωνϟҎԼͷ௨ΓͳͷͰɺ em->mrb->ud = self;
// udϝϯό(void *)ܕ // ……snip…… em *obj = (em *)mrb->ud; // ͳͷͰɺऔΓग़͢ͱ͖ʹΩϟετ͢Δ ͋ͱͰ͏ͨΊʹmrb->udʹEmߏମΛೖΕ͓ͯ͘
MJCNSVCZΛ ϛυϧΣΞʹΈࠐΉ
MJCNSVCZΛΈࠐΉ $ gcc src/em.c src/em_server.c \ -Iinclude -Ivendor/mruby/include \ -Lvendor/mruby/build/host/lib
-lmruby \ -o build/echo-mruby ҎԼͷΑ͏ʹϏϧυͯ͠ɺMJCNSVCZΛΈࠐΉ $ git clone
[email protected]
:mruby/mruby.git vendor/mruby $ cd vendor/mruby && rake all NSVCZΛ͖ͬͯͯϏϧυ͢Δ
ͬͱ͍͍ํ๏ˣΛࢀরͷ͜ͱ http://hb.matsumoto-r.jp/entry/2015/02/07/011237
͓ΘΓʹ
͋ͱˣΛΈͯͬͨΒ࡞ΕΔ https://github.com/kentaro/echo-mruby
͓ΘΓʹ w͍͖ͳΓ͍ͭ͝ϛυϧΣΞΛ֦ு͠Α͏ͱ͢Δͱɺ NSVCZͱؔͳ͍ͱ͜ΖͰΘ͔Βͳ͘ͳΔͷͰɺ؆୯ ͳྫͰΈࠐΈΛߦͬͯΈ·ͨ͠ w͓͍ͷϛυϧΣΞͷ֦ுੑʹࠔͬͨΒɺNSVCZΛ ΈࠐΉ͜ͱͰָ͕Ͱ͖ͳ͍͔ߟ͑ͯΈ·͠ΐ͏ w͋ͱɺ͍͍ײ͡ʹόʔϯʂͱΑΖ͘͠
NSVCZΔͷʹϖύϘΊͪΌ࠷ߴ ΤϥʔͰϋϚͬͯࢮΜͰ͚ͨͲɺ @matsumotory @udzura ͷ໊྆ʹฉ͍ͨΒ͙͢ղܾ͠ ͨ