軽量Ruby (mruby) 技術紹介
組込み総合技術展「Embedded Technology 2012」にて、以下のセミナーを行いました。
 【テーマ】 組込みソフト開発の新潮流 軽量Rubyのご紹介 
 【日時】 2012年 11月15日(木) 11:00~11:45 
セミナーで使用した、資料をダウンロードできます。 
近年、情報家電やモバイル端末などの情報機器だけでなく、産業機械やオフィス器具など、あらゆる機器の情報化が進められる中、組込みソフトウェアの規模と役割は飛躍的に高くなっています。しかしながら、組込みソフトウェアの開発現場では、依然としてC言語を中心とした開発が主流であり、開発効率の向上が課題となっています。
一方で、Webサービスなどのサーバー利用分野においては、日本で開発されたプログラミング言語であるRuby(CRuby/MRI)を中心に生産性の向上が進められています。
そこで、今後ますます大規模・複雑化し、高品質、短納期化、低コスト化が求められる組込みソフトウェア開発において、これらの課題を解決する為に、「軽量Ruby」が産学共同プロジェクトによって開発されました。
弊社は、アドバイザーとして軽量Ruby開発プロジェクト(*1)に参画し、組込み関連分野のアドバイスを行いました。また、軽量Rubyチップ・軽量Rubyチップ評価ボードの開発に取り組みました。(*2)
 英語での案内はこちら(To see in English, click here) 
(*1) 2010年度 経済産業省の地域イノベーション創出研究開発事業「軽量Rubyを用いた組込みプラットフォームの研究・開発」 
(*2) 弊社技術情報誌 「Wave」Vol.15
   技術トピックス 「18 組込み分野での活用が期待される 軽量Rubyへの取り組み」 
軽量Ruby「mruby」とは
mrubyとは、プログラミング言語Ruby(ISO/IEC 30170)の仕様に準拠し、Ruby処理系に必要な資源を絞り込んで実装したものです。オープンソースとして“軽量Rubyフォーラム”のコミュニティから提供されています。特徴は以下の通りです。
- ・高い移植性
 C99で規定されたC言語で実装され、様々な環境で動作させることができます。
- ・高い互換性
 従来のRubyと同様、C言語拡張により既存のC言語等の資産を利用することができます。もちろん これまでの(ISO/IEC 30170 仕様)Rubyの資産を活用することができます。
- ・柔軟な開発環境
 内部構成がコンポーネント化されているため、その組み合わせにより、従来のインタプリタ型の実行モデルの他、コンパイラと仮想マシン(RiteVM)による実行モデルで動作させることができます。コンパイル済みバイナリはどのRiteVMでも動作させることが可能で、クロス開発が不要となります。
- ・省資源
 RiteVMはOSやファイルシステムを必要としないので、小規模な組み込みシステムで動作させることができます。(組み込み機器からサーバー分散環境での利用が期待されます。)使用メモリは、利用するライブラリに依存し、数100Kバイト~数Mバイト程度です。
- ・ソースコードを秘匿可能
 コンパイル済みバイナリを配布対象とすることで、ソースコードを秘匿することができます。
- ・ハードウェア支援が可能
 RiteVMは、ハードウェア支援機能を実装することにより高速化することができます。(軽量Rubyチップ)
- ・組込みに適したライセンス
 MITオープンソースライセンスであるため、組込みソフトウェアでも安心して利用することができます。
軽量Rubyのソフトウェア構成
軽量Rubyのソフトウェアは、軽量Rubyの動作環境である軽量RubyVM(RiteVM)を含んだコアとクラスライブラリ群で構成されます。クラスライブラリ群はその内容によってミニマル、スタンダード及びフルに分類されます。正式リリースv1.0ではミニマルライブラリのみとなり、基本的な機能が提供されます。
尚、スタンダード、フル等のライブラリは今秋発足予定の“軽量Rubyフォーラム”のコミュニティから提供される予定です。 
軽量Rubyは、コアコンポーネントを組み合わせることで、インタプリタ・コンパイラ・バーチャルマシンの機能を実現しています。
| 機能 | RiteVM | バイナリ出力 | バイナリ入力 | パーサ ジェネレータ  | 
|---|---|---|---|---|
| インタプリタ | ○ | - | - | ○ | 
| コンパイラ | ○ | ○ | - | ○ | 
| バーチャルマシン | ○ | - | ○ | - | 
| ミニマム | RiteVMの実行に必要な最低限の機能 | |
|---|---|---|
| クラス | Object, Module, Class, NilClass, TrueClass, FalseClass, Numeric, Integer, Fixnum, Float, String, Symbol, Array, Hash, Range, Regexp, MatchData, Proc, Struct | |
| モジュール | Kernel, Enumerable, Comparable | |
| 例外クラス | Exception, StandardError | |
| スタンダード | ISO/IEC 30170相当 ※予定 | |
| フル | CRuby/MRIのフル機能相当 ※予定 | |
| ドメイン別ライブラリ | 製品ドメイン別の拡張ライブラリ | |
軽量Rubyチップ評価ボード(参考)
「軽量Rubyチップ評価ボード」は、ハードウェアによるRiteVMの実行支援を実装した軽量Rubyチップの評価用ボードです。様々な周辺回路を搭載し、軽量Ruby仕様に準じたRubyプログラミングによる家電機器から産業機器等の組込みソフトウェアの評価を行うことができます。
軽量Rubyチップは、汎用CPUにRiteVMのホットスポットであるハッシュ演算(Barrel Shifter)を拡張命令として実装したものです。RiteVMそのものはCPU非依存であるため、様々なCPUで動作させることができます。RiteVMを動作させるCPUがSoC/ASIC等で、ロジックに余裕がある場合、このハードウェア支援機能を実装することで軽量Rubyの動作性能を向上させることができます。
【特徴】
- Altera社製FPGA CycloneIII搭載 (50MHz動作)
 - メモリ SRAM:512KByte、SDRAM:32MByte、Flash:64MByte
 - 汎用CPUコアとしてAltera社製 “NIOS2”を採用し、RiteVMのハッシュ演算を拡張命令として実装
※FPGAのロジックエレメントに余裕があるため、その他HW機能を搭載可能 - 各種IOを搭載
 
【動作確認OS】
- OSなし / μITRON (TOPPERS/JSP)
 
提供サービス
| 開発支援 | 軽量Rubyを用いた開発のアドバイス | 
|---|---|
| ソフトウェア開発 | アプリケーション開発 軽量Rubyへのポーティング  | 
| ポーティング | RiteVMのターゲットデバイスへのポーティング | 
| ハードウェア設計 | RiteVMのハードウェア支援の実装 | 
関連リンク
- mrubyリポジトリ(GitHub)
https://github.com/mruby(別ウィンドウで開きます)
 - 福岡Rubyビジネス拠点推進会議 
http://www.f-ruby.com/(別ウィンドウで開きます)
 
- mrubyリポジトリ(GitHub)
 
※本文中の会社名および製品名は各社が商標または登録商標として使用している場合があります。 
※掲載文中では、商標TM、登録商標(R)マークは原則として明記していません。
※本ページに記載された内容および製品の仕様は、予告なく変更することがあります。