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
あんしん大規模リプレースサポート
Search
takanamito
June 15, 2016
Programming
1.8k
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
あんしん大規模リプレースサポート
takanamito
June 15, 2016
More Decks by takanamito
See All by takanamito
ActiveModel::Attributes APIとSwaggerでRailsのAPIレスポンスに型を持ち込む
takanamito
0
680
ドキュメントとテストのないプロジェクトを引き継ぐ
takanamito
2
3.6k
Siriに身の回りのお世話をしてもらう
takanamito
0
7k
PHPで運用中のサービスをRubyに切り替える
takanamito
0
5.5k
安心してフレームワークをのりかえたい
takanamito
0
1.3k
HLSでやっていく 動画ストリーミング配信
takanamito
0
2.6k
Other Decks in Programming
See All in Programming
App Intentsのビルドプロセスを支える技術
kntkymt
0
490
パズルゲームの作り方 / how to make puzzle games
kaityo256
PRO
2
260
re:Inventに行く前に知っておきたい現地参加のノウハウ
nokomoro3
0
290
Turning Architecture into Unit Tests in the AI Era (NSSpain XIV)
steliosf
PRO
1
120
動作中のプログラムの中身をリアルタイムに覗く / Realtime Debugger for CSharp with Roslyn
prota
1
1.7k
市販E-Readerを乗っ取れ 〜Embedded Swiftで電子ペーパーガジェットを制御する〜
trickart
0
230
世界の中心で、AI(App Intents)をさけぶ ー App Intents中心設計の実践ガイド
touyou
0
740
iOSDCのペンライトを自動制御したい!
akkeylab
0
330
JAWS-UG 東京支部が始める、JAWS-UG支部コラボ / JAWS-UG lunchtime LT Collaboration
y0hgi
0
170
コードレビューのボトルネックを"する側"と"される側"の両面から解消する
yub0n
1
1.2k
Heart of Swift Concurrency
koher
0
1.1k
AI Agent時代のリアーキテクチャ戦略と実践
hokaccha
9
5.2k
Featured
See All Featured
Balancing Empowerment & Direction
lara
6
1.3k
The Anti-SEO Checklist Checklist. Pubcon Cyber Week
ryanjones
0
250
A Soul's Torment
seathinner
8
3.7k
Groundhog Day: Seeking Process in Gaming for Health
codingconduct
0
380
AI Search: Where Are We & What Can We Do About It?
aleyda
0
8k
Lessons Learnt from Crawling 1000+ Websites
charlesmeaden
PRO
1
1.6k
For a Future-Friendly Web
brad_frost
183
10k
Ethics towards AI in product and experience design
skipperchong
2
400
Building a Modern Day E-commerce SEO Strategy
aleyda
45
9.2k
職位にかかわらず全員がリーダーシップを発揮するチーム作り / Building a team where everyone can demonstrate leadership regardless of position
madoxten
69
66k
Documentation Writing (for coders)
carmenintech
77
5.6k
Agile Actions for Facilitating Distributed Teams - ADO2019
mkilby
0
290
Transcript
͋Μ͠Μ େنϦϓϨʔεαϙʔτ
ւ֎ϝσΟΞ 2015 • ඦສPV/݄ • 2΄ͲFuelPHP͕Քಇ • 1action 100~200ߦͷcontroller͕ෳ •
ແବͳϖʔδ͕ͨ͘͞Μ
None
FuelPHP -> Ruby on Rails
ϦϓϨʔεཁ݅ • FuelPHPΛ٫͍ͨ͠ • SEOతʹΑ͘ͳ͍ͱ͜ΖΛͳ͍ͨ͘͠ • ແఀࢭͰҠߦ͍ͨ͠ • ϚελσʔλΛ৽͍ͨ͠ •
σβΠϯϦχϡʔΞϧ͍ͨ͠
͍͢͝େม
Ҿ༻5FDIOJDBM4VDDFTTFTBOE'BJMVSFTJOUIF)JTUPSZPG$PPLQBE%FWFMPQNFOU4QFBLFS%FDL IUUQTTQFBLFSEFDLDPNNJSBLVJUFDIOJDBMTVDDFTTFTBOEGBJMVSFTJOUIFIJTUPSZPGDPPLQBE EFWFMPQNFOU Cookpad Techconfʹͯ
Ҿ༻5FDIOJDBM4VDDFTTFTBOE'BJMVSFTJOUIF)JTUPSZPG$PPLQBE%FWFMPQNFOU4QFBLFS%FDL IUUQTTQFBLFSEFDLDPNNJSBLVJUFDIOJDBMTVDDFTTFTBOEGBJMVSFTJOUIFIJTUPSZPGDPPLQBE EFWFMPQNFOU
ͬͯΔ
ͦ͏ͳͷͰ νʔϜͰۓٸձٞ
• FuelPHPΛ٫͍ͨ͠ • SEOతʹΑ͘ͳ͍ͱ͜ΖΛͳ͍ͨ͘͠ • ແఀࢭͰҠߦ͍ͨ͠ • ϚελσʔλΛ৽͍ͨ͠ • σβΠϯϦχϡʔΞϧ͍ͨ͠
ϦϓϨʔεཁ݅ ूத
༷Λ࠷খݶͷείʔϓʹ ߜ࣮ͬͯ
10ສҎ্͋ΔURLͷ 301ϦμΠϨΫτ͕ා͍
301ϦμΠϨΫτ͕ා͍ • 10ສҎ্ଘࡏ͢ΔURL • ৽URLSEOධՁΛҾ͖ܧ͍͗ͨ • ϛεΔͱτϥϑΟοΫͷμϝʔδ͕Ͱ͔͍ • ςετͰͳΜͱ͔୲อͰ͖ͳ͍͔ʁ
ϦμΠϨΫτॲཧ • concernsͱservicesʹॲཧΛӅṭ • ϩδοΫͱσʔλͷςετΛ४උ
concernsͱservicesʹӅṭ class AreasController < ApplicationController include Redirectable # چURL def
area_list redirect(:area) if redirectable?(:area) end # ৽URL def show ~~ ϖʔδੜॲཧ ~~ end end
concernsͱservicesʹӅṭ concern :Redirectable do def redirectable?(controller_name) path = request.path case
controller_name when :area results = REDIRECT_PATHS.map { |target| path.include? (target) } results.include?(true) end def redirect(controller_name, request_params = nil) redirector = Redirector::Factory.create(controller_name) redirect_path = redirector.redirect_path(request_params) redirect_to(redirect_path, status: :moved_permanently) end end ϦμΠϨΫτՄ൱Λ ఆ TFSWJDFΫϥεͰ ઌͷύεΛੜ
ϦμΠϨΫτͷઃܭ • ͍ΘΏΔStrategyύλʔϯ • ServicesԼʹ֤URLʹରԠͨ͠ΫϥεΛ࣮ • ΫϩʔϥʔͳͲͷॲཧͷྲྀΕҰॹͰ தͷ࣮͕ҟͳΔ߹ʹ༗ޮ
ϦμΠϨΫτ • concernsͱservicesʹॲཧΛӅṭ -> ςετ͕ॻ͖͍͢ • ϩδοΫͱσʔλͷςετΛ४උ -> શURLςετͰྲྀͯ͠ΈΔ ->
Ϛελσʔλͷϛεൃݟ
10ສҎ্͋ΔURLͷ ςετ࿙Ε͕ා͍
ຊ൪ݕূ • γϟυϓϩΩγͰͷಈ࡞֬ೝ • nginxͷใΛՄࢹԽ
kage • γϟυϓϩΩγαʔόʔͷgem • cookpadࣾ • ຊ൪ͷτϥϑΟοΫΛෳ͠ ։ൃαʔόʔʹྲྀ͢
None
kage Kage::ProxyServer.start do |server| server.port = 8090 server.host = '0.0.0.0'
server.add_master_backend(:production, 'localhost', 80) server.add_backend(:sandbox, 'localhost', 80) server.client_timeout = 15 server.backend_timeout = 10 server.on_select_backends do |request, headers| if request[:method] == 'GET' [:production, :sandbox] else [:production] end end ~~ தུ ~~ end def compare(production_res, sandbox_res, url) # ͜ͷลͰresponseݟͯϩάग़ͨ͠Γ͢Δ end
kageͷϩά
kage • ग़ྗ͞ΕͨϩάΛோΊΔ • ҧײͷ͋ΔՕॴSTGͰݕূ • ͣͬͱ͑Δ
DatadogͰnginxͷ ϩάΛάϥϑԽ
<source> @type tail path /var/log/nginx/access.log format ltsv time_format %d/%b/%Y:%H:%M:%S %z
pos_file /tmp/fluent.log.pos tag nginx.access </source> <match nginx.access> @type copy # εςʔλεͷΧϯτ <store> @type datacounter tag status.count count_key status unit minute pattern1 2xx ^2\d\d$ pattern2 3xx ^3\d\d$ pattern3 4xx ^4\d\d$ pattern4 5xx ^5\d\d$ @label @status </store> # ϨεϙϯελΠϜຖͷׂ߹ <store> @type numeric_counter tag response_time.percentage unit minute count_key response_time pattern1 u10ms 0 0.01 pattern2 u50ms 0.01 0.05 pattern3 u100ms 0.05 0.1 pattern4 u500ms 0.1 0.5 pattern5 u1s 0.5 1 pattern6 u3s 1 3 pattern7 long 3 @label @response_time </store> # ϨεϙϯελΠϜͷύʔηϯλΠϧ <store> @type numeric_monitor tag response_time.percentile unit minute monitor_key response_time percentiles 50, 90, 95, 98 @label @percentile </store> </match>
Datadog • fluentdͰnginxͷlogΛtailͯ͠ूܭ • fluentd -> datadog-agent -> datadog •
#monitoring Ͱ৭ʑͬͯ·͢
ຊ൪ݕূ • γϟυϓϩΩγͰͷಈ࡞֬ೝ -> ຊ൪ڥͰͷΈى͖Δόάͷൃݟ • nginxͷใΛՄࢹԽ -> ҟৗࣄଶʹؾ͖͍͢ ->
ϨεϙϯελΠϜͷײ͕֮ʹͭ͘
·ͱΊ • ϦϓϨʔεͱʹ͔͘খ͘͞ • ϞδϡʔϧԽͯ͠ςετ͘͢͠ • γϟυϓϩΩγͰຊ൪τϥϑΟοΫݕূ • ࢦඪՄࢹԽͯ͠ҟৗʹؾ͖͘͢