2月3日に秋葉原で開催された、福岡Rubyビジネス拠点推進会議が主催する「Ruby東京プレゼンテーション2012」にSEIL事業部も参加してきました!
本イベントでは、USB接続スマート電源コンセントを用いて消費電力量を「Twitterにつぶやくルータ」のデモンストレーションを行いました。
本稿では、このデモンストレーションの内容について紹介します。
(注: 本稿は、SEILに実験的に実装した機能に関するご紹介であり、軽量Rubyの正式サポート版ファームウェアの公開については時期、内容共に未定です。)
今年で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用拡張ライブラリ(の一部)を実装しました。
これらの拡張ライブラリを使って、Ruby言語でHTPクライアントやOAuth認証ライブラリを実装し、Twitterクライアントを作成しました。
(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」を利用する方法については、次回以降のブログ記事で別途ご紹介する予定です。
SEILと軽量Ruby 今後の展開
今回は、USBデバイスと軽量Rubyを組合せて、「センサー情報をTwitterにつぶやく」機能をRubyスクリプトで実現しました。今後、SEILの機能をRubyスクリプトから操作できるようになれば、"センサー情報を基にコンフィグの変更を行う" といったことが可能になるかもしれません。
また、ルータのイベント(経路障害, interfaceのup/down, 等)を検知して、任意のRubyスクリプトを実行する機構が実装されれば、様々な運用上の要求にも応えられるようになります。
*1: http://twitter.rubyforge.org/ で公開されています