Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
〇〇を切り出したいときに / Extract something from big rails...
Search
izumin5210
July 29, 2018
Programming
480
0
Share
〇〇を切り出したいときに / 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
開発体験を左右するライブラリの API 設計 - GraphQL スキーマ構築ライブラリから考える #tskaigi
izumin5210
2
1.4k
izumin5210のプロポーザルのネタ探し #tskaigi_msup
izumin5210
2
840
AI Agent の開発と運用を支える Durable Execution #AgentsInProd
izumin5210
8
2.8k
AI Agent Tool のためのバックエンドアーキテクチャを考える #encraft
izumin5210
6
2.2k
Building AI Agents with TypeScript #TSKaigiHokuriku
izumin5210
6
1.7k
Web エンジニアが JavaScript で AI Agent を作る / JSConf JP 2025 sponsor session
izumin5210
4
3.3k
AI Coding Meetup #3 - 導入セッション / ai-coding-meetup-3
izumin5210
0
3.7k
Web フロントエンドエンジニアに開かれる AI Agent プロダクト開発 - Vercel AI SDK を観察して AI Agent と仲良くなろう! #FEC余熱NIGHT
izumin5210
3
1.2k
TypeScript を活かしてデザインシステム MCP を作る / #tskaigi_after_night
izumin5210
5
930
Other Decks in Programming
See All in Programming
代数的データ型って何が嬉しいの? #frontend_phpcon_do
kajitack
1
430
Moments When Things Go Wrong
aurimas
3
130
不変条件と整合性境界—ビジネスが決める設計判断と実現パターン / Invariants and Consistency Boundaries
nrslib
11
3.1k
誰も頼んでない機能を出荷した話
zekutax
0
150
タクシーアプリ『GO』の バックエンド開発のおける AI利活用と若者のすべて
pyama86
3
1.8k
AIエージェントと協働するCLI開発 — BunとOpenClawで学んだこと
yoshikouki
1
220
TypeSpec で繋ぐ複数プロダクトの型安全
maroon8021
1
270
Talking to terminals (and how they talk back) (KotlinConf 2026)
jakewharton
PRO
1
160
TSKaigi 2026 TypeScriptバックエンドのオブザーバビリティ戦略 — Datadog × NestJSの実践
taiseiyamamotoan
1
210
柔軟なPDFレイアウトエディタを支える型システム設計 — Discriminated UnionとConditional Typeの実践
minako__ph
4
1.2k
GitHub Copilot CLIのいいところ
htkym
2
1.2k
Modding RubyKaigi for Myself
yui_knk
0
810
Featured
See All Featured
Designing for humans not robots
tammielis
254
26k
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
118
120k
So, you think you're a good person
axbom
PRO
2
2k
How to build an LLM SEO readiness audit: a practical framework
nmsamuel
1
760
The Director’s Chair: Orchestrating AI for Truly Effective Learning
tmiket
1
180
Statistics for Hackers
jakevdp
799
230k
A Modern Web Designer's Workflow
chriscoyier
698
190k
Organizational Design Perspectives: An Ontology of Organizational Design Elements
kimpetersen
PRO
1
710
The AI Search Optimization Roadmap by Aleyda Solis
aleyda
1
5.8k
Color Theory Basics | Prateek | Gurzu
gurzu
0
320
Self-Hosted WebAssembly Runtime for Runtime-Neutral Checkpoint/Restore in Edge–Cloud Continuum
chikuwait
0
550
Measuring & Analyzing Core Web Vitals
bluesmoon
9
850
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
͖ͭͮ Ͱʂ