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
【CEDEC2026】ゲームシナリオライターを支援するAIツール開発の実践 ― 設計とプロンプトの工夫 ―
cygames
PRO
1
160
システム監視入門
grimoh
5
790
事業成長とAI活用を止めないデータ基盤アーキテクチャの設計思想
hiracky16
0
790
CloudWatchから始めるAWS監視
butadora
0
310
AIがコードを書く時代、人間は何を保証するのか———馬場さんと考える、開発者に求められる新しい責任と価値 - TECH PLAY
netmarkjp
0
1k
歴史から理解するクラウドインフラのしくみ
kizawa2020
1
200
Webの技術とガジェットで子どもも大人も楽しめるワクワク体験を提供する / Qiita Tech Festa Day 2026
you
PRO
1
330
PLaMo 3.0 Primeの事後学習
pfn
PRO
0
240
最高のシステムプロンプトを作るためにフィードバック機能を導入した話
alchemy1115
1
270
Claude Code並行開発環境の ムダ‧ムラ‧ムリを見直した話
muranakaaa
1
390
AIがAPIを書く時代に、私たちは何を設計すべきか
nagix
0
200
SnowflakeCoCoでデータエンジニアリング!
foursue
0
110
Featured
See All Featured
30 Presentation Tips
portentint
PRO
1
360
Exploring the relationship between traditional SERPs and Gen AI search
raygrieselhuber
PRO
2
4.2k
The Impact of AI in SEO - AI Overviews June 2024 Edition
aleyda
5
1.1k
The AI Search Optimization Roadmap by Aleyda Solis
aleyda
1
6k
HU Berlin: Industrial-Strength Natural Language Processing with spaCy and Prodigy
inesmontani
PRO
0
590
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.6k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.8k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
35
2.5k
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
3
1.1k
Fashionably flexible responsive web design (full day workshop)
malarkey
408
67k
Building Flexible Design Systems
yeseniaperezcruz
330
40k
Claude Code のすすめ
schroneko
67
230k
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ָ͍͠