SORACOM SDK for Rubyを試してみた

2015.11.09

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

SORACOMにはRubyにてAPIを操作するためのSORACOM SDK for Rubyが用意されています。Rubyを使ってSORACOMを弄くれる、ということで、ちょっと試してみました。

作成した処理の概要

SORACOMのSIM(SORACOMの用語では「サブスクライバー」)をグループに所属させるサンプルを作成してみました。予めSORACOMのAir SIMを契約し、ユーザコンソールから登録していることが前提条件となります。またグループもユーザコンソールから予め作成しておく必要があります。

作成したソースと手順

以下、作成したソースと手順になります。

1.SDKなどのgemのインストール

Rubyのアプリとして作成したので、SORACOM SDK for Rubyも含めて使用するgemはローカルにインストールすることにしました。まずはGemfileに以下のように記述します。

Gemfile
# A sample Gemfile
source "https://rubygems.org"

gem 'soracom'
gem 'settingslogic'

# gem "rails"

SORACOM SDK for Rubyは「gem 'soracom'」で指定します。その下の「gem 'settingslogic'」は後述する定義ファイルを読み取るためのものです。以下のコマンドでインストールします。

$ bundle install --path vendor/bundle

2.SIM(サブスクライバー)をグループに所属させる

以下が今回のメインの処理となります。

main.rb
require 'soracom'
require './secret_settings'

client = Soracom::Client.new(email: SecretSettings.soracom.email, password: SecretSettings.soracom.password)

# SIM(サブスクライバー)を取得
sims = client.list_subscribers

sims.each do |sim|
  puts sim['imsi']
  client.set_group(sim['imsi'], '622a0ac0-bfbd-482d-9a99-8efab931daf1')
end

puts 'set group end.'

やっていることは

  1. SORACOMのクライアントを取得する(4行目)
  2. クライアントに所属しているSIM(サブスクライバー)を取得する(7行目)
  3. SIMを特定するためのIMSIを取得し(10,11行目)
  4. クライアントのメソッドを呼び出し、対象のSIMのIMSI、グループIDを渡す(11行目)

となっています。

クライアントを取得するとき(4行目)に定義ファイルに記述したメールアドレス・パスワードを渡していますが、これらは環境変数に設定しておいて、プログラムでは渡さない方法もあるようです。詳細は公式ページを参考にしてください。

3.定義ファイルの読み込み

今回の主題とは外れますが、定義ファイルに記述したメールアドレス・パスワードを読み込むところも載せておきます。

secret_settings.rb
require 'settingslogic'

class SecretSettings < Settingslogic
  source File.join("../etc", "secret.yml")
  namespace 'defaults'
end

「../etc/secret.yml」を定義ファイルとし、そこに記述した値を読み込むためのクラスです。詳細についてはsettingslogicを参考にしてください。

実行結果

先に書いたようにユーザコントロールにてグループを予め作成しておきます。

soracom-sdk-for-ruby-trial-group

上記の「main.rb」を実行してみます。

$ ruby main.rb
440XXXXXXXXXXXX
set group end.

ユーザコントロールより対象のSIMを見ると、グループが設定されていることが確認できます。 soracom-sdk-for-ruby-trial-sim

まとめ

非常に簡単な処理ですが、実装できました。今回作成したソースやSORACOM SDK for Rubyにて紹介されているソースを見ると

  1. クライアントを取得する
  2. クライアントよりSIM(サブスクライバー)を取得する
  3. クライアントにSIMのIMSIを渡し、メソッドを呼び出すことで操作を行う

というのが基本的な流れの一つのように感じます。
このようなところはAWS SDKと似ているように感じました。以上です。