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

͖ͭͮ͸ Ͱʂ