SEILと軽量Ruby

2月3日に秋葉原で開催された、福岡Rubyビジネス拠点推進会議が主催する「Ruby東京プレゼンテーション2012」にSEIL事業部も参加してきました!

記事一覧

本イベントでは、USB接続スマート電源コンセントを用いて消費電力量を「Twitterにつぶやくルータ」のデモンストレーションを行いました。

本稿では、このデモンストレーションの内容について紹介します。

(注: 本稿は、SEILに実験的に実装した機能に関するご紹介であり、軽量Rubyの正式サポート版ファームウェアの公開については時期、内容共に未定です。)

Ruby東京プレゼンテーション2012 参加報告

今年で3回目を迎えた「Ruby東京プレゼンテーション」には、IIJからも多くの社員が参加しました。イベント全体の参加レポートはGIOろぐでも公開されていますので、合わせてご覧下さい。また、IIJ Webページ「最新の技術動向」に関連記事が公開されていますので、こちらも合わせてご覧ください。

今回は、「軽量Ruby」が大きなテーマの1つでしたが、IIJは協力企業の1社として、SEILへの軽量Ruby組込みと評価を行った縁で登壇させて頂きました。「軽量Ruby」は、2010年から2年に渡って経済産業省の地域イノベーション創出研究開発事業の一貫として開発が進められています。

「つぶやくルータ」

今回のイベントでは、「USB接続スマート電源コンセント」と「軽量Ruby」を使って、使用している電力量を「Twitterにつぶやくルータ」のデモンストレーションを行いました。(下図)

イベント当日は、インターネット接続用のルータ(SEIL/B1 と モバイルデータ通信端末)と、「Twitterにつぶやくルータ(SEIL/X1)」を使ってデモンストレーションを行いました。

Twitterクライアントの作成

PC用のRubyを使ってTwitterクライアントを実装する場合、本家CRuby(C言語版Ruby)の持つ幅広いライブラリと、rubygemsに登録されている様々な拡張ライブラリを使うことができます。例えば、 "twitter" というgemを使う場合、以下のような非常に短いプログラムで、Twitterに投稿することができます。(*1)

require "twitter"
Twitter.configure do |config|
 config.consumer_key = YOUR_CONSUMER_KEY
 config.consumer_secret = YOUR_CONSUMER_SECRET
 config.oauth_token = YOUR_OAUTH_TOKEN
 config.oauth_token_secret = YOUR_OAUTH_TOKEN_SECRET
end
Twitter.update("I'm tweeting with @gem!")

しかし「軽量Ruby」には、組込み向けを想定した「ミニマル・ライブラリ」の部分しか実装されていません。本家CRubyのHTTP通信ライブラリのほか、rubygemsも利用できないため、様々なライブラリの実装を行いました。

軽量Ruby用拡張ライブラリの実装

軽量Rubyの「ミニマル・ライブラリ」には、ファイルの入出力を司るIOや、HTTP通信を行う際に必要となるSocketなどのライブラリが含まれていません。また、TwitterAPIを利用する際にはOAuthという仕組みで認証を行う必要があります。OAuth認証を行う時に必要な、DigestやPackなども実装を行いました。

以下の軽量Ruby用拡張ライブラリ(の一部)を実装しました。

  • IO
  • File
  • Socket
  • Pack
  • Digest
  • Time
  • Process

これらの拡張ライブラリを使って、Ruby言語でHTPクライアントやOAuth認証ライブラリを実装し、Twitterクライアントを作成しました。

  • HTTPクライアント
  • OAuth認証
  • スマート電源コンセントとの通信機能 (センサーデータの取得)

(2012年3月7日 追記) 尚、今回作成した拡張ライブラリについては、軽量Rubyのプロジェクトへコードを提供する予定です。軽量Rubyのソースコードは近いうちにオープンソース化される予定とのことなので、ソースコードが公開された際には今回のデモアプリを是非お試しください。(2012年9月20日 追記) twitterクライアントのサンプルアプリケーションをこちら (github:iij/mruby)で公開しました。

USB接続スマート電源コンセント

SEIL/Xシリーズ、SEIL/B1にはUSBポートがついており、モバイルデータ通信端末やUSBフラッシュストレージを接続することができます。現在提供中のファームウェアでは、限られた種類のデバイスしかサポートしていませんが、開発チームでは日々新たなUSBデバイスを使えるようにするための作業を進めております。今回は、その成果で利用可能になった「USB接続スマート電源コンセント」を用いてデモンストレーションを行いました。

今回のデモでは、USB接続スマート電源コンセントとして富士通コンポーネント社製の「FX5204PS」を利用しました(下図)。SEILから「FX5204PS」を利用する方法については、次回以降のブログ記事で別途ご紹介する予定です。

発表資料

Ruby東京プレゼンテーション2012で発表した資料について、以下に掲載いたします。ご意見、ご感想がございましたら、是非 twitterFaceboookページまでお願いいたします。

SEIL mRuby 東京プレゼンテーション 2012-02-03

SEILと軽量Ruby 今後の展開

今回は、USBデバイスと軽量Rubyを組合せて、「センサー情報をTwitterにつぶやく」機能をRubyスクリプトで実現しました。今後、SEILの機能をRubyスクリプトから操作できるようになれば、"センサー情報を基にコンフィグの変更を行う" といったことが可能になるかもしれません。

また、ルータのイベント(経路障害, interfaceのup/down, 等)を検知して、任意のRubyスクリプトを実行する機構が実装されれば、様々な運用上の要求にも応えられるようになります。

*1: http://twitter.rubyforge.org/ で公開されています