【CLIツール探訪②】ブラウザを開かずに、コマンドのみでの通信速度測定に便利な「speedtest-cli」を試用。

- CLIの恩恵を更に浴びるべく、ひたすら魅惑のツールを追い求める記事第二弾。
- 定期的な過去回想作業を実施したところ、最初と最新の記事の内容の変化の無さに、数秒間「時間の平等さ」を疑問視。
- 今回は、コマンド上から通信速度の測定が可能な「**speedtest-cli**」を試用することにしよう。

## 概要
- 通信環境の回線速度をコマンド上で調べることが可能なPython製のCLIツール。
- 以前からある、回線速度測定サイトの[speedtest.net](https://www.speedtest.net/)のコマンドライン版。
- [公式Github](https://github.com/sivel/speedtest-cli)
- [マニュアルページ](https://www.mankier.com/1/speedtest-cli)

## 特徴

### コマンドベースでの測定
- ブラウザから[速度測定サイト](https://www.speedtest.net/)へいく必要がなく、ターミナル上からコマンド一発で測定することができる。
- そのため、ブラウザ環境がないLinux環境でも通信測定が可能。

### 最寄りサーバーの自動検知
- 最寄りのサーバーを指定する必要がなく、基本コマンドをうつと、自動で最寄りのサーバーを検知して、その拠点での測定をする。

### サーバー指定
- speedtest-cliで測定可能なサーバーリストから、直接サーバーIDを指定しての測定も可能。

### 共有画像の出力
- 測定結果を共有する際に、画像URLとして出力してくれるため、容易な結果連携が可能。


## 結果
- 下記の基本コマンドを入力すると、自動で近辺のサーバーに接続して、速度を測定できる。

<img width="681" alt="test.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/336499/c1aced87-a606-320a-bed4-c71a51fd9eef.png">

- また、速度結果に加えて、オプション指定で共有可能な画像URLを出力してくれる。

<img width="505" alt="test2.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/336499/90b001d6-7e66-627b-9a19-b690a69cfa9d.png">

<img width="384" alt="hist.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/336499/8f1d3397-77d8-f562-3b2c-0e2c73e087b6.png">


## 環境
- Amazon Linux 2
- ※**speedtest-cliは、Python(pip,easy_install)やcurl等のインストールにも対応しているため、MacやWindowsでも可能。**

## インストール

### Python(pip)でのインストール
- Pythonのパッケージ管理ツールであるpipを利用してのインストールは、下記のコマンドをうつ。

```bash
$ sudo pip install speedtest-cli
```

### Python(easy_install)でのインストール
- Pythonのパッケージ管理ツールであるeasy_installを利用してのインストールは、下記のコマンドをうつ。

```bash
$ sudo easy_install speedtest-cli
```

### curlでのインストール
- curlを利用して直接ダウンロードしてくるには、下記のコマンドをうつ。

```bash
$ curl -Lo speedtest-cli https://raw.githubusercontent.com/sivel/speedtest-cli/master/speedtest.py

$ chmod +x speedtest-cli
```

### その他でのインストール
- 上記以外での方法のインストール方法は、[こちら](https://github.com/sivel/speedtest-cli#installation)を参照。

### インストール確認
- 上記の方法でのインストールが完了したら、下記のコマンドをうち、speedtest-cliが利用可能か確認する。

```bash
# バージョン確認
$ speedtest-cli --version
```

## 基本操作一覧
- 基本操作は、下記の一覧のように行う。

|内容|コマンド|
|:---:|:---:|
|基本測定|`speedtest-cli`|
|ダウンロード測定をスキップした測定<br>アップロードテストでの測定|`speedtest-cli --no-download`|
|アップロード測定をスキップした測定<br>ダウンロードテストでの測定|`speedtest-cli --no-upload`|
|結果をバイト単位で出力する測定<br>**※通常はビット単位**|`speedtest-cli --no-upload`|
|共有画像URLも出力する測定|`speedtest-cli --share`|
|CSV形式での結果出力測定<br>※**詳細測定はスキップ**|`speedtest-cli --csv`|
|JSON形式での結果出力測定<br>※**詳細測定はスキップ**|`speedtest-cli --json`|
|接続サーバー一覧出力<br>**※距離が近い順で並べられている。**|`speedtest-cli --list`<br>※単体で行うと、膨大な出力結果になる。<br>そのため、`grep Japan`等で項目を絞る。|
|サーバー指定での測定|`speedtest-cli --server サーバーID`<br>**※サーバーIDは、上記の`speedtest-cli --list`で表示されるIDを指す。**|
|HTTPS接続での測定|`speedtest-cli --secure`|
|バージョン確認|`sppedtest-cli --version`|

## 操作例
- 下記、いくつかの基本操作例。

### 基本測定と共有画像URL出力測定

```bash
# 基本測定
$ speedtest-cli

Retrieving speedtest.net configuration...
Testing from XXXXX
Retrieving speedtest.net server list...
Selecting best server based on ping...
Hosted by Consolidated XXXXX
Testing download speed................................................................................
Download: 364.06 Mbit/s
Testing upload speed................................................................................................
Upload: 355.05 Mbit/s

# 共有画像URL出力測定
$ speedtest-cli --share

・・・・・・・
Download: 377.33 Mbit/s
Testing upload speed................................................................................................
Upload: 294.77 Mbit/s
Share results: http://www.speedtest.net/result/XXXXX.png
```

### CSVやJSON形式出力

```bash
# CSV出力
$ speedtest-cli --csv

7168,Time Warner Cable,"XXXXXX, XXXX",2019-07-31T12:09:42.XXXXX,2.XXXXXX,27.117,XXXXXX.XXXXXX,XXXXXX.XXXXXX,,XXXXXX

# JSON出力
# ※JSON整形コマンド「jq」との併用も可能。
$ speedtest-cli --json | jq

{
  "client": {
    "rating": "0",
    "loggedin": "0",
    "isprating": "3.7",
    "ispdlavg": "0",
    "ip": "XXXXXX",
    ・・・・・・
  }
}
```

### サーバー指定での測定

```bash
# 接続先サーバー一覧(日本)の確認
# ※出力結果の一番左の「XXXXX)」のXXX部分がサーバーID
$ speedtest-cli --list | grep Japan

 XXXXX) Allied Telesis Capital Corporation (Misawa, Japan) [XXXX km]
 XXXX) SoftEther Corporation (Tsukuba, Japan) [XXX km]
XXX) IPA CyberLab (Bunkyo, Japan) [XXXX km]
XXX) OPEN Project (via 20G SINET) (Tokyo, Japan) [XXXX km]
XXXX) GLBB Japan (Tokyo, Japan) [XXXX km]
XXX) i3D.net (Tokyo, Japan) [XXXX km]
XXXX) Rakuten Mobile , Inc (Tokyo, Japan) [XXXX km]

# サーバーID指定での測定
# ※出力結果のHostedが指定サーバーへ変更していることを確認。
$ speedtest-cli --server サーバーID

Retrieving speedtest.net server list...
Retrieving information for the selected server...
Hosted by XXXX
```

## まとめ
- 今回は速度測定ということで、滅多に無い機会であるこの状況のせいか、終始高揚状態になりながら、記事を書く。
- 「他者との比較での面白さ」という測定系の最大利点の、代替を必死に探索。
- 通信系ツールにときめきを見出したため、次回も同様のツールを試してみることにしよう。

## 参考
- https://computerlife.hateblo.jp/entry/speedtest-cli  
→こちらの記事を参考にしました。大変お世話になりました。
- https://qiita.com/CloudRemix/items/ad226ea4aa641427e682  
→こちらの記事を参考にしました。