Developers
Summit




   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
Developers
Summit
             SEIL(ザイル)作っています

• ISPのノウハウを結集してIIJが開発した企業向
  けアクセスルータ
• Firmwareは独自開発、Hardwareは国内製造
• 仮想化環境(VMWare, KVM, Hyper-V)対応




                 Developers Summit 2013 Action !   3
Developers
Summit
             SEILのアーキテクチャ

• NetBSDをベースに、ルーティングエンジンや
  コンフィグ管理システム(CLI, WebUI)を組み込
  んでいる

                   コンフィグ管理システム
                 Quagga
                                                Other daemons
             (Routing Engine)
                                   libc
                   NetBSD Kernel
                     Developers Summit 2013 Action !            4
Developers
Summit
                     質問


• 組込ソフトの開発をして
  いる人はどれくらいい
  らっしゃいますか?

             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
                       組込ソフト開発者の苦悩
IIJ が提供中のオープンソース ソフト ARMSD                                       よりコード を一部抜粋 …
https://githu b.c om /s eil - sm f/a rms d



  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
Developers
Summit
             軽量Ruby(mruby)とは

• 家電製品などの開発生産性を向上させることを目指し
  て設計されたRuby言語
• 2011-2012年にかけて、経済産業省の「地域イノベー
  ション創出研究開発事業」として、開発が進められた
• 2012年4月に、MITライセンスとしてgithub上に公開
• 特長
  –   Ruby処理系に必要な資源(メモリ)の削減
  –   実行速度の向上
  –   リアルタイム性の向上
  –   直接見えないように変換されたソースコード

                Developers Summit 2013 Action !   9
Developers
Summit
mrubyを使えば開発効率が上がる?


        コンフィグ管理システム                                          文字列処理が多い
     Quagga
                             Other daemons
 (Routing Engine)                                            システムプログラミング
                    libc
        NetBSD Kernel                                        C言語必須



コンフィグ管理システムはrubyで書くと
開発効率が高まりそう
                           Developers Summit 2013 Action !              10
Developers
Summit
                  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
Developers
Summit




IIJの取り組み事例
1. バックボーン遅延測定
「QUILL」
             Developers Summit 2013 Action !   14
Developers
Summit
             事例1: Quillシステム

• IIJバックボーンの遅延等を測定
• 国内外の中継施設にプローブを配備
  – プローブの開発にはrubyを使用




                Developers Summit 2013 Action !   15
Developers
Summit
             Quillプロジェクトの課題

• プローブはすぐにオペレータが対応できない
  場所にも置いてある
  – 従来は汎用PCサーバを使用
  – できる限り壊れてほしくない
  – 交換するときは誰でも簡単にできるようにしたい


             SEIL/X1 を使うことにした
                 Developers Summit 2013 Action !   16
Developers
Summit
             crubyは大きすぎた..

• リリース版のfirmwareに入りきらない
  – 社内専用版を作って、使わない機能はザックリと
    削除
  – 今の所支障はないが、今後firmwareをメンテナン
    スし続けるのは大変


mruby版firmwareへ移行を検討中

                Developers Summit 2013 Action !   17
Developers
Summit




IIJの取り組み事例
2. 柔軟なルータ「SEIL(ザイル)」

             Developers Summit 2013 Action !   18
Developers
Summit
         もっと柔軟なルータが欲しい

• イベントスクリプト機能 開発中
  – SEILの機能をmrubyスクリプトから操作
  – 経路障害、インタフェースのUp/Downなどのイベ
    ントをトリガになる
                                           Action
                 軽量Ruby
                 スクリプト                     •最低限の切り分け作業を自動化
Event                                         • ping, show status route, ...
•インタフェースDown                               •外部サービスとの連係
•CPU負荷上昇                                      • IaaSやPaaSの性能を増減
•通信量の増加                                       • 監視システムへアラートを
•経路の変化                                        送信
•etc.                                      •経路切替

               Developers Summit 2013 Action !                                 19
Developers
Summit
             色々作ってみました(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
Developers
Summit




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
Developers
Summit
             SACM 新サービスの特長

• 「富山の置き薬」タイプのネットワーク接続
  サービス
  – 機能自体に課金
       • ネットワーク機器「SA-W1」は無償で提供
       • IPsec-VPNレシピ、又は無線LANレシピ
  – 必要なネットワークを迅速に構築できる




                Developers Summit 2013 Action !   24
概要




SA-W1
Developers
Summit
      SA-W1にmrubyを搭載しました

• コンフィグ管理システム「レシピフレームワー
  ク」はmrubyを用いて開発されています

                    中間形式の                      内部プログラム向けの
                    設定ファイル                     設定ファイルに変換
    設定
   パラメータ

                                   レシピ
                                 フレームワーク




             Developers Summit 2013 Action !                26
Developers
Summit
      mrubyを使って分かったこと(1)

• 開発効率が上がった
  – 文字列処理やロジックが簡潔に記述できるように
    なった
  – いちいちfirmwareをビルドしなくてもプログラムを
    差し替えできるのは便利




             Developers Summit 2013 Action !   27
Developers
Summit
      mrubyを使って分かったこと(2)

• たくさん地雷を踏みました..
  – mrubyのバグ潰しに結構時間を費やしました ;-)
  – これからmrubyを使う人は割と安心して使える


• 沢山の人がmrubyを使えば、さらにバグが
  減って安定します!


             Developers Summit 2013 Action !   28
Developers
Summit




まとめ


             Developers Summit 2013 Action !   29
Developers
Summit
組込機器の開発プロセスが進化する

• 今までの組み込み機器開発
  – ドライバ、アプリ(ロジック)全てC言語又はアセンブリ
    言語で開発

• これからの方向性
  – 速度やリソースの制約がある箇所だけC言語やアセ
    ンブリ言語で記述
  – その他のロジック部分は、出来る限り開発効率の良
    い言語で開発
  – テスト駆動開発

             Developers Summit 2013 Action !   30
Developers
Summit
             アプリにmrubyを組み込む

• アプリへの組み込みにも向いている
• 例
  – apache に組み込む => mod_mruby
  – iOSアプリに組み込む => MobiRuby
  – 言語内DSL
       • mruby(ミニマム) + 必要なmrbgemだけを組み込むことで、コ
         ンパクトかつ堅牢になる
• 利点
  – アプリ動作ホストのruby環境に依存しない
       • rubyバージョン、gem依存を気にしなくて良い


                 Developers Summit 2013 Action !   31
Developers
Summit
                     mrbgem

• mruby版のGEM
• 2012年12月、本家にコミットされた
• mrubyのビルド時にGEMを組み込むことができる
  – rubyスクリプト、C言語のコードどちらも組み込み可能


mrbgemに対応した以後、mrubyのエコシステムが
急速に進化中
 https://github.com/mruby/mruby/wiki/Related-Projects

                  Developers Summit 2013 Action !   32
Developers
Summit
    ruby+mruby = Internet of Things

• ruby + mrubyで、様々なモノやクラウドをイン
  ターネットを介して結び付けることができる




   照明、家電、冷暖房、
   蓄電池、各種センサ,etc.




                    Developers Summit 2013 Action !   33
Developers
Summit




             It’s your turn.




              Developers Summit 2013 Action !
Developers
Summit
 皆さんも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
Developers
Summit
             mrubyのビルド方法(1)

• PC環境(Linux, Mac) でビルドに必要なもの
  – GCC
  – bison
  – git
  – Rake (Ruby版make) または ruby1.8以降




                Developers Summit 2013 Action !   37
Developers
 Summit
              mrubyのビルド方法(2)
$ 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
               mrubyのビルド方法(3)

hello.rb
class Hello                       ソースコードを直接実行
 def world                        $ bin/mruby hello.rb
  puts "Hello World!"             Hello World!
 end
end                               バイナリファイルを実行
                                  $ bin/mrbc hello.rb
a = Hello.new                     $ bin/mruby –b hello.mrb
a.world                           Hello World!

                   Developers Summit 2013 Action !       39
Developers
Summit
                     mrubyのビルド方法(4)
                                                           irep 148 nregs=4 nlocals=2 pools=0 syms=3
$ bin/mruby –v hello.rb                                    000 OP_LOADNIL                 R2
mruby - Embeddable Ruby Copyright (c) 2010-2013 mruby
                                                           001 OP_LOADNIL                 R3
developers
                                                           002 OP_CLASS R2                :Hello
NODE_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_TCLASS R1
       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
              IIJが作るPaaS = MOGOK

• http://mogok.jp/




                   Developers Summit 2013 Action !
Developers
Summit
      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

Devsumi2013 Ruby開発者のみなさん、mrubyで楽しく快適な組み込みアプリ開発を始めませんか?

  • 1.
    Developers Summit Ruby開発者のみなさん、 mrubyで 楽しく快適な組み込みアプリ開発を 始めませんか? 15-E-2 曽我部 崇 #devsumiX 株式会社インターネットイニシアティブ プロダクト本部 アプリケーション開発部 Developers Summit 2013 Action !
  • 2.
    Developers Summit 自己紹介 • 曽我部 崇(@rev4t) – IIJで企業向けルータの開発などに従事 最近の活動場所 • mruby (http://github.com/iij/mruby) • openstack – コントリビュータ始めました(IPv6まわりの修正をし た程度..) Developers Summit 2013 Action ! 2
  • 3.
    Developers Summit SEIL(ザイル)作っています • ISPのノウハウを結集してIIJが開発した企業向 けアクセスルータ • Firmwareは独自開発、Hardwareは国内製造 • 仮想化環境(VMWare, KVM, Hyper-V)対応 Developers Summit 2013 Action ! 3
  • 4.
    Developers Summit SEILのアーキテクチャ • NetBSDをベースに、ルーティングエンジンや コンフィグ管理システム(CLI, WebUI)を組み込 んでいる コンフィグ管理システム Quagga Other daemons (Routing Engine) libc NetBSD Kernel Developers Summit 2013 Action ! 4
  • 5.
    Developers Summit 質問 • 組込ソフトの開発をして いる人はどれくらいい らっしゃいますか? Developers Summit 2013 Action !
  • 6.
    Developers Summit mrubyとの出会い • 2011年春頃 – 社内プロジェクトで、SEILに cruby を組み込んだ • 2011年8月頃 – 社内の先輩 前橋さん(@tmeb4)にmrubyの存在を教 えてもらう – SEILでも動くか試すべく、関係者にコンタクトを取る • 2011年12月頃 – ソースコードを入手し、SEIL上でもmrubyが問題なく動 作した Developers Summit 2013 Action ! 6
  • 7.
    Developers Summit 組込ソフト開発者の苦悩 IIJ が提供中のオープンソース ソフト ARMSD よりコード を一部抜粋 … https://githu b.c om /s eil - sm f/a rms d 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
  • 8.
    Developers Summit C言語でコード書くのは結構大変 油断すると、すぐにバグが入ります ;-( • エラー処理のコードが煩雑 • 特に文字列処理が大変 – 文字列領域の踏み抜き.. – 確保したメモリの解放忘れでメモリリーク.. – FDの解放し忘れでFDリーク.. – etc... Developers Summit 2013 Action ! 8
  • 9.
    Developers Summit 軽量Ruby(mruby)とは • 家電製品などの開発生産性を向上させることを目指し て設計されたRuby言語 • 2011-2012年にかけて、経済産業省の「地域イノベー ション創出研究開発事業」として、開発が進められた • 2012年4月に、MITライセンスとしてgithub上に公開 • 特長 – Ruby処理系に必要な資源(メモリ)の削減 – 実行速度の向上 – リアルタイム性の向上 – 直接見えないように変換されたソースコード Developers Summit 2013 Action ! 9
  • 10.
    Developers Summit mrubyを使えば開発効率が上がる? コンフィグ管理システム 文字列処理が多い Quagga Other daemons (Routing Engine) システムプログラミング libc NetBSD Kernel C言語必須 コンフィグ管理システムはrubyで書くと 開発効率が高まりそう Developers Summit 2013 Action ! 10
  • 11.
    Developers Summit 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
  • 12.
    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
  • 13.
    Developers Summit SEIL/X1 ハードウェア構成 • CPU: Cavium Octeon (SoC) – MIPS64アーキテクチャ • Memory: 256MB • Flash: 16MB • USB: 1ポート • Ethernet: GbE 3-port Developers Summit 2013 Action ! 13
  • 14.
  • 15.
    Developers Summit 事例1: Quillシステム • IIJバックボーンの遅延等を測定 • 国内外の中継施設にプローブを配備 – プローブの開発にはrubyを使用 Developers Summit 2013 Action ! 15
  • 16.
    Developers Summit Quillプロジェクトの課題 • プローブはすぐにオペレータが対応できない 場所にも置いてある – 従来は汎用PCサーバを使用 – できる限り壊れてほしくない – 交換するときは誰でも簡単にできるようにしたい SEIL/X1 を使うことにした Developers Summit 2013 Action ! 16
  • 17.
    Developers Summit crubyは大きすぎた.. • リリース版のfirmwareに入りきらない – 社内専用版を作って、使わない機能はザックリと 削除 – 今の所支障はないが、今後firmwareをメンテナン スし続けるのは大変 mruby版firmwareへ移行を検討中 Developers Summit 2013 Action ! 17
  • 18.
  • 19.
    Developers Summit もっと柔軟なルータが欲しい • イベントスクリプト機能 開発中 – SEILの機能をmrubyスクリプトから操作 – 経路障害、インタフェースのUp/Downなどのイベ ントをトリガになる Action 軽量Ruby スクリプト •最低限の切り分け作業を自動化 Event • ping, show status route, ... •インタフェースDown •外部サービスとの連係 •CPU負荷上昇 • IaaSやPaaSの性能を増減 •通信量の増加 • 監視システムへアラートを •経路の変化 送信 •etc. •経路切替 Developers Summit 2013 Action ! 19
  • 20.
    Developers Summit 色々作ってみました(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
  • 21.
    Developers Summit 色々作ってみました(2) • Amazon S3 – 監視異常をトリガにして、コンテンツをアップロー ド • https://github.com/iij/mruby-aws-s3 Amazon The Internet S3 監視異常 Developers Summit 2013 Action ! 21
  • 22.
  • 23.
    Developers Summit SACMとは • SACM [Service Adapter Control Manager] – 機器の自動接続、一元管理ができるサービス – http://www.sacm.jp/ SA=Service Adapter Developers Summit 2013 Action ! 23
  • 24.
    Developers Summit SACM 新サービスの特長 • 「富山の置き薬」タイプのネットワーク接続 サービス – 機能自体に課金 • ネットワーク機器「SA-W1」は無償で提供 • IPsec-VPNレシピ、又は無線LANレシピ – 必要なネットワークを迅速に構築できる Developers Summit 2013 Action ! 24
  • 25.
  • 26.
    Developers Summit SA-W1にmrubyを搭載しました • コンフィグ管理システム「レシピフレームワー ク」はmrubyを用いて開発されています 中間形式の 内部プログラム向けの 設定ファイル 設定ファイルに変換 設定 パラメータ レシピ フレームワーク Developers Summit 2013 Action ! 26
  • 27.
    Developers Summit mrubyを使って分かったこと(1) • 開発効率が上がった – 文字列処理やロジックが簡潔に記述できるように なった – いちいちfirmwareをビルドしなくてもプログラムを 差し替えできるのは便利 Developers Summit 2013 Action ! 27
  • 28.
    Developers Summit mrubyを使って分かったこと(2) • たくさん地雷を踏みました.. – mrubyのバグ潰しに結構時間を費やしました ;-) – これからmrubyを使う人は割と安心して使える • 沢山の人がmrubyを使えば、さらにバグが 減って安定します! Developers Summit 2013 Action ! 28
  • 29.
    Developers Summit まとめ Developers Summit 2013 Action ! 29
  • 30.
    Developers Summit 組込機器の開発プロセスが進化する • 今までの組み込み機器開発 – ドライバ、アプリ(ロジック)全てC言語又はアセンブリ 言語で開発 • これからの方向性 – 速度やリソースの制約がある箇所だけC言語やアセ ンブリ言語で記述 – その他のロジック部分は、出来る限り開発効率の良 い言語で開発 – テスト駆動開発 Developers Summit 2013 Action ! 30
  • 31.
    Developers Summit アプリにmrubyを組み込む • アプリへの組み込みにも向いている • 例 – apache に組み込む => mod_mruby – iOSアプリに組み込む => MobiRuby – 言語内DSL • mruby(ミニマム) + 必要なmrbgemだけを組み込むことで、コ ンパクトかつ堅牢になる • 利点 – アプリ動作ホストのruby環境に依存しない • rubyバージョン、gem依存を気にしなくて良い Developers Summit 2013 Action ! 31
  • 32.
    Developers Summit mrbgem • mruby版のGEM • 2012年12月、本家にコミットされた • mrubyのビルド時にGEMを組み込むことができる – rubyスクリプト、C言語のコードどちらも組み込み可能 mrbgemに対応した以後、mrubyのエコシステムが 急速に進化中 https://github.com/mruby/mruby/wiki/Related-Projects Developers Summit 2013 Action ! 32
  • 33.
    Developers Summit ruby+mruby = Internet of Things • ruby + mrubyで、様々なモノやクラウドをイン ターネットを介して結び付けることができる 照明、家電、冷暖房、 蓄電池、各種センサ,etc. Developers Summit 2013 Action ! 33
  • 34.
    Developers Summit It’s your turn. Developers Summit 2013 Action !
  • 35.
    Developers Summit 皆さんもmruby始めてみませんか? • 組込機器の開発をしている皆さん – mrubyが載りそうであれば、開発効率が高められ るかどうか試してみませんか? • サーバ用のソフトを開発している皆さん – アプリ内のミニ言語などに使ってみませんか? Developers Summit 2013 Action ! 35
  • 36.
    Developers Summit PR: SEILmrubyアプリを作りませんか? • SEIL/x86 – https://www.seil.jp/community/seilx86 – 仮想ルータソフトウェア – コンフィグ保存が不要であれば、無料で使える • 今春リリース予定のfirmwareでmrubyスクリプト に対応予定 • 今後、アプリコンテストなどを企画する予定です。 是非ご参加ください! Developers Summit 2013 Action ! 36
  • 37.
    Developers Summit mrubyのビルド方法(1) • PC環境(Linux, Mac) でビルドに必要なもの – GCC – bison – git – Rake (Ruby版make) または ruby1.8以降 Developers Summit 2013 Action ! 37
  • 38.
    Developers Summit mrubyのビルド方法(2) $ 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
  • 39.
    Developers Summit mrubyのビルド方法(3) hello.rb class Hello ソースコードを直接実行 def world $ bin/mruby hello.rb puts "Hello World!" Hello World! end end バイナリファイルを実行 $ bin/mrbc hello.rb a = Hello.new $ bin/mruby –b hello.mrb a.world Hello World! Developers Summit 2013 Action ! 39
  • 40.
    Developers Summit mrubyのビルド方法(4) irep 148 nregs=4 nlocals=2 pools=0 syms=3 $ bin/mruby –v hello.rb 000 OP_LOADNIL R2 mruby - Embeddable Ruby Copyright (c) 2010-2013 mruby 001 OP_LOADNIL R3 developers 002 OP_CLASS R2 :Hello NODE_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_TCLASS R1 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
  • 41.
    Developers Summit 軽量Rubyフォーラムのご紹介 • 2013年2月に発足予定のNPO法人 – http://forum.mruby.org – IIJも加入予定 • このような人・企業は、是非ご参加ください! – 自社製品の開発言語として軽量Rubyを採用してみたい – 軽量Rubyの今後の開発方針をいち早く知りたい、意見したい – 顧客に軽量Rubyを提案することで差別化を図りたい – 軽量Ruby(あるいはその周辺ツール)の開発に関与したい – 自社で軽量Ruby製品をNPOを通じて宣伝したい – 軽量Ruby教育関連事業を企画したい – とにかく軽量Rubyを応援したい Developers Summit 2013 Action ! 41
  • 42.
    Developers Summit IIJが作るPaaS = MOGOK • http://mogok.jp/ Developers Summit 2013 Action !
  • 43.
    Developers Summit 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