SORACOM API Sandboxへのログインが楽にできるRubyプログラムを作ってみた


数週間前から勉強し始めたRubyで何か作ってみよう！と思って（軽いノリで）作ってみました。ちょうどそのころSORACOM API Sandboxが発表されたので、これで何かやれるかな？ということで作ってみました。

(2016/02/29) rubyでSORACOM API Sandboxのsdkを作ってみました。gemとしてインストールはまだできませんが…
https://github.com/LyricalMaestro/soracom-sandbox-sdk-ruby

# SORACOM API Sandboxの概要
SIMの通信速度・解約・グルーピングなどの操作をAPI経由で（つまりプログラムベースで）コントロールできる「SORACOM API」の挙動を試すための仮装SIM管理環境です。

SORACOM API自体は2015/9/30に発表されたのですが、その時は本物のSIMを管理するための「本番環境」のみ用意されていました。ところがAPIの中には解約など操作の仕方を間違えると大きな損害が出るようなものが含まれており、これらのAPIを簡単に試すことはできませんでした。また、通信量にしてもテストデータして成立するためのものを用意するには涙ぐましい努力をしなければならない、というのも問題です。
このSORACOM API Sandboxが登場したことによってテスト環境としてふさわしいプラットフォームを用意することができます。なので、SORACOM APIを使った開発で心置きなくCIとか回すことができます。

SORACM API Sandbox利用ガイド
https://dev.soracom.io/jp/docs/api_sandbox/

# ログインまでの道のり
早速、ログインから試してみました。
…しかし、この手続きめんどくさかった。。

## [事前準備]本番環境でSandbox用のSAMユーザを登録する。
はい、Sandbox環境は本番環境のアカウントがないと取り扱うことができません。しかも、オペレーターとしてのアカウントでなくSAMユーザアカウントを使わないといけません。なので、それ用のSAMユーザアカウントを用意する必要があります。

アカウント登録（というよりSORACOMをいじり始める）にはこちらを参照ください。
https://dev.soracom.io/jp/start/begin_soracom/

SAMユーザ登録方法
https://dev.soracom.io/jp/start/sam/

**SAMユーザ登録と同時にSAMユーザの「認証キーID」と「認証キーシークレット」を取得しておくのを忘れないでください！**

## 実際のログイン（毎回やる手続き）

SORACOMの公式ページからを引用しています。

### 1. Sandbox 環境にサインアップする

EMailアドレスとパスワード（ダミーでOKです）を使ってサインアップ処理を行います。以下のAPIを実行します。

```
curl -X POST \
     -H 'Content-Type: application/json' \
     -d '{ "email": "email@example.com", "password": "superStrongP@ssw0rd" }' \
     https://api-sandbox.soracom.io/v1/operators

# Response:
# 201 Created
```

**注意点は、このログイン処理をおこなうときのEMailアドレスは毎回変えてください。連続して同じEMailアドレスを使ってのログインはできません。**

### 2. サインアップトークンを取得
1.で使ったEMailアドレスとSAMユーザの「認証キーID」と「認証キーシークレット」を使って以下のAPIを実行します。

```
curl -X POST \
     -H 'Content-Type: application/json' \
     -d '{ "authKeyId": "<本番環境の SAM ユーザーの 認証キーID>", "authKey": "<本番環境の SAM ユーザーの認証キーシークレット>" \
     https://api-sandbox.soracom.io/v1/sandbox/operators/token/email@example.com

# Response:
# 200 OK
# {
#   "token": "<ランダムな文字列>"
# }
```

### 3. サインアップトークンを用いてサインアップを完了
2.で取得したtokenを用いて以下のAPIを実行します。

```
curl -X POST \
     -H 'Content-Type: application/json' \
     -d '{ "token": "<先ほど取得したトークン>" }' \
     https://api-sandbox.soracom.io/v1/operators/verify

# Response:
# 200 OK
```

### 4. サインアップしたオペレーターで認証
auth APIを実行します。

```
curl -X POST \
     -H 'Content-Type: application/json' \
     -d '{ "email": "email@example.com", "password": "superStrongP@ssw0rd" }' \
     https://api-sandbox.soracom.io/v1/auth

# Response:
# 200 OK
# {
#   "operatorId": "OPXXXXXXXXXX",
#   "apiKey": "<ランダムな文字列>",
#   "token": "<ランダムな文字列>"
# }
```

# 手順めんどくさいのでコマンドライン一発でログインできるRubyスクリプト作ってみた
上の手続きをみていただくとわかるようにしこたまめんどくさいです。「APIをいじりたおそう！」と思って毎回毎回同じ処理をやるのはモチベーションを下げかねないので…この処理をコマンドライン一発で解決できるようなRubyスクリプトを試しに作ってみました。

https://gist.github.com/LyricalMaestro/cc12a83d0878570d4dbd

実際使ってみたいと思う方は…このファイルをダウンロードして

1. AUTH_KEY_IDにSAMユーザの認証キーID, AUTH_KEYに認証キーシークレットを設定してください。
2. そしてそのスクリプトを実行してください。

そうするとうまくログインができて、コンソール上にapiKeyとtokenが表示されます。このapiKeyとtokenを使ってSandbox環境でAPIをガンガン実行できます!


# 今後
おおっぴらに紹介したプログラムですが、まだライブラリとして提供するには恥ずかしい状態なので今後まともに使えるように改良していきます。

2016/02/29時点、ちっぽけながらRuby版SDKつくりました。
https://github.com/LyricalMaestro/soracom-sandbox-sdk-ruby