SORACOM IoT SIMのサブスクリプションコンテナをcliで触ってみる

# これは

[2021年3月30日に発表された](https://soracom.com/ja-jp/news/20210330-1/)SORACOM IoT SIMのplanX2での接続を試し、さらにサブスクリプションコンテナ機能をcliから触ってみたという記事です。

# サブスクリプションコンテナとは

サブスクリプションコンテナとは、一言で言うと1枚のSIMの中に複数のサブスクリプション(契約)を入れておき、それを切り替えて使えるという機能です。

SORACOM IoT SIMは複数の国や地域で利用でき、移動しながら使うケースもあるわけですが、サブスクリプションコンテナの中に複数のサブスクリプションを入れておくと国や地域を移動したときに自動的に最適な(価格の安い)サブスクリプションに切り替えて通信を行ってくれるという使い方ができます。

# 日本国内で使うメリット

日本国内だけで使っている場合は、サブスクリプションは切り替えできません(正確に言うとplan01sからplanX1などのローミングなしのプランには切り替えられますが、国内で複数のローミング無しのプランを切り替えながら使うことはできません)。しかもローミング無しのプランにしても特定地域向けSIMの方が安いです。
じゃあ使う意味はあるのか？というと・・・あります。それが5Gに対応したplanX2の存在です。

planX2は2021年3月30日に発表された、KDDI回線を用いた5G接続に対応したプランです。planX2については[ソラコム公式ブログ](https://blog.soracom.com/ja-jp/2021/03/30/soracom-air-supports-5g-with-planx2/)をご覧ください。

5Gは使えるエリアもまだ少なく用途についてもこれからというところはありますが、5Gの接続を使わなくてもこれまでplanX1を使われていた方は通信費が半分になるという価格メリットがあります。

# まずは試してみる

早速試してみましょう。SORACOM IoT SIMを[soracom console](https://console.soracom.io)から購入します。最初に右上の「カバレッジ」をグローバルに変えてからメニューの「発注」に進みます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/59415/00603634-75a7-54af-e7ab-5417a583e0b7.png)

初めてグローバルで発注する場合、ここで支払い情報の入力に進みます。支払い情報(カード情報など)は、カバレッジごとに個別のようです。

ちなみにカバレッジが「日本」のままで「発注」に進み、そのあとでカバレッジを変えることもできますが、グローバルの支払い情報の登録が終わっていない場合、切り替えた時に「購入できる商品がありません」と表示されてしまいます(実際私はそれにハマりました)。

次に、届いたSIMを手元のSIMフリースマホに挿します。切り替え前にローミングのdocomo回線に接続ができ、切り替え後にKDDIの回線に接続ができ、SMSを受信できる端末であればOKだと思いますが公式に動作確認されていないものについては at your own riskでお願いいたします。なお、私はGeminiPDA(Planet Computers)で行いました。

公式に動作確認が取れているものについては [ソラコム公式ブログ](https://blog.soracom.com/ja-jp/2021/03/30/soracom-air-supports-5g-with-planx2/)をご確認ください。

SIMを挿したあとは

- ローミングをONにする
- いつも通りAPN情報を入れる
- docomo回線で接続できてるのを確認する
- [ソラコム公式ブログ](https://blog.soracom.com/ja-jp/2021/03/30/soracom-air-supports-5g-with-planx2/)に従ってコンソールで作業

で無事に完了します。切り替え後は恐らくAPNの設定が再度必要になると思います。

接続後に通信をして、コンソールからSIMの通信履歴を見ると以下のようにplanX2で通信できているのが確認できます。

![2021-04-03_15h20_00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/59415/603c03c7-6003-2421-325e-541a367976f3.png)

# cliでやってみる

さて、ようやく本題です。次はこのサブスクリプションの追加作業をcliでやってみます。

残念ながら追加したサブスクリプションは削除はできませんので、ここでは既にplanX2が追加されているサブスクリプションコンテナにplanX1を追加してみることにします。

soracm cliはv0.5.5以降だと対応していると思います。本記事はv0.7.0で行っています。

まずは現在のSIMの情報を取得し、SIM IDとICCIDを取得しておきます。デフォルトのカバレッジを日本にしている型は、オプションでカバレッジをグローバルにする(`--coverage-type g`)のを忘れないようにします。

```:bash
# soracom --coverage-type g sims list
[
        {
                "activeProfileId": "*************",
                "createdTime": 1617429539909,
....
                "profiles": {
                        "***************": {
                                "globalSimPlmnTable": null,
ここ！->                         "iccid": "*************",
                                "otaSupported": true,
                                "primaryImsi": "***********",
                                "slotProvisioningStatus": {
                                        "cancelled": false,
                                        "completedExceptionally": false,
                                        "done": false,
                                        "numberOfDependents": 0
                                },
                                "subscribers": {
                                        "*****************": {
                                                "imsi": "***********",
                                                "msisdn": "*************",
                                                "status": "active",
                                                "subscription": "plan01s"
                                        },
                                        "*****************": {
                                                "imsi": "*************",
                                                "msisdn": "**************",
                                                "status": "active",
                                                "subscription": "planX2"
                                        }
                                }
                        }
                },
.....
ここ！->        "simId": "**********",
                "speedClass": "s1.standard",
                "status": "active",
                "tags": {},
                "terminationEnabled": false,
                "type": "uicc"
        }
]
```

一部省略していますが、profiles/subscribersにplan01sとplanX2があるのも分かります。

では、この情報を使って、planX1を足してみましょう。

```:bash
soracom --coverage-type g sims add-subscription --iccid ************** --sim-id ************** --body '{"subscription":"planX1"}'
{
        "globalSimPlmnTable": {
                "entries": [
                        {
                                "containerId": 2,
                                "mcc": "440",
                                "mnc": "",
                                "subscriberPlmn": null,
                                "switchOnLimitedState": true,
                                "switchOnPresentState": true
                        },
                        {
                                "containerId": 2,
                                "mcc": "441",
                                "mnc": "",
                                "subscriberPlmn": null,
                                "switchOnLimitedState": true,
                                "switchOnPresentState": true
                        },
                        {
                                "containerId": 1,
                                "mcc": "",
                                "mnc": "",
                                "subscriberPlmn": null,
                                "switchOnLimitedState": true,
                                "switchOnPresentState": true
                        }
                ]
        },
        "iccid": "**************",
        "otaSupported": true,
        "primaryImsi": "***********",
        "slotProvisioningStatus": {
                "cancelled": false,
                "completedExceptionally": false,
                "done": false,
                "numberOfDependents": 0
        },
        "subscribers": {
                "**************": {
                        "imsi": "*************",
                        "msisdn": "************",
                        "status": "active",
                        "subscription": "plan01s"
                },
                "*************": {
                        "imsi": "************",
                        "msisdn": "***********",
                        "status": "shipped",
                        "subscription": "planX1"
                },
                "*************": {
                        "imsi": "************",
                        "msisdn": "***********",
                        "status": "active",
                        "subscription": "planX2"
                }
        }
}
```

これで追加は完了です。念の為、コンソールからも確認してみましょう。

![2021-04-04_16h19_45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/59415/3e5d6adf-e4ef-5da7-5d97-7620b00791a9.png)


無事追加されてますね！

# 後始末

さて、先述のように、追加したサブスクリプションは削除できません。この状態だと国内ではplanX2が優先されるので通信費はplanX2のものになりますが、使っていないplanX1の使用料(1.8USD/月)がかかってしまいますのでもったいないですね。

というわけでもしこの手順通りにやって複数のサブスクリプションを追加した場合、そのSIMは解約してしまって新しいIoT SIMを買いましょう。

# まとめ

- IoT SIM + planX2は5Gが使えます
- planX2はplanX1に比べて通信費が半分になります
- cliからサブスクリプションを追加するときは「sim」コマンドを使いましょう
- 追加したサブスクリプションは削除できないから気をつけましょう
- サブスクリプション利用料が下がると価格メリットで国内でも使い道が増えそう

以上、皆様の参考になれば幸いです。