{"id":5121,"date":"2025-12-31T07:45:08","date_gmt":"2025-12-30T22:45:08","guid":{"rendered":"https:\/\/matoken.org\/blog\/?p=5121"},"modified":"2025-12-31T07:45:10","modified_gmt":"2025-12-30T22:45:10","slug":"cloudflare-speed-test-with-tui","status":"publish","type":"post","link":"https:\/\/matoken.org\/blog\/2025\/12\/31\/cloudflare-speed-test-with-tui\/","title":{"rendered":"Cloudflare\u306e\u901f\u5ea6\u30c6\u30b9\u30c8\u3092TUI\u3067"},"content":{"rendered":"<div id=\"preamble\">\n<div class=\"sectionbody\">\n<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"48\" height=\"48\" viewBox=\"0 0 24 24\"><path fill=\"currentColor\" d=\"m11.628 16.186l-2.047-2.14l6.791-5.953l1.21 1.302zm8.837 6.047c2.14-2.14 3.535-5.117 3.535-8.466c0-6.604-5.395-12-12-12s-12 5.396-12 12c0 3.35 1.302 6.326 3.535 8.466l1.674-1.675c-1.767-1.767-2.79-4.093-2.79-6.79A9.57 9.57 0 0 1 12 4.185a9.57 9.57 0 0 1 9.581 9.581c0 2.605-1.116 5.024-2.79 6.791Z\"\/><\/svg><!-- simple-icons:speedtest --><\/p>\n<div class=\"paragraph\">\n<p>Cloudflare \u306e\u901f\u5ea6\u8a08\u6e2c\u30b5\u30a4\u30c8\u306e<a href=\"https:\/\/speed.cloudflare.com\/\">speed.cloudflare.com<\/a> \u3092TUI \u3067\u8a08\u6e2c\u3067\u304d\u308bcloudflare-speed-cli \u3068\u3044\u3046\u3082\u306e\u3092\u77e5\u3063\u305f\u306e\u3067\u8a66\u3057\u3066\u307f\u307e\u3057\u305f\uff0e<br \/>\ncloudflare-speed-cli \u306fRust \u88fd\u3067GPL-3.0 license \u3067\u3059\uff0e<\/p>\n<\/div>\n<div class=\"ulist\">\n<ul>\n<li>\n<p><a href=\"https:\/\/github.com\/kavehtehrani\/cloudflare-speed-cli\">kavehtehrani\/cloudflare-speed-cli: CLI for internet speed test via cloudflare<\/a><\/p>\n<div class=\"ulist\">\n<ul>\n<li>\n<p><a href=\"https:\/\/www.reddit.com\/r\/commandline\/comments\/1pxz5ks\/tui_app_for_internet_speed_test_via_cloudflares\/\">TUI app for internet speed test via Cloudflare&#8217;s endpoint : r\/commandline<\/a><\/p>\n<\/li>\n<\/ul>\n<\/div>\n<\/li>\n<\/ul>\n<\/div>\n<div class=\"paragraph\">\n<p>\u985e\u4f3c\u306e\u3082\u306e\u3067\uff0c<a href=\"https:\/\/www.speedtest.net\/\">speedtest.net<\/a> \u3092\u8a08\u6e2c\u3067\u304d\u308b<a href=\"https:\/\/github.com\/sivel\/speedtest-cli\">speedtest-cli<\/a> \u3092\u3088\u304f\u4f7f\u3063\u3066\u3044\u307e\u3059\u304c\uff0cCloudflare \u3082\u4f7f\u3048\u308b\u3068\u4fbf\u5229\u305d\u3046\u3067\u3059\uff0e<\/p>\n<\/div>\n<p><!--more--><\/p>\n<div class=\"paragraph\">\n<p>cloudflare-speed-cli \u306fGitHub Releases \u306b\u306fLinux x86_64, aarch64, macOS aarch64, x86_64, Windows x86_64 \u306e\u30d0\u30a4\u30ca\u30ea\u304c\u3042\u308a\u307e\u3059\uff0e\u3057\u304b\u3057\u4f8b\u306b\u3088\u3063\u3066Raspberry Pi bookworm armhf(Arm 32bit)\u3067\u3082\u8a66\u3057\u3066\u307f\u307e\u3059\uff0e<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Rust \u95a2\u9023\u306fasciimena 3.0 \u3092build \u3057\u305f\u3068\u304d\u306b\u5165\u308c\u305f\u3082\u306e\u304b\u3089rustup \u30671.92.0 \u306b\u3057\u305f\u3082\u306e\u3092\u4f7f\u3044\u307e\u3059\uff0e<\/p>\n<\/div>\n<div class=\"ulist\">\n<ul>\n<li>\n<p><a href=\"https:\/\/matoken.org\/blog\/2025\/09\/23\/building-in-asciinema-3-0-and-raspberry-pi-armhf-environments\/\">asciinema 3.0\u3068Raspberry Pi armhf\u74b0\u5883\u3067\u306e\u30d3\u30eb\u30c9 \u2013 matoken&#8217;s blog<\/a><\/p>\n<\/li>\n<\/ul>\n<\/div>\n<div class=\"paragraph\">\n<p><code>cargo install<\/code> \u3067\u6642\u9593\u304c\u639b\u304b\u308a\u307e\u3059\u304c\u7279\u306b\u3064\u307e\u3065\u3044\u305f\u308a\u305b\u305abuild \u3067\u304d\u307e\u3057\u305f\uff0e<\/p>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre>$ cargo --version\nwarning: `\/home\/matoken\/.cargo\/config` is deprecated in favor of `config.toml`\n  |\n  = help: if you need to support cargo 1.38 or earlier, you can symlink `config` to `config.toml`\ncargo 1.92.0 (344c4567c 2025-10-21)\n$ cargo install --git https:\/\/github.com\/kavehtehrani\/cloudflare-speed-cli --features tui\n$ cloudflare-speed-cli --help\nCloudflare-based speed test with optional TUI\n\nUsage: cloudflare-speed-cli [OPTIONS]\n\nOptions:\n      --base-url &lt;BASE_URL&gt;\n          Base URL for the Cloudflare speed test service [default: https:\/\/speed.cloudflare.com]\n      --json\n          Print JSON result and exit (no TUI)\n      --text\n          Print text summary and exit (no TUI)\n      --download-duration &lt;DOWNLOAD_DURATION&gt;\n          Download phase duration [default: 10s]\n      --upload-duration &lt;UPLOAD_DURATION&gt;\n          Upload phase duration [default: 10s]\n      --idle-latency-duration &lt;IDLE_LATENCY_DURATION&gt;\n          Idle latency probe duration (pre-test) [default: 2s]\n      --concurrency &lt;CONCURRENCY&gt;\n          Concurrency for download\/upload workers [default: 6]\n      --download-bytes-per-req &lt;DOWNLOAD_BYTES_PER_REQ&gt;\n          Bytes per download request [default: 10000000]\n      --upload-bytes-per-req &lt;UPLOAD_BYTES_PER_REQ&gt;\n          Bytes per upload request [default: 5000000]\n      --probe-interval-ms &lt;PROBE_INTERVAL_MS&gt;\n          Probe interval in milliseconds [default: 250]\n      --probe-timeout-ms &lt;PROBE_TIMEOUT_MS&gt;\n          Probe timeout in milliseconds [default: 800]\n      --experimental\n          Enable experimental features (TURN fetch + UDP-like loss probe)\n      --export-json &lt;EXPORT_JSON&gt;\n          Export results as JSON\n      --export-csv &lt;EXPORT_CSV&gt;\n          Export results as CSV\n      --auto-save &lt;AUTO_SAVE&gt;\n          Use --auto-save true or --auto-save false to override (default: true) [default: true] [possible values: true, false]\n      --interface &lt;INTERFACE&gt;\n          Bind to a specific network interface (e.g., ens18, eth0)\n      --source &lt;SOURCE&gt;\n          Bind to a specific source IP address (e.g., 192.168.10.0)\n      --certificate &lt;CERTIFICATE&gt;\n          Path to a custom TLS certificate file (PEM or DER format)\n  -h, --help\n          Print help\n  -V, --version\n          Print version\n$ cloudflare-speed-cli --version\ncloudflare-speed-cli 0.3.1<\/pre>\n<\/div>\n<\/div>\n<div class=\"paragraph\">\n<p>\u65e9\u901f\u8a66\u3057\u3066\u307f\u307e\u3059\uff0ecloudflare-speed-cli \u3092\u30aa\u30d7\u30b7\u30e7\u30f3\u306a\u3057\u3067\u5b9f\u884c\u3059\u308b\u3068TUI \u3067\u5b9f\u884c\u3055\u308c\u307e\u3059\uff0e\u8d77\u52d5\u3057\u3066\u3059\u3050\u306b\u8a08\u6e2c\u304c\u59cb\u307e\u308a\uff0c\u65e2\u5b9a\u5024\u3067\u306f\u8a08\u6e2c\u7d50\u679c\u304c\u4fdd\u5b58\u3055\u308c\u307e\u3059\uff0etab key \u3067History \u30da\u30fc\u30b8\u306b\u9077\u79fb\u3059\u308b\u3068\u904e\u53bb\u306e\u8a08\u6e2c\u7d50\u679c\u3092\u95b2\u89a7\u3057\u305f\u308a\u30a8\u30af\u30b9\u30dd\u30fc\u30c8\u3057\u305f\u308a\u3067\u304d\u307e\u3059\uff0e<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p><span class=\"image\"><img decoding=\"async\" src=\"https:\/\/matoken.org\/blog\/wp-content\/uploads\/2025\/12\/cloudflare-speed-cli_TUI.webp\" alt=\"cloudflare speed cli TUI\"><\/span><\/p>\n<\/div>\n<p><a href=\"https:\/\/asciinema.org\/a\/764905\" target=\"_blank\"><img decoding=\"async\" src=\"https:\/\/asciinema.org\/a\/764905.svg\" \/><\/a><\/p>\n<div class=\"paragraph\">\n<p><code>--text<\/code> \u30aa\u30d7\u30b7\u30e7\u30f3\u3067cli \u30e2\u30fc\u30c9\u3067\u3059\u304c\uff0c\u30d7\u30ed\u30b0\u30ec\u30b9\u304c\u5927\u91cf\u306b\u51fa\u3066\u3061\u3087\u3063\u3068\u4f7f\u3044\u3065\u3089\u3044\u611f\u3058\u3067\u3059\uff0e<\/p>\n<\/div>\n<p><a href=\"https:\/\/asciinema.org\/a\/764904\" target=\"_blank\"><img decoding=\"async\" src=\"https:\/\/asciinema.org\/a\/764904.svg\" \/><\/a><\/p>\n<div class=\"paragraph\">\n<p>\u30d7\u30ed\u30b9\u30ec\u30b9\u90e8\u5206\u306fSTDERR \u306a\u306e\u3067\u305d\u308c\u3092\u6368\u3066\u3066\u3057\u307e\u3063\u3066\u3082\u3044\u3044\u304b\u3082\u3057\u308c\u307e\u305b\u3093<\/p>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre>$ cloudflare-speed-cli --text 2&gt;\/dev\/null\nIP\/Colo\/ASN: 133.106.160.49 \/ NRT \/ 138384 (-)\nDownload: 23.73 Mbps\nUpload:   2.47 Mbps\nIdle latency p50\/p90\/p99: 98.9\/110.7\/110.7 ms (loss 0.0%, jitter 10.2 ms)\nLoaded latency (download) p50\/p90\/p99: 438.0\/578.6\/755.2 ms (loss 0.0%, jitter 130.1 ms)\nLoaded latency (upload) p50\/p90\/p99: 654.8\/794.1\/794.1 ms (loss 45.5%, jitter 144.4 ms)<\/pre>\n<\/div>\n<\/div>\n<div class=\"paragraph\">\n<p>\u3053\u3093\u306a\u611f\u3058\u3067\u5b9a\u671f\u7684\u306b\u8a08\u6e2c\u3059\u308b\u306e\u306b\u3082\u4fbf\u5229\u304b\u3082\u3068\u601d\u3044\u307e\u3057\u305f\u304c\uff0ccli \u30e2\u30fc\u30c9\u3067\u306f\u65e2\u5b9a\u5024\u3067\u306f\u7d50\u679c\u3092\u4fdd\u5b58\u3057\u306a\u3044\u3088\u3046\u3067\u3059\uff0e<\/p>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre>$ watch -n 3600 -- cloudflare-speed-cli --text<\/pre>\n<\/div>\n<\/div>\n<div class=\"paragraph\">\n<p><code>--auto-save true<\/code> \u3082\u8ffd\u52a0\u3059\u308b\u3068\u7d50\u679c\u304c\u4fdd\u5b58\u3055\u308c\u307e\u3059\uff0e<\/p>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre>$ watch -n 3600 -- cloudflare-speed-cli --text --auto-save true<\/pre>\n<\/div>\n<\/div>\n<div class=\"paragraph\">\n<p>\u305f\u3060\uff0c\u4ee5\u4e0b\u306e\u3088\u3046\u306bTUI \u30e2\u30fc\u30c9\u306e\u8a08\u6e2c\u6642\u306e\u30ed\u30b0\u306b\u306f <code>--interface<\/code> \u3092\u6307\u5b9a\u3057\u3066\u3082Interface \u3084AP \u540d\u306f\u4fdd\u5b58\u3055\u308c\u306a\u3044\u3088\u3046\u3067\u3059\uff0e<\/p>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre>\u2502 3.   2025-12-31 06:30:11 +09:00  DL   20.69 Mbps  UL    4.66 Mbps  Idle p50  103.7 ms  -  <b class=\"conum\">(1)<\/b>\n\u2502 4.   2025-12-31 06:08:33 +09:00  DL   21.73 Mbps  UL    3.16 Mbps  Idle p50  100.7 ms  wlan0  TP-L13&#x1f4bb; <b class=\"conum\">(2)<\/b><\/pre>\n<\/div>\n<\/div>\n<div class=\"colist arabic\">\n<ol>\n<li>\n<p><code>--text<\/code> \u3067cli \u30e2\u30fc\u30c9\u3067\u5b9f\u884c\u3057\u305f\u3068\u304d\u306e\u7d50\u679c<\/p>\n<\/li>\n<li>\n<p>TUI \u30e2\u30fc\u30c9\u3067\u5b9f\u884c\u3057\u305f\u3068\u304d\u306e\u7d50\u679c<\/p>\n<\/li>\n<\/ol>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_see_also\">SEE ALSO<\/h2>\n<div class=\"sectionbody\">\n<div class=\"listingblock\">\n<div class=\"title\"><a href=\"https:\/\/github.com\/sivel\/speedtest-cli\">sivel\/speedtest-cli: Command line interface for testing internet bandwidth using speedtest.net<\/a> speedtest.net \u3092\u4f7f\u3044cli \u3067\u8a08\u6e2c<\/div>\n<div class=\"content\">\n<pre>$ speedtest-cli\nRetrieving speedtest.net configuration...\nTesting from Rakuten Mobile Network (133.106.160.42)...\nRetrieving speedtest.net server list...\nSelecting best server based on ping...\nHosted by GSL Networks (Tokyo) [0.26 km]: 60.882 ms\nTesting download speed................................................................................\nDownload: 12.70 Mbit\/s\nTesting upload speed......................................................................................................\nUpload: 2.69 Mbit\/s<\/pre>\n<\/div>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"title\"><a href=\"https:\/\/www.speedtest.net\/apps\/cli\">Speedtest CLI: Internet speed test for the command line<\/a> \u203bOokla\u516c\u5f0f\u3060\u304c\u30d7\u30ed\u30d7\u30e9\u30a4\u30a8\u30bf\u30ea<\/div>\n<div class=\"content\">\n<pre>$ speedtest\n\n   Speedtest by Ookla\n\n      Server: IPA CyberLab 400G - Tokyo (id: 48463)\n         ISP: Rakuten Mobile Network\nIdle Latency:    50.15 ms   (jitter: 1.41ms, low: 48.98ms, high: 52.36ms)\n    Download:    20.75 Mbps (data used: 19.9 MB)\n                262.40 ms   (jitter: 71.32ms, low: 72.73ms, high: 398.26ms)\n      Upload:     2.96 Mbps (data used: 1.6 MB)\n                779.27 ms   (jitter: 95.79ms, low: 75.05ms, high: 1148.99ms)\n Packet Loss:     0.0%\n  Result URL: https:\/\/www.speedtest.net\/result\/c\/e1a349cf-53eb-4d63-b8f4-8550dabd772d<\/pre>\n<\/div>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"title\"><a href=\"https:\/\/github.com\/n8henrie\/fastcli\/\">n8henrie\/fastcli: Python3 speed test via Fast.com<\/a> fast.com \u3092\u4f7f\u3044cli \u3067\u8a08\u6e2c\u2026\u20262025-12-27\u306barchived \u3055\u308c\u3066\u3044\u305f<\/div>\n<div class=\"content\">\n<pre>$ python -m fastcli -v\nApproximate download speed: 17.48 Mbps<\/pre>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Cloudflare \u306e\u901f\u5ea6\u8a08\u6e2c\u30b5\u30a4\u30c8\u306espeed.cloudflare.com \u3092TUI \u3067\u8a08\u6e2c\u3067\u304d\u308bcloudflare-speed-cli \u3068\u3044\u3046\u3082\u306e\u3092\u77e5\u3063\u305f\u306e\u3067\u8a66\u3057\u3066\u307f\u307e\u3057\u305f\uff0e cloudflare-speed- [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"webmentions_disabled_pings":false,"webmentions_disabled":false,"activitypub_content_warning":"","activitypub_content_visibility":"","activitypub_max_image_attachments":4,"activitypub_interaction_policy_quote":"anyone","activitypub_status":"federated","footnotes":""},"categories":[809,7,6,546,199],"tags":[1260,539,253,654],"class_list":["post-5121","post","type-post","status-publish","format-standard","hentry","category-bookworm-raspberry-pi-os","category-debian-linux","category-linux","category-raspberry-pi-os","category-sid","tag-cloudflare","tag-raspberry-pi-os","tag-speedtest","tag-tui"],"_links":{"self":[{"href":"https:\/\/matoken.org\/blog\/wp-json\/wp\/v2\/posts\/5121","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/matoken.org\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/matoken.org\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/matoken.org\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/matoken.org\/blog\/wp-json\/wp\/v2\/comments?post=5121"}],"version-history":[{"count":1,"href":"https:\/\/matoken.org\/blog\/wp-json\/wp\/v2\/posts\/5121\/revisions"}],"predecessor-version":[{"id":5122,"href":"https:\/\/matoken.org\/blog\/wp-json\/wp\/v2\/posts\/5121\/revisions\/5122"}],"wp:attachment":[{"href":"https:\/\/matoken.org\/blog\/wp-json\/wp\/v2\/media?parent=5121"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/matoken.org\/blog\/wp-json\/wp\/v2\/categories?post=5121"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/matoken.org\/blog\/wp-json\/wp\/v2\/tags?post=5121"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}