SORACOM Airの回線速度変更APIの適用タイミング検証

[SORACOMリリース記念のリレーブログ](https://blog.soracom.jp/relay-blog/)10/2担当の [ma2shita(まにした)](https://twitter.com) です

9/30にセンセーショナルなローンチをされた[ソラコム](https://soracom.jp/)さんの[SORACOM Air](https://soracom.jp/services/air/)ですが、なんと[APIでSIM制御](https://soracom.jp/services/air/#feature_api)ができます

じゃあ回線速度の変更APIを叩いたら、どのくらいのタイムラグでそれが適用されるのか？気になったので検証してみました
（早速APIネタでいいのか、という声は無視してAPIトライネタです）
 
検証機は、弊社のIoTゲートウェイ "[OpenBlocks IoT BX1](http://openblocks.plathome.co.jp/products/obs_iot/bx1/)" を使いました。無論、[SORACOM Airに対応](http://www.plathome.co.jp/about/press/1509_04.html)しております！ (広告)

![fig 1-1.png](https://qiita-image-store.s3.amazonaws.com/0/22754/b9e77488-97e9-a5ab-0a26-78a35071a321.png)

※お約束ですが、これは個人のメモ/意見であり、所属する組織を代表するものではありません

ちなみに従来だと
=============

回線速度を変えるとなったら、一大事でした
事務手数料はかかる、別のSIMが来る、実際の切り替えまで１ヶ月かかる、そんな不満をAPIで解消するわけです！

TL;DR
=====

結論から書いちゃうと **APIを叩いてから2〜3秒で適用されます**
もはや即時適用と言って過言ではありません

実際にやってみた時のスクリーンキャスト動画(90秒)は[こちら](http://www.youtube.com/watch?v=pN-AtOZB8Oc)です

開封の儀
========

Docomoさんの回線を使っているとのことなので、SIMは Docomoさんのパッケージです

![fig 1-2a.jpg](https://qiita-image-store.s3.amazonaws.com/0/22754/82ca734e-6e6e-5f58-60ef-5b67954bc353.jpeg)

SIMは3種類から選べます。今回入手したのはnano-SIMです
交換対応はどうなんでしょうか？情報が待たれます

"OpenBlocks IoT BX1" をWi-Fiルータにしてみる
===================================================

検証用として OpenBlocks IoT BX1 (以下、BX1) にSORACOM AirのSIMを挿し、BX1をWi-Fiルータにしてみます

作業としては、たった2つです

1. 無線APとしてBX1を設定する
2. APNの設定をする

SIMを挿す
---------

まずは、電源OFF状態のBX1に SORACOM Air のSIMを挿します

![fig 1-3.jpg](https://qiita-image-store.s3.amazonaws.com/0/22754/19890bbe-ff3e-2de0-17a5-df45e0fe9537.jpeg)

BX1は標準SIMサイズ(mini-SIMサイズ)を挿れることが出来ます。SIMアダプタの使用は**保証外**のようです[^注1]

[^注1]: ※どうしても使う場合はフィルムで固定する系統のSIMアダプタが使えるらしいですが、何度も言いますがアダプタ利用は**保証外**です。最悪は、SIMスロットが壊れてしまいます(T_T

電源を入れる
------------

BX1には電源ボタンが無く、シリアルコンソール兼電源用コードを挿すだけで起動が始まります
起動に4分程かかりますので、腹筋しながらお待ちください[^注2]

[^注2]: ※3GモデムとSIM情報の読み込みに時間がかかっているようです。この辺は改善が待たれます

Web管理画面から設定する
-----------------------

### 無線APとして設定する ###

BX1のWeb管理画面の表示から無線APとして設定する方法は、クラスメソッドの[せーのさんの記事](http://dev.classmethod.jp/hardware/introduce-to-openblocks-iot-bx1/)が秀逸です。是非ご覧ください！[^注3]

[![Screenshot from 2015-09-30 14:34:34.png](https://qiita-image-store.s3.amazonaws.com/0/22754/1bbd03b9-bb5c-0b7f-4287-05888f78158f.png)](http://dev.classmethod.jp/hardware/introduce-to-openblocks-iot-bx1/)

[^注3]: ※自社のページじゃないところが、なんともニンニン

### APNの設定をする ###

SORACOM Airの設定はBX1のWeb管理画面にAPN設定があるので、マニュアル記載のAPNやID/Passwordを設定して再起動するだけです

![fig 1-4.png](https://qiita-image-store.s3.amazonaws.com/0/22754/4d168411-8e38-d8ae-5359-a27f49236984.png)

以上で、BX1をWi-Fiルータ化でき、3G回線を使ったIoTゲートウェイとして利用することができます

SORACOM AirのスゴさはAPI
========================

SORACOM Airのスゴさは、SIM、即ち回線の制御がすべてAPIで提供されるところです

変更は即時適用され、しかも標準で提供されるという、今までのキャリア回線では考えられなかった環境が手に入ります
APIドキュメントは[公開](https://dev.soracom.io/jp/docs/api/)されていて、直ぐに利用可能です。今回は回線速度の変更のAPIを使って、ダイナミックに回線速度を変更してみます

やりたいことは、こんな感じ

![fig 1-5.png](https://qiita-image-store.s3.amazonaws.com/0/22754/2124410e-dd88-3c9b-ec06-9f6f782646b8.png)

注: 文中のAPIリクエスト/レスポンスは10/1時点のもので、変更されているかもしれませんので、[最新のドキュメント](https://dev.soracom.io/jp/docs/api/)を確認してください

RubyのSDKをインストールする
---------------------------

API操作のため、Ruby向けのAPI SDKツールをインストールします

SORACOMのAPIはHTTPS RESTです。が、認証の仕組み等、正直めんどうです(^^;
Ruby向けSDKが用意されており、コマンドラインからAPI操作ができるようになりますので、是非とも入れましょう[^注4]

[^注4]: ※ さもなくば、curlとお付き合いください

### Ruby SDKのインストール ###

SDKページの方法に沿ってインストールします
https://dev.soracom.io/jp/tools/

```console
$ (sudo) gem install soracom
```

これで `soracom` コマンドが使えるようになります

```console
$ soracom version
Soracom API tool v1.0.1
```

APIを叩いてみる (`soracom sim list`)
------------------------------------

[Web console](https://console.soracom.io)のアカウントを作成したら、APIが直ぐ叩けます

まず、いきなり叩いてみましょう

コマンド中の `YOUR_SORACOM_EMAIL` `YOUR_SORACOM_PASSWORD` は、Webコンソールへのログインアカウント情報です
*※これ以降では省略します*

```console
$ export SORACOM_EMAIL=YOUR_SORACOM_EMAIL
$ export SORACOM_PASSWORD=YOUR_SORACOM_PASSWORD
$ soracom sim list
[]
```

まだSIMを登録していないので、空のJSON配列が返ってきました[^注5]
見ての通りJSONでデータが返されるため、jqを使った加工操作も可能です

[^注5]: ※ サブコマンドの `sim` は `subscriber` の別名です。本体は `subscriber` ですが、個人的には `sim` の方がわかりやすいです。。。

SIMを登録する
-------------

[SIMの登録もAPIから](https://dev.soracom.io/jp/docs/api/#!/Subscriber/register_subscriber)できますが、ここはWebコンソールから行いました

必要な情報はSIMカードに書かれている「IMSI」「PASSCODE」です

![fig 1-6.png](https://qiita-image-store.s3.amazonaws.com/0/22754/081e9070-44f1-b2a5-4319-47756b32314a.png)

上記情報をWebコンソールに入力し、登録を完了します

![fig 1-7.png](https://qiita-image-store.s3.amazonaws.com/0/22754/1eb9f819-9b74-80d3-7ebc-17701c577085.png)

再度 `sim list` してみましょう

```console
$ soracom sim list
[
  {
    "imsi": "4XXXXXXXXXXX2",
    "msisdn": "8XXXXXXXXXXX3",
    "ipAddress": "X.XXX.X.XXX",
    "apn": "soracom.io",
    "type": "s1.standard",
...snip...
    "status": "active",
    "tags": {
      "FormFactor": "nano",
      "name": "ma2sim",
      "Manager": "ma2shita"
    },
...snip...
  }
]
```

ええ感じで返ってきました！
*tag*もSIMに割り当てることができますから、管理も捗ります

ここまで出来れば、あとは弄りたい放題ですので、速度の変更を試してみます

速度の変更API
-------------

あらためて現状のSIMの回線速度を確認します

```console
$ soracom sim list | jq .[0].speedClass
"s1.minimum"
```

速度変更は [`sim update_speed_class`](https://dev.soracom.io/jp/docs/api/#!/Subscriber/update_subscriber_speed_class) です。対象となるSIMのIMSIと、変更先速度の名前を指定します

s1.fastに変更してみます

```console
$ soracom sim update_speed_class --imsi=4xxxxxxxxxxx2 --speed-class=s1.fast | jq .[0].speedClass
"s1.fast"
```

無事、変更完了です。あっけないほど、簡単です

`--speed-class` に指定できるのは、10/1時点での[速度クラスは 4つ](https://soracom.jp/services/air/price/#price4)です

* s1.minimum
* s1.slow
* s1.standard
* s1.fast

色々なところで書かれていますが、どこかで見たことのあるような、クラス名です

本題: 通信中の速度変更はどうなのか？
------------------------------------

恐れいります、やっと本題です

通信中にAPIで速度を変更すると、どうなるのか？です

![fig 1-5.png](https://qiita-image-store.s3.amazonaws.com/0/22754/2124410e-dd88-3c9b-ec06-9f6f782646b8.png)

**結論、即時適用されます！**

s1.minimum → s1.fast → s1.standard → s1.minimum と試してみた[スクリーンキャストがこちら](http://www.youtube.com/watch?v=pN-AtOZB8Oc)です (90秒動画)

[![SORACOM Air APIの適用タイミング検証の動画](http://img.youtube.com/vi/pN-AtOZB8Oc/0.jpg)](http://www.youtube.com/watch?v=pN-AtOZB8Oc)

APIを叩いてから、2〜3秒で転送速度が変化しています
無論、セッションも切れていません。素晴らしいの一言に尽きます！

まとめ & ひきつぎ
----------------

SORACOM Airは「通信費が8割も安い」と価格面が強調した紹介がされていますが、本質的にはモバイル回線を "24時間365日つながってるもの" から **"必要なときだけ使うもの"** へと変えてしまう、**ルールチェンジャー的なサービス**といえます

今回のAPIコントロールや、ここでは紹介できなかった SORACOM Beamと、今までできなかったことを実現するソラコムのサービスに今後も期待できます

次は[10/5(月)のクラスメソッド 都元さん](https://blog.soracom.jp/relay-blog/)にバトンをお渡しします、よろしくお願いします！

* * *