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
あんしん大規模リプレースサポート
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
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
670
ドキュメントとテストのないプロジェクトを引き継ぐ
takanamito
2
3.6k
Siriに身の回りのお世話をしてもらう
takanamito
0
6.9k
PHPで運用中のサービスをRubyに切り替える
takanamito
0
5.5k
安心してフレームワークをのりかえたい
takanamito
0
1.3k
HLSでやっていく 動画ストリーミング配信
takanamito
0
2.6k
Other Decks in Programming
See All in Programming
トークンをケチるな、設計しろ:GitHub Copilotを賢く使うコンテキスト戦略
ochtum
0
310
Embedded SREと共に達成した会員管理システムのAWS移行 - SRE NEXT 2026 ランチスポンサーセッション
niftycorp
PRO
1
2.3k
【やさしく解説 設計編 #1】「ドメイン駆動」と「実装駆動」ってなに? 〜設計の考え方を、たとえ話で学ぼう〜
panda728
PRO
1
110
Snowflake Summitでの新機能 CoCo / CoWork / snowflake-summit-2026-overall-what-new-coco
tatsuhiro
1
220
SREの積み重ねがAI駆動開発のガードレールになった ― 7つの実践/SRE Guardrails The 7
tomoyakitaura
8
3.9k
SREは、MCPとSRE Agentをこう使え!
kazumax55
0
150
なぜ型を書くのか? TSKaigi2026で改めて考える #tskaigi_smarthr
kajitack
0
340
【SRE NEXT 2026 Lunch Session】一人目専任SREの立ち上げを加速する ― AIと進めたオンボーディングで2分を0.04秒にした話
pkshadeck
PRO
0
2.3k
ビデオ通話が繋がる0.2秒で何が起きているのか
supurazako
2
130
Generative UI & AI-Assistants for Your Angular Solutions
manfredsteyer
PRO
1
160
Honoでのサプライチェーン侵害対策 〜 3つのライブラリに学ぶ
yusukebe
7
1.8k
技術記事、 専門家としてのプログラマ、 言語化
mizchi
14
7.4k
Featured
See All Featured
Leveraging Curiosity to Care for An Aging Population
cassininazir
1
340
Max Prin - Stacking Signals: How International SEO Comes Together (And Falls Apart)
techseoconnect
PRO
0
200
Product Roadmaps are Hard
iamctodd
55
12k
Have SEOs Ruined the Internet? - User Awareness of SEO in 2025
akashhashmi
0
390
Money Talks: Using Revenue to Get Sh*t Done
nikkihalliwell
0
310
Winning Ecommerce Organic Search in an AI Era - #searchnstuff2025
aleyda
1
2.1k
Abbi's Birthday
coloredviolet
3
8.6k
SEO Brein meetup: CTRL+C is not how to scale international SEO
lindahogenes
1
2.8k
SEO for Brand Visibility & Recognition
aleyda
0
4.6k
Git: the NoSQL Database
bkeepers
PRO
432
67k
GraphQLの誤解/rethinking-graphql
sonatard
75
12k
<Decoding/> the Language of Devs - We Love SEO 2024
nikkihalliwell
1
270
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ͷใΛՄࢹԽ -> ҟৗࣄଶʹؾ͖͍͢ ->
ϨεϙϯελΠϜͷײ͕֮ʹͭ͘
·ͱΊ • ϦϓϨʔεͱʹ͔͘খ͘͞ • ϞδϡʔϧԽͯ͠ςετ͘͢͠ • γϟυϓϩΩγͰຊ൪τϥϑΟοΫݕূ • ࢦඪՄࢹԽͯ͠ҟৗʹؾ͖͘͢