Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
ミドルウェアにmrubyを組み込む方法 / How to Embed mruby into M...
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Kentaro Kuribayashi
July 28, 2017
Technology
3k
3
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
ミドルウェアにmrubyを組み込む方法 / How to Embed mruby into Middlewares Written in C
真夏の技術部&BPR室 TechMTG #3(ペパボ社内勉強会)
Kentaro Kuribayashi
July 28, 2017
Transcript
34 slides
ʙγϯϓϧͳαʔόͷ֦ுΛࡐʹઆ໌͠·͢ʙ ܀ྛ݈ଠ(.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 ͷ໊྆ʹฉ͍ͨΒ͙͢ղܾ͠ ͨ
More Decks by Kentaro Kuribayashi
See All by Kentaro Kuribayashi
あとはAIに任せて人間は自由に生きる
kentaro
5
2.3k
社会人力と研究力ー博士号をキャリアの武器にするー
kentaro
3
380
IoTシステム開発の複雑さを低減するための統合的アーキテクチャ
kentaro
2
2.7k
Bidirectional Quadratic Voting Leveraging Issue-Based Matching
kentaro
2
880
大高生へのメッセージ(令和6年度「大高未来塾」) / Messages to Current Students
kentaro
0
380
「始め方」の始め方 / How to Start Starting Things
kentaro
5
1.1k
Dynamic IoT Applications and Isomorphic IoT Systems Using WebAssembly
kentaro
1
1.8k
わたしがこのところハマっている「ライセンスフリー無線」のご紹介 / An Invitation to License-Free Radio
kentaro
1
840
先行きの見えなさを楽しさに変える ーVUCA時代のキャリア論と絶対他力主義ー / How to develop your career in the VUCA era
kentaro
8
7.2k
Other Decks in Technology
See All in Technology
契約書SaaSにAIエージェントを組み込む
sansantech
PRO
0
130
複数システムが同居した 15 年物の AWS アカウントを解体するための考古学
wa6sn
3
150
Intro to Kiro (One agent, every surface) | Kiro: Zero to Hero 01
inariku
PRO
2
130
Kiro 入門 (1 つのエージェントを、どの画面からでも) | 目指せ Kiro マスター 01
inariku
PRO
6
1.8k
農夫は秘伝のタレを知らない - NOBODY KNOWS THE HIDDEN SOURCE - Kaggriculture 3rd Place Solution
masspeaks
0
320
マネージャーをエスパーにしない マネジメントされる側から始める、働きやすい現場づくり
comi190327
0
440
Frontier Teams — Amazon は AI で「開発のやり方」をどう変えたのか
kmotohas
0
260
プロダクションコードにおける encoding/json から encoding/json/v2 へのスムーズな移行
sansantech
PRO
1
430
Kiro アップデート 2026 年 11 月号 (11 月 8 日時点) | 目指せ Kiro マスター アップデート編
inariku
PRO
2
120
田んぼの見回りをIoTで減らしたい!水位監視から電池駆動カメラまでの試行錯誤
itosoft
1
210
変更差分を読むために環境を整備しよう
pipepasta
1
310
[JAWS Festa 2026]一番いい仕事は、請求書に現れない / jawsfesta2026
sh_fk2
2
530
Featured
See All Featured
Technical Leadership for Architectural Decision Making
baasie
4
640
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
Darren the Foodie - Storyboard
khoart
PRO
5
4.1k
エンジニアに許された特別な時間の終わり
watany
109
250k
How to Get Subject Matter Experts Bought In and Actively Contributing to SEO & PR Initiatives.
livdayseo
1
240
The Curious Case for Waylosing
cassininazir
1
610
[RailsConf 2023] Rails as a piece of cake
palkan
59
7.1k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
6.2k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
16k
Optimizing for Happiness
mojombo
378
71k
How to optimise 3,500 product descriptions for ecommerce in one day using ChatGPT
katarinadahlin
PRO
3
3.9k
Leveraging LLMs for student feedback in introductory data science courses - posit::conf(2025)
minecr
1
480