Upgrade to PRO for Only $50/Year—Limited-Time Offer! 🔥
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
0
450
〇〇を切り出したいときに / Extract something from big rails app
TokyuRuby会議12 での飛び入り LT 資料です
http://regional.rubykaigi.org/tokyu12/
izumin5210
July 29, 2018
Tweet
Share
More Decks by izumin5210
See All by izumin5210
Building AI Agents with TypeScript #TSKaigiHokuriku
izumin5210
6
1.3k
Web エンジニアが JavaScript で AI Agent を作る / JSConf JP 2025 sponsor session
izumin5210
4
2.3k
AI Coding Meetup #3 - 導入セッション / ai-coding-meetup-3
izumin5210
0
3.5k
Web フロントエンドエンジニアに開かれる AI Agent プロダクト開発 - Vercel AI SDK を観察して AI Agent と仲良くなろう! #FEC余熱NIGHT
izumin5210
3
960
TypeScript を活かしてデザインシステム MCP を作る / #tskaigi_after_night
izumin5210
5
820
複雑なフォームを継続的に開発していくための技術選定・設計・実装 #tskaigi / #tskaigi2025
izumin5210
14
9.3k
複雑なフォームの jotai 設計 / Designing jotai(state) for Complex Forms #layerx_frontend
izumin5210
10
3.8k
複雑なフォームと複雑な状態管理にどう向き合うか / #newt_techtalk vol. 15
izumin5210
4
4.8k
よくできたテンプレート言語として TypeScript + JSX を利用する試み / Using TypeScript + JSX outside of Web Frontend #TSKaigiKansai
izumin5210
9
6.2k
Other Decks in Programming
See All in Programming
30分でDoctrineの仕組みと使い方を完全にマスターする / phpconkagawa 2025 Doctrine
ttskch
3
800
TypeScriptで設計する 堅牢さとUXを両立した非同期ワークフローの実現
moeka__c
6
3k
バックエンドエンジニアによる Amebaブログ K8s 基盤への CronJobの導入・運用経験
sunabig
0
140
大体よく分かるscala.collection.immutable.HashMap ~ Compressed Hash-Array Mapped Prefix-tree (CHAMP) ~
matsu_chara
1
220
なあ兄弟、 余白の意味を考えてから UI実装してくれ!
ktcryomm
11
11k
生成AIを利用するだけでなく、投資できる組織へ
pospome
1
270
Full-Cycle Reactivity in Angular: SignalStore mit Signal Forms und Resources
manfredsteyer
PRO
0
120
関数実行の裏側では何が起きているのか?
minop1205
1
680
WebRTC と Rust と8K 60fps
tnoho
2
1.9k
ViewファーストなRailsアプリ開発のたのしさ
sugiwe
0
440
TUIライブラリつくってみた / i-just-make-TUI-library
kazto
1
370
Microservices rules: What good looks like
cer
PRO
0
1.2k
Featured
See All Featured
How to Think Like a Performance Engineer
csswizardry
28
2.4k
Six Lessons from altMBA
skipperchong
29
4.1k
Thoughts on Productivity
jonyablonski
73
5k
A Modern Web Designer's Workflow
chriscoyier
698
190k
[SF Ruby Conf 2025] Rails X
palkan
0
500
It's Worth the Effort
3n
187
29k
The Illustrated Children's Guide to Kubernetes
chrisshort
51
51k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.3k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
Visualization
eitanlees
150
16k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
34
2.5k
Automating Front-end Workflow
addyosmani
1371
200k
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
͖ͭͮ Ͱʂ