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
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
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
AAIFに入ってみた ~内から見えるコミュニティ動向~
sato4
0
220
2026TECHFRESH畢業分享會 - Lightning Talk - 資料也要 CI/CD? 用 Airbyte 自動化資料同步
line_developers_tw
PRO
0
1k
エラーバジェットのアラートのタイミングを考える.pdf
kairim0
0
150
ルールやカスタム機能、どう活かす?ハンズオンで体感するIBM Bobの出力コントロール
muehara
1
160
フィジカル版Github Onshapeの紹介
shiba_8ro
0
220
入門!AWS Blocks
ysuzuki
1
120
SONiC Scale-Up Working Group から探る Scale-UpやUltraEthernet機能の実装方法
ebiken
PRO
2
330
NAB Show 2026 動画技術関連レポート / NAB Show 2026 Report
cyberagentdevelopers
PRO
0
200
SONiCの統計情報を取得したい
sonic
0
160
LLMにもCAP定理があるという話
harukasakihara
0
360
2026TECHFRESH畢業分享會 - 葬送的通靈師:化系統與用戶雜訊成行動訊號
line_developers_tw
PRO
0
1k
「エンジニア進化論」2028年の開発完全自動化、エンジニアはどう進化するか
cyberagentdevelopers
PRO
6
5.1k
Featured
See All Featured
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
254
22k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
230
23k
SEO in 2025: How to Prepare for the Future of Search
ipullrank
3
3.5k
Marketing to machines
jonoalderson
1
5.4k
Lightning Talk: Beautiful Slides for Beginners
inesmontani
PRO
2
570
Mozcon NYC 2025: Stop Losing SEO Traffic
samtorres
1
250
Neural Spatial Audio Processing for Sound Field Analysis and Control
skoyamalab
0
330
How to make the Groovebox
asonas
2
2.2k
The Director’s Chair: Orchestrating AI for Truly Effective Learning
tmiket
1
190
What's in a price? How to price your products and services
michaelherold
247
13k
A designer walks into a library…
pauljervisheath
211
24k
First, design no harm
axbom
PRO
2
1.2k
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ָ͍͠