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
Rubyで作るネット回線の自動速度測定ツール / Automatic network band...
Search
Ryo Nakano
November 30, 2019
Technology
1.8k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Rubyで作るネット回線の自動速度測定ツール / Automatic network bandwidth measurement tool built with Ruby
Ryo Nakano
November 30, 2019
Other Decks in Technology
See All in Technology
FDEの心得
noriakioji
5
6.4k
【書籍出版記念】 10周回って、エージェント開発は RAGがすべてだった。〜RAGの歴史と開発現場で見えた実践知〜
akiratameto
9
2.4k
【CEDEC2026】Creative Approaches to Localizing the Dialects and Unique Speech of Umamusume: Pretty Derby Characters in English
cygames
PRO
4
26k
会社紹介資料 / Sansan Company Profile
sansan33
PRO
24
430k
社内の7割が使うデータ基盤を、 データチーム2人で回すためにやったこと
koh_yoshi
4
1.5k
Eight Engineering Unit 紹介資料
sansan33
PRO
3
8.2k
Sansan Engineering Unit 紹介資料
sansan33
PRO
1
5k
研究開発部の紹介 / Sansan R&D Profile
sansan33
PRO
4
24k
AI時代のアウトプット――変わったこと、変わらないこと / Devsumi 2026 Kansai #devsumi
jnchito
0
440
AI時代に、人は何を、どう学ぶのか #pbl_pub / What and How Do We Learn in the AI Era?
takaking22
1
200
属人化を叩き割れ!「制作加速」と「安定化」の矛盾を打破する:8年目プロダクトが辿り着いた「ミスが起こり得ない」アセット制作フローの全貌
gree_tech
PRO
0
120
AIで変わるエンジニアの働き方(仮)
naoinaoi
0
290
Featured
See All Featured
Google's AI Overviews - The New Search
badams
0
1.1k
How to Talk to Developers About Accessibility
jct
2
520
Conquering PDFs: document understanding beyond plain text
inesmontani
PRO
4
3k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.5k
Lightning talk: Run Django tests with GitHub Actions
sabderemane
0
240
Code Review Best Practice
trishagee
74
20k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
38
3k
Principles of Awesome APIs and How to Build Them.
keavy
128
18k
Skip the Path - Find Your Career Trail
mkilby
1
190
Designing for Performance
lara
611
70k
GitHub's CSS Performance
jonrohan
1033
470k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
287
14k
Transcript
"VUPNBUJDOFUXPSLCBOEXJEUI NFBTVSFNFOUUPPMCVJMUXJUI3VCZ தཾ גࣜձࣾγφϓε ࣛࣇౡ3VCZձٞ
TFMG w தཾ ͳ͔ͷΓΐ͏ w !SZPOLO w 3VCZ͖ͳωοτϫʔΫΤϯδχΞ w
גࣜձࣾγφϓε w ۀ w ࣛࣇౡͷΠϯλʔωοταʔϏε ϓϩόΠμ *41
ޫͷ͞ ඵ N ඵສLN ඵؒʹٿΛप
ඵສLN ඵؒʹٿΛप ޫͷ͞ ඵ N ޫຊʹ͍
*41ͷར༻ऀ͔Βͷ
ޫ͕͍Ͱ͢
None
ޫϑΝΠόΛ༻͍ͨΠϯ λʔωοτଓαʔϏεʹ ͓͍ͯɺ̋̋ͱͷ௨৴Ͱر ͍ͯ͠Δ௨৴͕ग़ͳ ͍ͯ͘Ͱ͢
*41ʹͱͬͯ࠷େͳ͜ͱ
௨৴
Ͱɺͦͷ௨৴Λ ਖ਼֬ʹѲ͢Δͷ͍͠
Πϯλʔωοτ 1$ "1 ϧʔλ ϧʔλ ϧʔλ ϧʔλ ϧʔλ ϧʔλ εΠον
αʔό αʔό αʔό *41 $41 2ϘτϧωοΫͷՄೳੑͲ͜
Πϯλʔωοτ 1$ "1 ϧʔλ ϧʔλ ϧʔλ ϧʔλ ϧʔλ ϧʔλ εΠον
αʔό αʔό αʔό *41 $41 "શ෦
௨৴ΛѲ͢Δͷ͕͍͠ཧ༝ w ڥ͕·ͪ·ͪ w 1$ͷεϖοΫɺ04ɺ༗ઢWTແઢɺॴɺڑ w ࠶ݱੑʹ͍͠ w ͖͔͚ͬͬͨ͞Ͳɺࠓ͔ͬͨΓɾɾɾ w
ϘτϧωοΫՕॴ͕͔Βͳ͍ w 1$ɺ*41ɺΠϯλʔωοτɺαʔό
ͦΕͰɺ͋ΔఔѲ͍ͨ͠
࣮ݱ͍ͨ͜͠ͱ ✕ਖ਼֬ʹଌఆ ̋ར༻ऀʹ͍ۙڥͰଌఆ
࣮ݱ͍ͨ͜͠ͱ ✕ਖ਼֬ʹଌఆ ̋ར༻ऀʹ͍ۙঢ়گΛѲ
࣮ݱ͍ͨ͜͠ͱ ✕ਖ਼֬ʹଌఆ ̋ར༻ऀʹ͍ۙঢ়گΛѲ ⊗ IUUQTXXXTQFFEUFTUOFU
None
ࣗಈͰճઢ ΛଌΔπʔϧΛ࡞Δ 3VCZͰ
ࣗಈͰճઢ ΛଌΔπʔϧΛ࡞Δ 3VCZͰ
ڥ Πϯλʔωοτ γφϓε ଞࣾ ଌఆ Ϛγϯ TQFFEUFTUOFUͷ Ͳ͔ͬͷαʔό ճઢ" ճઢ#
ճઢ$ TQFFEUFTUOFUͷ Ͳ͔ͬͷαʔό TQFFEUFTUOFUͷ Ͳ͔ͬͷαʔό "NB[PO $MPVE8BUDI
"NB[PO $MPVE8BUDI ڥ Πϯλʔωοτ γφϓε ଞࣾ ଌఆ Ϛγϯ TQFFEUFTUOFUͷ Ͳ͔ͬͷαʔό
ճઢ" ճઢ# ճઢ$ TQFFEUFTUOFUͷ Ͳ͔ͬͷαʔό TQFFEUFTUOFUͷ Ͳ͔ͬͷαʔό ճઢ"Λͬͯγφϓεܦ༝Ͱɺࣗಈબ͞Εͨ TQFFEUFTUOFUͷͲ͔ͬͷαʔόͰଌఆ
"NB[PO $MPVE8BUDI ڥ Πϯλʔωοτ γφϓε ଞࣾ ଌఆ Ϛγϯ TQFFEUFTUOFUͷ Ͳ͔ͬͷαʔό
ճઢ" ճઢ# ճઢ$ TQFFEUFTUOFUͷ Ͳ͔ͬͷαʔό TQFFEUFTUOFUͷ Ͳ͔ͬͷαʔό ճઢ#Λͬͯγφϓεܦ༝Ͱɺࣗಈબ͞Εͨ TQFFEUFTUOFUͷͲ͔ͬͷαʔόͰଌఆ
ڥ Πϯλʔωοτ γφϓε ଞࣾ ଌఆ Ϛγϯ TQFFEUFTUOFUͷ Ͳ͔ͬͷαʔό ճઢ" ճઢ#
ճઢ$ TQFFEUFTUOFUͷ Ͳ͔ͬͷαʔό TQFFEUFTUOFUͷ Ͳ͔ͬͷαʔό ճઢ$Λͬͯଞࣾܦ༝Ͱɺࣗಈબ͞Εͨ TQFFEUFTUOFUͷͲ͔ͬͷαʔόͰଌఆ "NB[PO $MPVE8BUDI
ڥ Πϯλʔωοτ γφϓε ଞࣾ ଌఆ Ϛγϯ TQFFEUFTUOFUͷ Ͳ͔ͬͷαʔό ճઢ" ճઢ#
ճઢ$ TQFFEUFTUOFUͷ Ͳ͔ͬͷαʔό TQFFEUFTUOFUͷ Ͳ͔ͬͷαʔό ଌఆͷ݁ՌΛ$MPVE8BUDIʹૹ৴ "NB[PO $MPVE8BUDI
Ͳ͏ͬͯ௨৴Λܭࢉ͢Δ start_time = Time.now size = do_something elapsed_time = Time.now
- start_time bits_per_seconds = size / elapsed_time ௨৴ CQT సૹྔ CJUT సૹ࣌ؒ TFDPOET
Ͳ͏ͬͯ௨৴Λܭࢉ͢Δ start_time = Time.now size = do_something elapsed_time = Time.now
- start_time bits_per_seconds = size / elapsed_time ௨৴ CQT సૹྔ CJUT సૹ࣌ؒ TFDPOET ͜͜ͷॲཧ͕࣌ؒ ͍͜ͱ͕େࣄ
Ͳ͏ͬͯ௨৴Λܭࢉ͢Δ start_time = Time.now size = do_something elapsed_time = Time.now
- start_time bits_per_seconds = size / elapsed_time ௨৴ CQT సૹྔ CJUT సૹ࣌ؒ TFDPOET ͜͜ͷॲཧ͕࣌ؒ ͍͜ͱ͕େࣄ ͰɺͲͷ)551 ϥΠϒϥϦΛ͔ͭ͏ ͖
͔Βͳ͍ΜͩͬͨΒ ϕϯνϚʔΫ
ϕϯνϚʔΫڥ w .BD#PPL 3FUJOB JODI w NBD04$BUBMJOB
w 3VCZQSFWJFX w ରͷ)551ϥΠϒϥϦ w OFUIUUQ PQFOVSJ QFSTJTUFOU@IUUQ FYDPO DVSC UZQIPFVT IUUQBSUZ w ൺֱ༰ w .#ͷϑΝΠϧͷ ճμϯϩʔυʹ͔͔Δ࣌ؒ
ϕϯνϚʔΫ݁Ռ user system total real net/http 14.414228 28.327082 42.741310 (
77.200037) open-uri 15.608099 42.493993 58.102092 (115.153421) persistent_http 16.415132 19.942348 36.357480 (204.295474) excon 25.617961 35.878296 61.496257 ( 92.624589) curb 7.818012 10.445636 18.263648 ( 31.450269) typhoeus 16.514283 13.611175 30.125458 ( 43.214387) httparty 16.402169 27.036087 43.438256 ( 73.769290)
ϕϯνϚʔΫ݁Ռ ࣌ؒ ඵ OFUIUUQ PQFOVSJ
QFSTJTUFOU@IUUQ FYDPO DVSC UZQIPFVT IUUQBSUZ VTFS TZTUFN
ϕϯνϚʔΫ݁Ռ ࣌ؒ ඵ OFUIUUQ PQFOVSJ
QFSTJTUFOU@IUUQ FYDPO DVSC UZQIPFVT IUUQBSUZ VTFS TZTUFN ࠾༻
͍ͭͰʹ(FNԽ
None
ॲཧ֓ཁ module SpeedtestNet def self.run config = SpeedtestNet::Config.fetch server =
SpeedtestNet::Server.best_server download_results = SpeedtestNet::Download.measure(server) upload_results = SpeedtestNet::Upload.measure(server) SpeedtestNet::Config.clear_cache SpeedtestNet::Result.new(config.client, server, download_results, upload_results) end end
ॲཧ֓ཁ module SpeedtestNet def self.run config = SpeedtestNet::Config.fetch server =
SpeedtestNet::Server.best_server download_results = SpeedtestNet::Download.measure(server) upload_results = SpeedtestNet::Upload.measure(server) SpeedtestNet::Config.clear_cache SpeedtestNet::Result.new(config.client, server, download_results, upload_results) end end TQFFEUFTUOFUΑΓɺࣗ ͷύϒϦοΫ*1ɺͦͷ *1ͷҢɾܦΛऔಘ
ॲཧ֓ཁ module SpeedtestNet def self.run config = SpeedtestNet::Config.fetch server =
SpeedtestNet::Server.best_server download_results = SpeedtestNet::Download.measure(server) upload_results = SpeedtestNet::Upload.measure(server) SpeedtestNet::Config.clear_cache SpeedtestNet::Result.new(config.client, server, download_results, upload_results) end end TQFFEUFTUOFUΑΓɺଌఆ αʔόҰཡΛड৴ͯ͠ɺۙ͘ ͯԆͷগͳ͍αʔόΛબఆ
ॲཧ֓ཁ module SpeedtestNet def self.run config = SpeedtestNet::Config.fetch server =
SpeedtestNet::Server.best_server download_results = SpeedtestNet::Download.measure(server) upload_results = SpeedtestNet::Upload.measure(server) SpeedtestNet::Config.clear_cache SpeedtestNet::Result.new(config.client, server, download_results, upload_results) end end μϯϩʔυ ͷଌఆ
ॲཧ֓ཁ module SpeedtestNet def self.run config = SpeedtestNet::Config.fetch server =
SpeedtestNet::Server.best_server download_results = SpeedtestNet::Download.measure(server) upload_results = SpeedtestNet::Upload.measure(server) SpeedtestNet::Config.clear_cache SpeedtestNet::Result.new(config.client, server, download_results, upload_results) end end Ξοϓϩʔυ ͷଌఆ
ॲཧ֓ཁ module SpeedtestNet def self.run config = SpeedtestNet::Config.fetch server =
SpeedtestNet::Server.best_server download_results = SpeedtestNet::Download.measure(server) upload_results = SpeedtestNet::Upload.measure(server) SpeedtestNet::Config.clear_cache SpeedtestNet::Result.new(config.client, server, download_results, upload_results) end end ଌఆ݁ՌΛฦ͢
͍ํ irb(main):001:0> require 'speedtest_net' irb(main):002:0> result = SpeedtestNet.run irb(main):003:0> result.download
=> 511615528.0 irb(main):004:0> result.pretty_download => "511.62 Mbps” irb(main):005:0> result.upload => 647852285.33333334 irb(main):006:0> result.pretty_upload => "647.85 Mbps"
݁Ռ "NB[PO$MPVE8BUDI
None
·ͱΊ
·ͱΊ wޫࢥ͍ͬͯΔΑΓ͘ͳ͍ Β͍͠ w௨৴ΛѲ͢Δͷ͍͠ wϕϯνϚʔΫେࣄ w3VCZָ͍͠