Summit
Developers
Developers Summit 2013 Action !
Ruby開発者のみなさん、 mrubyで
楽しく快適な組み込みアプリ開発を 始めませんか?
曽我部 崇 株式会社インターネットイニシアティブプロダクト本部 アプリケーション開発部
15-E-2
#devsumiX
Summit
Developers
Developers Summit 2013 Action !
自己紹介
• 曽我部 崇(@rev4t) – IIJで企業向けルータの開発などに従事
最近の活動場所
• mruby (http://github.com/iij/mruby)
• openstack – コントリビュータ始めました(IPv6まわりの修正をした程度..)
2
Summit
Developers
Developers Summit 2013 Action !
SEIL(ザイル)作っています
• ISPのノウハウを結集してIIJが開発した企業向けアクセスルータ
• Firmwareは独自開発、Hardwareは国内製造
• 仮想化環境(VMWare, KVM, Hyper-V)対応
3
Summit
Developers
Developers Summit 2013 Action !
SEILのアーキテクチャ
• NetBSDをベースに、ルーティングエンジンやコンフィグ管理システム(CLI, WebUI)を組み込んでいる
NetBSD Kernel libc
コンフィグ管理システム
Quagga (Routing Engine)
Other daemons
4
Summit
Developers
Developers Summit 2013 Action !
質問
•組込ソフトの開発をしている人はどれくらいいらっしゃいますか?
Summit
Developers
Developers Summit 2013 Action !
mrubyとの出会い
• 2011年春頃 – 社内プロジェクトで、SEILに cruby を組み込んだ
• 2011年8月頃 – 社内の先輩 前橋さん(@tmeb4)にmrubyの存在を教えてもらう
– SEILでも動くか試すべく、関係者にコンタクトを取る
• 2011年12月頃 – ソースコードを入手し、SEIL上でもmrubyが問題なく動作した
6
Summit
Developers
Developers Summit 2013 Action !
組込ソフト開発者の苦悩 I I J が 提 供 中 の オ ー プ ン ソ ー ス ソ フ ト A R M S D よ り コ ー ド を 一 部 抜 粋 …
h t t p s : / / g i t h u b . c o m / s e i l - s m f / a r m s d
static int load_from_file(char *fname, char **bufp) { FILE *fp = NULL; char *buff = NULL; size_t len; int nread = -1; fp = fopen(fname, "r"); if (fp == NULL) { fprintf(stderr, "failed to open¥n"); nread = -1; goto failure; } fseek(fp, 0, SEEK_END); len = ftell(fp); fseek(fp, 0, SEEK_SET); buff = malloc(len + 1); if (buff == NULL) { fprintf(stderr, "malloc failed"); nread = -1; goto failure; }
nread = fread(buff, 1, len, fp); if (nread < len && !feof(fp)) { fprintf(stderr, "fread() failed¥n"); nread = -1; goto failure; } *(buff + len) = '¥0'; failure: if (buffp) *buffp = buff; if (fp) fclose(fp); return nread; }
7
Summit
Developers
Developers Summit 2013 Action !
C言語でコード書くのは結構大変
• エラー処理のコードが煩雑
• 特に文字列処理が大変
–文字列領域の踏み抜き..
–確保したメモリの解放忘れでメモリリーク..
– FDの解放し忘れでFDリーク..
– etc...
油 断 す る と 、 す ぐ に バ グ が 入 り ま す ; - (
8
Summit
Developers
Developers Summit 2013 Action !
軽量Ruby(mruby)とは
• 家電製品などの開発生産性を向上させることを目指して設計されたRuby言語
• 2011-2012年にかけて、経済産業省の「地域イノベーション創出研究開発事業」として、開発が進められた
• 2012年4月に、MITライセンスとしてgithub上に公開
• 特長 – Ruby処理系に必要な資源(メモリ)の削減
– 実行速度の向上
– リアルタイム性の向上
– 直接見えないように変換されたソースコード
9
Summit
Developers
Developers Summit 2013 Action !
mrubyを使えば開発効率が上がる?
コンフィグ管理システムはrubyで書くと開発効率が高まりそう
NetBSD Kernel libc
コンフィグ管理システム
Quagga (Routing Engine)
Other daemons
文字列処理が多い
システムプログラミング
C言語必須
10
Summit
Developers
Developers Summit 2013 Action !
Small is Beautiful
• mruby(ミニマム)はruby言語の最少セットのみを提供
–利用者は、必要なものだけを選んで組み込む
–不要なものは入れなくて済むため、コンパクトになる
mruby Virtual Machine
mrbgem A (IO)
mrbgem B (Regexp)
mrbgem C (Socket)
Apps • mrbgem A • mrbgem B • mrbgem C • …
11
Summit
Developers
Developers Summit 2013 Action !
mrubyが動作する最小構成は?
• RX62N(ルネサス 32bitマイコン)
– EAPL-Trainer mruby
– 96MHz CPU, 1MB Flash Rom, 128kB RAM
• 32bit ARM7
– Lego Mindstorms NXT
– 256kB Flash Rom, 64kB RAM
–但し、hash実装などをダイエットしないと64kBのRAMでは動かないらしい
12
Summit
Developers
Developers Summit 2013 Action !
SEIL/X1 ハードウェア構成
• CPU: Cavium Octeon (SoC)
– MIPS64アーキテクチャ
• Memory: 256MB
• Flash: 16MB
• USB: 1ポート
• Ethernet: GbE 3-port
13
Summit
Developers
Developers Summit 2013 Action !
1. バックボーン遅延測定「QUILL」
IIJの取り組み事例
14
Summit
Developers
Developers Summit 2013 Action !
事例1: Quillシステム
• IIJバックボーンの遅延等を測定
• 国内外の中継施設にプローブを配備
–プローブの開発にはrubyを使用
15
Summit
Developers
Developers Summit 2013 Action !
Quillプロジェクトの課題
• プローブはすぐにオペレータが対応できない場所にも置いてある
–従来は汎用PCサーバを使用
–できる限り壊れてほしくない
–交換するときは誰でも簡単にできるようにしたい
SEIL/X1 を使うことにした
16
Summit
Developers
Developers Summit 2013 Action !
crubyは大きすぎた..
• リリース版のfirmwareに入りきらない
–社内専用版を作って、使わない機能はザックリと削除
–今の所支障はないが、今後firmwareをメンテナンスし続けるのは大変
mruby版firmwareへ移行を検討中
17
Summit
Developers
Developers Summit 2013 Action !
2. 柔軟なルータ「SEIL(ザイル)」
IIJの取り組み事例
18
Summit
Developers
Developers Summit 2013 Action !
もっと柔軟なルータが欲しい
• イベントスクリプト機能 開発中
– SEILの機能をmrubyスクリプトから操作
–経路障害、インタフェースのUp/Downなどのイベントをトリガになる
軽量Ruby スクリプト
•インタフェースDown •CPU負荷上昇 •通信量の増加 •経路の変化 •etc.
•最低限の切り分け作業を自動化 • ping, show status route, ...
•外部サービスとの連係 • IaaSやPaaSの性能を増減
• 監視システムへアラートを送信
•経路切替
Event
Action
19
Summit
Developers
Developers Summit 2013 Action !
色々作ってみました(1)
• つぶやくルータ
–電力消費量をtweet
– http://twitter.com/wattmeter2012
– https://github.com/iij/mruby/tree/iij/app/twitter
USB
The Internet
ついったー電力計 @wattmeter2012 2012/02/01 18:27:47 現在の使用電力は 12 W です!
20
Summit
Developers
Developers Summit 2013 Action !
色々作ってみました(2)
• Amazon S3
–監視異常をトリガにして、コンテンツをアップロード
• https://github.com/iij/mruby-aws-s3
The Internet
Amazon S3
監視異常
21
Summit
Developers
Developers Summit 2013 Action !
3. ネットワーク管理サービス「SACM」
IIJの取り組み事例
22
Summit
Developers
Developers Summit 2013 Action !
SACMとは
• SACM [Service Adapter Control Manager]
–機器の自動接続、一元管理ができるサービス
– http://www.sacm.jp/
SA=Service Adapter
23
Summit
Developers
Developers Summit 2013 Action !
SACM 新サービスの特長
• 「富山の置き薬」タイプのネットワーク接続サービス
–機能自体に課金
• ネットワーク機器「SA-W1」は無償で提供
• IPsec-VPNレシピ、又は無線LANレシピ
–必要なネットワークを迅速に構築できる
24
概要
SA-W1
Summit
Developers
Developers Summit 2013 Action !
SA-W1にmrubyを搭載しました
• コンフィグ管理システム「レシピフレームワーク」はmrubyを用いて開発されています
設定 パラメータ
レシピ フレームワーク
内部プログラム向けの 設定ファイルに変換
中間形式の 設定ファイル
26
Summit
Developers
Developers Summit 2013 Action !
mrubyを使って分かったこと(1)
• 開発効率が上がった
–文字列処理やロジックが簡潔に記述できるようになった
–いちいちfirmwareをビルドしなくてもプログラムを差し替えできるのは便利
27
Summit
Developers
Developers Summit 2013 Action !
mrubyを使って分かったこと(2)
• たくさん地雷を踏みました..
– mrubyのバグ潰しに結構時間を費やしました ;-)
– これからmrubyを使う人は割と安心して使える
• 沢山の人がmrubyを使えば、さらにバグが減って安定します!
28
Summit
Developers
Developers Summit 2013 Action !
まとめ
29
Summit
Developers
Developers Summit 2013 Action !
組込機器の開発プロセスが進化する
• 今までの組み込み機器開発 – ドライバ、アプリ(ロジック)全てC言語又はアセンブリ言語で開発
• これからの方向性 – 速度やリソースの制約がある箇所だけC言語やアセンブリ言語で記述
– その他のロジック部分は、出来る限り開発効率の良い言語で開発
– テスト駆動開発
30
Summit
Developers
Developers Summit 2013 Action !
アプリにmrubyを組み込む
• アプリへの組み込みにも向いている • 例
– apache に組み込む => mod_mruby – iOSアプリに組み込む => MobiRuby – 言語内DSL
• mruby(ミニマム) + 必要なmrbgemだけを組み込むことで、コンパクトかつ堅牢になる
• 利点 – アプリ動作ホストのruby環境に依存しない
• rubyバージョン、gem依存を気にしなくて良い
31
Summit
Developers
Developers Summit 2013 Action !
mrbgem
• mruby版のGEM
• 2012年12月、本家にコミットされた
• mrubyのビルド時にGEMを組み込むことができる
– rubyスクリプト、C言語のコードどちらも組み込み可能
mrbgemに対応した以後、mrubyのエコシステムが急速に進化中 https://github.com/mruby/mruby/wiki/Related-Projects
32
Summit
Developers
Developers Summit 2013 Action !
ruby+mruby = Internet of Things
• ruby + mrubyで、様々なモノやクラウドをインターネットを介して結び付けることができる
照明、家電、冷暖房、 蓄電池、各種センサ,etc.
33
Summit
Developers
Developers Summit 2013 Action !
It’s your turn.
Summit
Developers
Developers Summit 2013 Action !
皆さんもmruby始めてみませんか?
• 組込機器の開発をしている皆さん
– mrubyが載りそうであれば、開発効率が高められるかどうか試してみませんか?
• サーバ用のソフトを開発している皆さん
–アプリ内のミニ言語などに使ってみませんか?
35
Summit
Developers
Developers Summit 2013 Action !
PR: SEIL mrubyアプリを作りませんか?
• SEIL/x86 – https://www.seil.jp/community/seilx86 – 仮想ルータソフトウェア – コンフィグ保存が不要であれば、無料で使える
• 今春リリース予定のfirmwareでmrubyスクリプトに対応予定
• 今後、アプリコンテストなどを企画する予定です。是非ご参加ください!
36
Summit
Developers
Developers Summit 2013 Action !
mrubyのビルド方法(1)
• PC環境(Linux, Mac) でビルドに必要なもの
– GCC
– bison
– git
– Rake (Ruby版make) または ruby1.8以降
37
Summit
Developers
Developers Summit 2013 Action !
mrubyのビルド方法(2)
$ git clone https://github.com/mruby/mruby $ cd mruby $ ./minirake (または、 rake) • bin/mruby
– mrubyインタプリタ
• bin/mrbc – mrubyコンパイラ
• in/mirb – mruby版 irb
38
Summit
Developers
Developers Summit 2013 Action !
mrubyのビルド方法(3)
class Hello def world puts "Hello World!" end end a = Hello.new a.world
$ bin/mruby hello.rb
Hello World!
hello.rb
$ bin/mrbc hello.rb $ bin/mruby –b hello.mrb
Hello World!
ソースコードを直接実行
バイナリファイルを実行
39
Summit
Developers
Developers Summit 2013 Action !
mrubyのビルド方法(4)
$ bin/mruby –v hello.rb mruby - Embeddable Ruby Copyright (c) 2010-2013 mruby developers NODE_SCOPE: local variables: a NODE_BEGIN: NODE_CLASS: :Hello body: NODE_BEGIN: NODE_DEF: world NODE_BEGIN: NODE_CALL: NODE_SELF method='puts' (286) args: NODE_STR "Hello World!" len 12 NODE_ASGN: lhs: NODE_LVAR a rhs: NODE_CALL: NODE_CONST Hello method='new' (7) NODE_CALL: NODE_LVAR a method='world' (330)
irep 148 nregs=4 nlocals=2 pools=0 syms=3 000 OP_LOADNIL R2 001 OP_LOADNIL R3 002 OP_CLASS R2 :Hello 003 OP_EXEC R2 I(149) 004 OP_GETCONST R2 :Hello 005 OP_SEND R2 :new 0 006 OP_MOVE R1 R2 007 OP_MOVE R2 R1 008 OP_SEND R2 :world 0 009 OP_STOP irep 149 nregs=2 nlocals=1 pools=0 syms=1 000 OP_TCLASS R1 001 OP_LAMBDA R2 I(+1) 1 002 OP_METHOD R1 :world 003 OP_LOADNIL R0 004 OP_RETURN R0 irep 150 nregs=4 nlocals=2 pools=1 syms=1 000 OP_ENTER 0:0:0:0:0:0:0 001 OP_LOADSELF R2 002 OP_STRING R3 "Hello World!" 003 OP_SEND R2 :puts 1 004 OP_RETURN R2 Hello World!
40
Summit
Developers
Developers Summit 2013 Action !
軽量Rubyフォーラムのご紹介
• 2013年2月に発足予定のNPO法人
–http://forum.mruby.org – IIJも加入予定
• このような人・企業は、是非ご参加ください! – 自社製品の開発言語として軽量Rubyを採用してみたい – 軽量Rubyの今後の開発方針をいち早く知りたい、意見したい – 顧客に軽量Rubyを提案することで差別化を図りたい – 軽量Ruby(あるいはその周辺ツール)の開発に関与したい – 自社で軽量Ruby製品をNPOを通じて宣伝したい – 軽量Ruby教育関連事業を企画したい – とにかく軽量Rubyを応援したい
41
Summit
Developers
Developers Summit 2013 Action !
IIJが作るPaaS = MOGOK
• http://mogok.jp/
Summit
Developers
Developers Summit 2013 Action !
IIJエンジニアセミナー開催!!
詳細はコチラ↓
【セミナー情報】
http://www.iij.ad.jp/company/recruit/career/recruit/0309seminar.html 【問い合わせ先】 [email protected]
IIJのエンジニアとお話しませんか? IIJのソフトウェア開発現場に興味を持ったアナタ!
「3/9(土)@IIJ本社」にて、エンジニアがIIJの開発業務を紹介するセミナーを行います! お気軽にご参加ください。
43