Slide 1

Slide 1 text

ʓʓΛ੾Γग़͍ͨ͠ͱ͖ʹ ͓͓͖ΊͷϦϑΝΫλΛ΍ΔPO3BJMTʢʁʣ TokyuRubyKaigi #12 !J[VNJO 2018.7.29 -

Slide 2

Slide 2 text

izumin5210 Engineer at Wantedly, Inc. Wantedly People ‣ Web Application Engineer - Profile Data Strategy Group ‣ Interests in developer productivity on microservices Gopher, Rubyist, JavaScripter and Androider

Slide 3

Slide 3 text

˓˓Λ੾Γग़͍ͨ͠ɾҠߦ͍ͨ͠ ࢖͍·Θͤͦ͏ͳ࣮૷ %# .PEFM ػೳ γεςϜͷҰ෦ 

Slide 4

Slide 4 text

 ςετΛॻ͜͏  ϩάΛͱΖ͏ ͍͞͠ΐʹߟ͑Δ͜ͱ

Slide 5

Slide 5 text

 ςετΛॻ͜͏  ͦ΋ͦ΋ςετ͸ϦϑΝΫλϦϯάͷͨΊʹ͋Δʢۃ࿦ʣ  ίʔυ͕յΕΔͱςετ͕མͪͯؾ͚ͮͯศར  ͳ͔ͬͨΒؤுͬͯॻ͘ʢن໛ʹΑͬͯ͸ఘΊ΋؊৺ʣ  ϩάΛͱΖ͏ ͍͞͠ΐʹߟ͑Δ͜ͱ

Slide 6

Slide 6 text

 ςετΛॻ͜͏  ϩάΛͱΖ͏  Ͳ͏͍͏ܦ࿏Ͱར༻͞ΕΔ͔ɼͲΕ͘Β͍ར༻͞ΕΔ͔  ͦ΋ͦ΋ESPQͰ͖ͳ͍͔  յΕͦ͏ͳͱ͜ΖͷςετΛॏ఺తʹॻ͚Δ ͍͞͠ΐʹߟ͑Δ͜ͱ

Slide 7

Slide 7 text

 DBMMFSΛه࿥͢Δ  ࡶʹϩάΛཷΊࠐΊΔπʔϧɾαʔϏεΛ࢖͏ ƁŞƄŪžUJQT

Slide 8

Slide 8 text

 DBMMFSΛه࿥͢Δ  ͡  `Thread.current[:controller] = controller_name`͠ͱ͘ͱศར  ͋͘·ͰҰ࣌తͳϩάऩूͳͷͰɼਖ਼͠͞खܰ͞ɾརศੑ  ࡶʹϩάΛཷΊࠐΊΔπʔϧɾαʔϏεΛ࢖͏ ƁŞƄŪžUJQT caller.find do |c| !c.to_s.start_with?(Bundler.bundle_path.to_s) && c.to_s.start_with?(Rails.root.to_s) end

Slide 9

Slide 9 text

 DBMMFSΛه࿥͢Δ  ࡶʹϩάΛཷΊࠐΊΔπʔϧɾαʔϏεΛ࢖͏  ʮϨεϙϯεʹӨڹΛ༩͑ͳ͍ʯ͸ॏཁ  ͍͍ײ͡ʹCVGGFSJOHͨ͠ΓඇಉظͰσʔλૹͬͯ͘ΕΔ܅Λ͔ͭ͏  fluent-logger-ruby td-logger-ruby FUD  Ұ࣌తͳϩάऩूͳͷͰɼਖ਼͠͞खܰ͞ɾརศੑେ੾ͳ͜ͱͳͷͰʢ͈́ ƁŞƄŪžUJQT

Slide 10

Slide 10 text

 DBMMFSΛه࿥͢Δ  ࡶʹϩάΛཷΊࠐΊΔπʔϧɾαʔϏεΛ࢖͏  ʮϨεϙϯεʹӨڹΛ༩͑ͳ͍ʯ͸ॏཁ  ͍͍ײ͡ʹCVGGFSJOHͨ͠ΓඇಉظͰσʔλૹͬͯ͘ΕΔ܅Λ͔ͭ͏  qVFOUMPHHFSSVCZ UEMPHHFSSVCZ FUD  Ұ࣌తͳϩάऩूͳͷͰɼਖ਼͠͞खܰ͞ɾརศੑେ੾ͳ͜ͱͳͷͰʢ͈́ ƁŞƄŪžUJQT caller_app = caller.find do |c| !c.to_s.start_with?(Bundler.bundle_path.to_s) && c.to_s.start_with?(Rails.root.to_s) end TD.event.post("hoge_log", { caller_app: caller_app, request_controller: Tread.current[:request_controller], request_action: Tread.current[:request_action], # sinp. }) Կ΋ߟ͑ͣʢUFTUBCJMJUZʹӨڹΛ༩͑ͣʣɼࡶʹϩά౤͛ΒΕΔͷ͸3VCZ͔ͩΒͦ͜

Slide 11

Slide 11 text

 DBMMFSΛه࿥͢Δ  ࡶʹϩάΛཷΊࠐΊΔπʔϧɾαʔϏεΛ࢖͏  ʮϨεϙϯεʹӨڹΛ༩͑ͳ͍ʯ͸ॏཁ  ͍͍ײ͡ʹCVGGFSJOHͨ͠ΓඇಉظͰσʔλૹͬͯ͘ΕΔ܅Λ͔ͭ͏  qVFOUMPHHFSSVCZ UEMPHHFSSVCZ FUD  Ұ࣌తͳϩάऩूͳͷͰɼਖ਼͠͞खܰ͞ɾརศੑେ੾ͳ͜ͱͳͷͰʢ͈́ ƁŞƄŪžUJQT class ActiveRecrod::Relation def eager_loading? super.tap do |loading| if loading # send logs end end end 3VCZͳͷͰܭଌ༻ίʔυ͸Ͳ͜ʹͰ΋࢓ࠐΊΔ ʢ˞༻͕ࡁΜͩΒফ͠·͠ΐ͏ʣ

Slide 12

Slide 12 text

 ίʔυͷมߋൣғΛ࠷খʹཹΊΔ  Ϛϝʹຊ൪ʹग़͢  ෳࡶͳͱ͜Ζ͸࡟Εͳ͍͔ৄ͍͠ਓʹฉ͘ Ͳ͏΍ͬͯ͢͢ΊΔʁ

Slide 13

Slide 13 text

 ίʔυͷมߋൣғΛ࠷খʹཹΊΔ  ΞϓϦ͕σΧ͘ͳΔͱ໢ཏతʹมߋ͢Δͷ͸େม  FH%#෼ׂͰAProfileA͕AProfileDb::ProfileAʹͳΓ·͢ͱ͔มߋྔଟ͗ͯ͢ແཧ  ϕʔεΫϥεΛม͑ΔʢAApplicationRecordAAProfileRecordAʣͱ͔ͳΒ·ͩΘ͔Δ  ӨڹൣғΛࡶʹ೺Ѳ͢ΔͷʹΫϥεਤॻ͘ͱศར  Ϛϝʹຊ൪ʹग़͢  ෳࡶͳͱ͜Ζ͸࡟Εͳ͍͔ৄ͍͠ਓʹฉ͘ Ͳ͏΍ͬͯ͢͢ΊΔʁ

Slide 14

Slide 14 text

 ίʔυͷมߋൣғΛ࠷খʹཹΊΔ  ΞϓϦ͕σΧ͘ͳΔͱ໢ཏతʹมߋ͢Δͷ͸େม  FH%#෼ׂͰAProfileA͕AProfileDb::ProfileAʹͳΓ·͢ͱ͔มߋྔଟ͗ͯ͢ແཧ  ϕʔεΫϥεΛม͑ΔʢAApplicationRecordAAProfileRecordAʣͱ͔ͳΒ·ͩΘ͔Δ  ӨڹൣғΛࡶʹ೺Ѳ͢ΔͷʹΫϥεਤॻ͘ͱศར  Ϛϝʹຊ൪ʹग़͢  ෳࡶͳͱ͜Ζ͸࡟Εͳ͍͔ৄ͍͠ਓʹฉ͘ Ͳ͏΍ͬͯ͢͢ΊΔʁ ػցతʹੜ੒Ͱ͖Δؾ΋͢Δ͕ɼͲΕ͘Β͍3VCZͷຐज़Λ࢖ͬͯΔ͔ʹґଘ͢Δ ˢͷΫϥεਤ͸໨HSFQ

Slide 15

Slide 15 text

 ίʔυͷมߋൣғΛ࠷খʹཹΊΔ  Ϛϝʹຊ൪ʹग़͢  Ұؾʹ΍ΔͱյΕͨͱ͖ʹݪҼڀ໌͕େม  ෳࡶͳͱ͜Ζ͸࡟Εͳ͍͔ৄ͍͠ਓʹฉ͘ Ͳ͏΍ͬͯ͢͢ΊΔʁ

Slide 16

Slide 16 text

 ίʔυͷมߋൣғΛ࠷খʹཹΊΔ  Ϛϝʹຊ൪ʹग़͢  ෳࡶͳͱ͜Ζ͸࡟Εͳ͍͔ৄ͍͠ਓʹฉ͘  ͨ·ʔʹʮ͜ΜͳΜઈରແཧ΍Ζ͆ʯΈ͍ͨͳͷ͕͋Δ  ΊͬͪΌ"SFM͝ʹΐ͝ʹΐͯ͠Δͱ͔ɼΞϓϦͷίΞʹΊͬͪΌґଘͯ͠Δͱ͔  ͦ͏͍͏ͷ͸ͦ΋ͦ΋࢓༷Λ࡟Εͳ͍͔ɾଞͷ࣮૷͕ͳ͍͔ߟ͑Δ  υϝΠϯʹৄ͍͠ਓʹ΍ͬͯ΋Β͏ͷ͕٢ Ͳ͏΍ͬͯ͢͢ΊΔʁ

Slide 17

Slide 17 text

͍ͪ͹ΜॏཁͳϙΠϯτ ʢݸਓతʹʣ

Slide 18

Slide 18 text

੎͍ͱے೑Ͱԡ͠੾Δ ௕ظઓʹͳΔͱ৺͕ંΕͦ͏ʹͳΔ ˞͜ͷͱ͖ʢ%#෼ׂʣ͸਺೔Ͱڧߦಥഁͨ͠ͷͰ͔͢ΓইͰࡁΜͩ

Slide 19

Slide 19 text

࣮ࡍʹͦͦ͜͜Ͱ͔͍ΞϓϦͰ΍ͬͨࣄྫ

Slide 20

Slide 20 text

࣮ࡍʹͦͦ͜͜Ͱ͔͍ΞϓϦͰ΍ͬͨࣄྫ ͜͜ʹه͢ʹ͸༨ന͕ڱ͗͢Δ

Slide 21

Slide 21 text

No content

Slide 22

Slide 22 text

͖ͭͮ͸ Ͱʂ