組み込み開発にも高い生産性を――製造業技術者に“軽量Ruby”「mruby」アピールETWest2012(2/2 ページ)

» 2012年07月03日 15時20分 公開
[西坂真人,@IT MONOist]
前のページへ 1|2       

 「いままで届いていなかった分野にも、Rubyの有用性を届けたい」というまつもと氏の思いから、2010年度に経済産業省の地域イノベーション創出研究開発事業によって始まったプロジェクトが「軽量Ruby」だ。Rubyの長所はそのままに、よりコンパクトな構造に軽量化・最適化した新しい処理系を目指して開発が進められた。そして2011年度まで続いた同事業が終了した2011年4月20日に、それまで軽量Rubyと呼ばれていた新しいRubyを「mruby」と改め、GitHub上でMITライセンスとしてソースコードを公開した。

 「“軽量Ruby”として始まったがこれはプロジェクトの名前で、ソフトウェア名としてはmrubyにした。まつもとのmじゃないかという説もある(笑)が、mrubyのmは『embedded』のm。文法的にはISO/IEC 30170として承認されたRubyの仕様に準拠するカタチで開発した。ライブラリも“ほぼ”JISやISOに準拠している。なぜ“ほぼ”という表現なのかというと、例えばJISにはファイルI/Oのようなものがあるが、組み込みの場合、ファイルシステムのようなものが必ずしもあるとは限らない。そういうものは当然提供できないので“ほぼISO準拠”ということになっている」(まつもと氏)。

photo

 軽量なスクリプト言語としては、ブラジル・リオデジャネイロの大学で開発された「Lua」がある。まつもと氏によると、mrubyの実装やAPIについてはこのLuaをかなり意識して作られているという。

 「プログラミング言語としてLuaを見た場合、言語が貧弱でいわゆるオブジェクト指向の機能をあまり持っていない。Lua自体が使えるライブラリもデフォルトではかなり貧弱。つまりLuaを使ってある程度規模の大きなソフトウェアを開発するのは厳しいのではというのが個人的な印象。もし世の中にLuaっぽいRuby――つまり組み込み向けAPIがあって、比較的高性能で比較的コンパクトでかつRubyの豊富で強力な機能が備わっていたらそれって理想的じゃない?……というのが、mrubyのもともとの発想だった」(まつもと氏)。

 Rubyが組み込み分野で注目されている理由について、まつもと氏は近年の組み込み機器の“高性能化”を指摘する。

 「スマートフォンやゲーム機といった小さなデバイスに対して高級言語を組み込むという流れが話題になっている。その背景にあるのは、組み込み分野でもデバイスの高性能化が加速しているということ。メモリが増え、ストレージも増え、プロセッサのパワー/クロックも高まっている。しかも組み込みがカバーする領域がどんどん広がっており、コード量はどんどん増えている。システム全体でソフトウェアの構成比率が増えているなか、ソフトウェアを高い生産性で開発したいというニーズが高まり、Rubyの“生産性を高める効果”に期待が集まっている」(まつもと氏)。

 とはいえ、組み込み機器で必要なリアルタイム性などはmrubyでは弱いなど課題もある。現在広く使われているCRubyでは、スピードがボトルネックとなるものに対してはCやC++を使って機能を追加していくことができる。CRubyという「言語」に対して機能を追加していき、それをアプリ開発に利用していくという考えだ。

 「アプリは基本的にRubyで開発して、スピードが必要な部分などはCや他の言語で開発しましょうというのが、現在広く使われているCRubyのアーキテクチャーのパターン。ところが、組み込みの場合……例えば、カーナビのアプリにRubyを組み込もうというとき、カーナビのアプリというものはおそらくCやC++で開発されている。その中で、ごく一部の機能だけRubyで開発したいというニーズが多いのではないだろうか。つまりアプリが主で、Rubyが従のような構成。現在使われているCRubyではAPIがそのようにデザインされていないため、このようなケースには向かない。mrubyのAPIではそこを考慮してデザインされており、他の言語で開発されたアプリからRubyを呼び出すということができる」(まつもと氏)。

 通常のRuby(CRubyなど)はスクリプト言語をインタプリタで実行するが、mrubyはRiteVMという実行環境が用意されており、コンパイラによって生成される中間コード(Ruby中間表現)をRiteVM上で実行するという仕組み。コアコンポーネントを組み合わせることで、インタプリタ/コンパイラ/バーチャルマシンなどの機能が実現可能で、文字列処理やI/O処理といったRubyが得意とする処理はmrubyでも継承されている。C言語では開発が面倒なネットワーク機器なども、Rubyでは非常に効率よく開発できるという。

 「ソフトウェア全体がコンポーネント構成になっているmrubyでは、これらを自由に組み合わせることができる。例えば、mrubyで書いたプログラムを事前に全てバイトコードでコンパイルしておくと、アプリそのものにはコンパイラが必要なくなり、プログラムサイズを削減できる。デバッグ時にはコンパイラを付けておいて柔軟に開発し、後でコンパイラを外してしまうことも可能」(まつもと氏)。

photo Rubyコアの構成

 「いろんな機器で動いてほしいので、特定のプラットフォームに依存しないような構成になっている。WindowsやMac OSでは当然動くし、いままで実験した中ではVxWorksでも動いた。またOSのない環境などでも動くようになっている。さらに、Rubyプログラミングによる組み込みソフトウェア開発の評価を行うための評価ボードも用意した」(まつもと氏)。

photo MIPS互換のCPUをFPGA上に作り込んでmrubyの機能を集約したRubyチップを実装した「組込みRubyチップ評価ボード」は、ETWestのRubyビジネス推進協議会ブースに展示されていた

 2012年4月の公開からまだ間もないmrubyだが、iOSのネイティブコードをmrubyで書ける「MobiRuby」などmrubyの活用例が早速登場している。その他にもApacheのモジュールにmrubyを埋め込む例や、サーバサイドJavaScriptフレームワークの非同期I/O部分をmrubyで機能拡張した例など、さまざまな動きが出てきているという。

 「ゲーム開発者にも注目されているし、モバイルにも注力していきたい。iOSだけでなく、Androidでmrubyを動かそうという人も出てきている。メモリやリソースに余裕のあるものは、mrubyが動かせる余地があるのではないか。まだmrubyの強い面、弱い面などあるが、幅広い領域で使われるようにしていきたい」(まつもと氏)。

前のページへ 1|2       

Copyright © ITmedia, Inc. All Rights Reserved.