• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
デブサミ2013【15-E-2】Ruby開発者のみなさん、mrubyで楽しく快適な組み込みアプリ開発を始めませんか?
 

デブサミ2013【15-E-2】Ruby開発者のみなさん、mrubyで楽しく快適な組み込みアプリ開発を始めませんか?

on

  • 1,129 views

Rubyエンジニアのみなさんは、日々楽しくRubyプログラムの開発をされているこ ...

Rubyエンジニアのみなさんは、日々楽しくRubyプログラムの開発をされているこ とと思います。しかしながら、組み込み機器開発の世界では今でもC言語やアセ ンブラ言語などを用いた昔ながらの開発が主流であり、Rubyエンジニアで広く使 われているテスト駆動開発など最新の開発手法が普及しているとは言いにくい状 況です。このような中、2012年4月に軽量Ruby(mruby)がgithub上で公開されまし た。IIJでは、Rubyユーザでも楽しく快適に組み込みアプリを開発できる環境を 提供するために、独自開発のルータ「SEIL」上で動作するmrubyの実行環境を作 りました。本セッションでは、日々のちょっとした不便を改善するためにmruby を活用する方法についてご紹介します。また、mrubyはアプリに組み込むことで も便利に使うことができます。
Ruby好きのエンジニアのみなさん、是非ご参加く ださい。

Statistics

Views

Total Views
1,129
Views on SlideShare
1,057
Embed Views
72

Actions

Likes
1
Downloads
3
Comments
0

1 Embed 72

https://twitter.com 72

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    デブサミ2013【15-E-2】Ruby開発者のみなさん、mrubyで楽しく快適な組み込みアプリ開発を始めませんか? デブサミ2013【15-E-2】Ruby開発者のみなさん、mrubyで楽しく快適な組み込みアプリ開発を始めませんか? Presentation Transcript

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