masato-ka's diary

日々思ったこととか、やったことの備忘録。

SORACOM Airを管理できるVSCode Extentionを作ってみた。

この記事について

この記事では自作のVSCode Extentionを紹介します。今回はSORACOM AIrVSCode上から管理できるExtentionです。

作った理由

最近ではWioLTEを使い、SORACOM Beamを利用してMicrosoft Azure IoT Hubや他のクラウドサービスに接続する機会が行くかありました。WioLTEの開発では、 以前紹介したVSCode + PlatformIOを利用した環境で開発をしています。

masato-ka.hatenablog.com

また、Azure IoT HubもVSCodeのExtentionから管理することができます。そのため、Azure IoT Hubの設定とWioLTEの開発はVSCode側で完結させることができます。 WioLTEの開発を進める上で、SORACOMのサービスを利用しようとすると、どうしてもSIMへの設定が必要であったり、SORACOM Beamへの設定が必要になります。また、動作テスト時には正常にSIMが接続されているかを確認する場面が多くありました。その度に、ブラウザからSORACOMの管理画面に移動するのが煩わしく感じました。そこで、SORACOMのAPIを使い、SORACOM サービスの設定もVSCodeからできるExtentionがあると便利だなと思い開発に至りました。

開発中のプラグインについて

2018年4月1日の段階で、バージョン0.3.0として公開しています。VSCodeマーケットプレイスには公開していないため、使ってみたい方がいたら、個別にインストールしてください。いずれ、マーケットプレイスに公開したいと思っています。ライセンスはMITです。

github.com

また、SORACOM APIJavaScriptライブラリとして以下のライブラリを使わせていただきました。

github.com

主な機能

主な機能を紹介していきます。

1. SIM一覧の確認

Extentionをインストールすると、VSCodeのサイドバーに"SORACOM MANAGER"が表示されるようになります。VSCodeの設定ファイルにAPI Key IDとシークレットキーを設定することで認証を自動で行い、SIM一覧を取得できます。現状SIMの数が多くなるとすべて取得することができないため、修正する予定です。また今後はグループごとにサブツリー化して表示するなど考えています。

ちなみに、立ち上げっぱなしで、API tokenの有効期限が切れると使えなくなるので、VSCodeを再起動してください。次のバージョンでで直す予定です。ひどいバグだ。

2. SIMの操作

SIMのリストを右クリックで選択することで、各SIMに対して操作をすることができます。現在操作できるコマンドは以下の通りです。また、これらのコマンドはもちろんコマンドパレットから実行することができます。

f:id:masato-ka:20180401232340p:plain

コマンド名 意味
Get sim details SIMの詳細情報を取得する。
Update sim speed SIMの通信速度を変更する。
Update sim name SIMの名前を変更する。
Add new tag to sim SIMにタグを追加する。
Delete tag タグの削除
Show stats Air of SIM Airの通信量を取得する。
Show stats Beam of SIM Beamの通信量を取得する。

SIMのTagはメタデータサービスにより、SIM固有のデータとしてデバイス側から参照できます。WioLTEでメタデータサービスを使う場合、"Add new tag to sim"など開発時やデバック時に便利です。

Update sim speedを実行すると以下のようにSIM スピードを選択できるようになります。

f:id:masato-ka:20180401231237p:plain

3. 利用料金の確認

SIMの操作以外では利用料の確認ができます。これはそのうち常駐させたい。。。

f:id:masato-ka:20180401232404p:plain

こんな感じでダイアログが表示されます。SIM2枚持ちですが、ほとんど使ってないのがバレてしまいます。

f:id:masato-ka:20180401232014p:plain

まとめ

 VSCode Extentionの作り方についてはなんとなくわかったという程度でした。が、なれるとサクサク作れそうです。どちらかというと今回はJavaScriptの非同期処理周りではまった時間が多かった気がします。コールバック地獄にならないように、Promiseでラップしまくりましたが、なんかバットノウハウな気もしています。(理由はありませんが。)この辺りのTipsは後ほど記事にしていこうと思っています。  今後もExtentionを拡張していこうと考えています。もし使ってみたと言う方がいたら改善要望やバグをあげていただけると嬉しいです。次はグループの管理機能を追加していきたいと思います。また、依存しているライブラリの関係で、テストの実行には本番のAPIを利用しています。sandboxのAPIを活用してテストができるようにしていきたいです。JavaScriptのDIとかちょっと使ってみたいです。