真夏の技術部&BPR室 TechMTG #3(ペパボ社内勉強会)
ʙγϯϓϧͳαʔόͷ֦ுΛࡐʹઆ໌͠·͢ʙ܀ྛ݈ଠ(.01FQBCP *ODਅՆͷٕज़෦#13ࣨ5FDI.5(ʢࣾษڧձʣϛυϧΣΞʹmrubyΛΈࠐΉํ๏
View Slide
(.0ϖύϘגࣜձࣾ܀ྛ݈ଠ@kentaroऔక$50https://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_valueem_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 allNSVCZΛ͖ͬͯͯϏϧυ͢Δ
ͬͱ͍͍ํ๏ˣΛࢀরͷ͜ͱhttp://hb.matsumoto-r.jp/entry/2015/02/07/011237
͓ΘΓʹ
͋ͱˣΛΈͯͬͨΒ࡞ΕΔhttps://github.com/kentaro/echo-mruby
͓ΘΓʹw͍͖ͳΓ͍ͭ͝ϛυϧΣΞΛ֦ு͠Α͏ͱ͢ΔͱɺNSVCZͱؔͳ͍ͱ͜ΖͰΘ͔Βͳ͘ͳΔͷͰɺ؆୯ͳྫͰΈࠐΈΛߦͬͯΈ·ͨ͠w͓͍ͷϛυϧΣΞͷ֦ுੑʹࠔͬͨΒɺNSVCZΛΈࠐΉ͜ͱͰָ͕Ͱ͖ͳ͍͔ߟ͑ͯΈ·͠ΐ͏w͋ͱɺ͍͍ײ͡ʹόʔϯʂͱΑΖ͘͠
NSVCZΔͷʹϖύϘΊͪΌ࠷ߴΤϥʔͰϋϚͬͯࢮΜͰ͚ͨͲɺ@matsumotory@udzuraͷ໊྆ʹฉ͍ͨΒ͙͢ղܾͨ͠