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
〇〇を切り出したいときに / Extract something from big rails...
Search
izumin5210
July 29, 2018
Programming
500
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
〇〇を切り出したいときに / Extract something from big rails app
TokyuRuby会議12 での飛び入り LT 資料です
http://regional.rubykaigi.org/tokyu12/
izumin5210
July 29, 2018
More Decks by izumin5210
See All by izumin5210
コンパウンドプロダクト開発のためのローカルプロセスマネージャー再発明 #layerxgo
izumin5210
0
690
in-process GraphQL のすすめ #ginzajs
izumin5210
4
1.5k
開発体験を左右するライブラリの API 設計 - GraphQL スキーマ構築ライブラリから考える #tskaigi
izumin5210
2
2.2k
izumin5210のプロポーザルのネタ探し #tskaigi_msup
izumin5210
2
1.1k
AI Agent の開発と運用を支える Durable Execution #AgentsInProd
izumin5210
8
3.1k
AI Agent Tool のためのバックエンドアーキテクチャを考える #encraft
izumin5210
6
2.4k
Building AI Agents with TypeScript #TSKaigiHokuriku
izumin5210
6
1.8k
Web エンジニアが JavaScript で AI Agent を作る / JSConf JP 2025 sponsor session
izumin5210
4
3.6k
AI Coding Meetup #3 - 導入セッション / ai-coding-meetup-3
izumin5210
0
3.8k
Other Decks in Programming
See All in Programming
Vue Fes Japan 2026 タイムテーブル徹底解説
448jp
1
490
海上で動くGoサーバー: goroutineとchannelでさばく航行データストリーム
atsuki_seo
0
910
モジュールの視点からSwiftを読み解く #iosdc
s_shimotori
0
190
iOS 27でニュースアプリはどう変わる!? 〜日経電子版の新機能対応と、開発事例から〜
lynnswap
1
11k
Family mrubyの進捗
kishima
1
130
Heart of Swift Concurrency
koher
0
950
市販E-Readerを乗っ取れ 〜Embedded Swiftで電子ペーパーガジェットを制御する〜
trickart
0
200
パズルゲームの作り方 / how to make puzzle games
kaityo256
PRO
2
140
Intent as Code
shoppingjaws
6
1.1k
App Storeの外へ──日本のiOSサイドローディング入門 for iOSDC Japan 2026
yuukiw00w
0
240
すこし踏み込む CancellationToken
htkym
2
850
Omarchy Tokyo やると聞いて UMPC 買ってセットアップしてきた
mtsmfm
0
160
Featured
See All Featured
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
How GitHub (no longer) Works
holman
316
150k
Exploring anti-patterns in Rails
aemeredith
4
510
Un-Boring Meetings
codingconduct
0
420
Discover your Explorer Soul
emna__ayadi
2
1.3k
The Curse of the Amulet
leimatthew05
3
15k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
46
3k
Designing for humans not robots
tammielis
254
26k
We Have a Design System, Now What?
morganepeng
55
8.3k
The AI Revolution Will Not Be Monopolized: How open-source beats economies of scale, even for LLMs
inesmontani
PRO
3
3.7k
Abbi's Birthday
coloredviolet
4
10k
Building Experiences: Design Systems, User Experience, and Full Site Editing
marktimemedia
1
610
Transcript
ʓʓΛΓग़͍ͨ͠ͱ͖ʹ ͓͓͖ΊͷϦϑΝΫλΛΔPO3BJMTʢʁʣ TokyuRubyKaigi #12 !J[VNJO 2018.7.29 -
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
˓˓ΛΓग़͍ͨ͠ɾҠߦ͍ͨ͠ ͍·Θͤͦ͏ͳ࣮ %# .PEFM ػೳ γεςϜͷҰ෦
ςετΛॻ͜͏ ϩάΛͱΖ͏ ͍͞͠ΐʹߟ͑Δ͜ͱ
ςετΛॻ͜͏ ͦͦςετϦϑΝΫλϦϯάͷͨΊʹ͋Δʢۃʣ ίʔυ͕յΕΔͱςετ͕མͪͯؾ͚ͮͯศར ͳ͔ͬͨΒؤுͬͯॻ͘ʢنʹΑͬͯఘΊ؊৺ʣ ϩάΛͱΖ͏
͍͞͠ΐʹߟ͑Δ͜ͱ
ςετΛॻ͜͏ ϩάΛͱΖ͏ Ͳ͏͍͏ܦ࿏Ͱར༻͞ΕΔ͔ɼͲΕ͘Β͍ར༻͞ΕΔ͔ ͦͦESPQͰ͖ͳ͍͔ յΕͦ͏ͳͱ͜ΖͷςετΛॏతʹॻ͚Δ
͍͞͠ΐʹߟ͑Δ͜ͱ
DBMMFSΛه͢Δ ࡶʹϩάΛཷΊࠐΊΔπʔϧɾαʔϏεΛ͏ ƁŞƄŪžUJQT
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
DBMMFSΛه͢Δ ࡶʹϩάΛཷΊࠐΊΔπʔϧɾαʔϏεΛ͏ ʮϨεϙϯεʹӨڹΛ༩͑ͳ͍ʯॏཁ ͍͍ײ͡ʹCVGGFSJOHͨ͠ΓඇಉظͰσʔλૹͬͯ͘ΕΔ܅Λ͔ͭ͏ fluent-logger-ruby
td-logger-ruby FUD Ұ࣌తͳϩάऩूͳͷͰɼਖ਼͠͞खܰ͞ɾརศੑେͳ͜ͱͳͷͰʢ͈́ ƁŞƄŪžUJQT
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͔ͩΒͦ͜
DBMMFSΛه͢Δ ࡶʹϩάΛཷΊࠐΊΔπʔϧɾαʔϏεΛ͏ ʮϨεϙϯεʹӨڹΛ༩͑ͳ͍ʯॏཁ ͍͍ײ͡ʹCVGGFSJOHͨ͠ΓඇಉظͰσʔλૹͬͯ͘ΕΔ܅Λ͔ͭ͏ qVFOUMPHHFSSVCZ
UEMPHHFSSVCZ FUD Ұ࣌తͳϩάऩूͳͷͰɼਖ਼͠͞खܰ͞ɾརศੑେͳ͜ͱͳͷͰʢ͈́ ƁŞƄŪžUJQT class ActiveRecrod::Relation def eager_loading? super.tap do |loading| if loading # send logs end end end 3VCZͳͷͰܭଌ༻ίʔυͲ͜ʹͰࠐΊΔ ʢ˞༻͕ࡁΜͩΒফ͠·͠ΐ͏ʣ
ίʔυͷมߋൣғΛ࠷খʹཹΊΔ Ϛϝʹຊ൪ʹग़͢ ෳࡶͳͱ͜ΖΕͳ͍͔ৄ͍͠ਓʹฉ͘ Ͳ͏ͬͯ͢͢ΊΔʁ
ίʔυͷมߋൣғΛ࠷খʹཹΊΔ ΞϓϦ͕σΧ͘ͳΔͱཏతʹมߋ͢Δͷେม FH%#ׂͰAProfileA͕AProfileDb::ProfileAʹͳΓ·͢ͱ͔มߋྔଟ͗ͯ͢ແཧ ϕʔεΫϥεΛม͑ΔʢAApplicationRecordAAProfileRecordAʣͱ͔ͳΒ·ͩΘ͔Δ ӨڹൣғΛࡶʹѲ͢ΔͷʹΫϥεਤॻ͘ͱศར
Ϛϝʹຊ൪ʹग़͢ ෳࡶͳͱ͜ΖΕͳ͍͔ৄ͍͠ਓʹฉ͘ Ͳ͏ͬͯ͢͢ΊΔʁ
ίʔυͷมߋൣғΛ࠷খʹཹΊΔ ΞϓϦ͕σΧ͘ͳΔͱཏతʹมߋ͢Δͷେม FH%#ׂͰAProfileA͕AProfileDb::ProfileAʹͳΓ·͢ͱ͔มߋྔଟ͗ͯ͢ແཧ ϕʔεΫϥεΛม͑ΔʢAApplicationRecordAAProfileRecordAʣͱ͔ͳΒ·ͩΘ͔Δ ӨڹൣғΛࡶʹѲ͢ΔͷʹΫϥεਤॻ͘ͱศར
Ϛϝʹຊ൪ʹग़͢ ෳࡶͳͱ͜ΖΕͳ͍͔ৄ͍͠ਓʹฉ͘ Ͳ͏ͬͯ͢͢ΊΔʁ ػցతʹੜͰ͖Δؾ͢Δ͕ɼͲΕ͘Β͍3VCZͷຐज़ΛͬͯΔ͔ʹґଘ͢Δ ˢͷΫϥεਤHSFQ
ίʔυͷมߋൣғΛ࠷খʹཹΊΔ Ϛϝʹຊ൪ʹग़͢ ҰؾʹΔͱյΕͨͱ͖ʹݪҼڀ໌͕େม ෳࡶͳͱ͜ΖΕͳ͍͔ৄ͍͠ਓʹฉ͘ Ͳ͏ͬͯ͢͢ΊΔʁ
ίʔυͷมߋൣғΛ࠷খʹཹΊΔ Ϛϝʹຊ൪ʹग़͢ ෳࡶͳͱ͜ΖΕͳ͍͔ৄ͍͠ਓʹฉ͘ ͨ·ʔʹʮ͜ΜͳΜઈରແཧΖ͆ʯΈ͍ͨͳͷ͕͋Δ ΊͬͪΌ"SFM͝ʹΐ͝ʹΐͯ͠Δͱ͔ɼΞϓϦͷίΞʹΊͬͪΌґଘͯ͠Δͱ͔
ͦ͏͍͏ͷ༷ͦͦΛΕͳ͍͔ɾଞͷ࣮͕ͳ͍͔ߟ͑Δ υϝΠϯʹৄ͍͠ਓʹͬͯΒ͏ͷ͕٢ Ͳ͏ͬͯ͢͢ΊΔʁ
͍ͪΜॏཁͳϙΠϯτ ʢݸਓతʹʣ
͍ͱےͰԡ͠Δ ظઓʹͳΔͱ৺͕ંΕͦ͏ʹͳΔ ˞͜ͷͱ͖ʢ%#ׂʣͰڧߦಥഁͨ͠ͷͰ͔͢ΓইͰࡁΜͩ
࣮ࡍʹͦͦ͜͜Ͱ͔͍ΞϓϦͰͬͨࣄྫ
࣮ࡍʹͦͦ͜͜Ͱ͔͍ΞϓϦͰͬͨࣄྫ ͜͜ʹه͢ʹ༨ന͕ڱ͗͢Δ
None
͖ͭͮ Ͱʂ