組み込みC言語プログラマのためのmruby入門(前編) ―― Rubyとmruby,何が違う? どう違う?
Rubyは,まつもと ゆきひろ氏(通称Matz)が開発したプログラミング言語です.Rubyは2004年に発表されたWebアプリケーションのためのフレームワーク「Ruby On Rails」の爆発的ヒットによって,広く知られるようになりました.Rubyは,日本で開発された言語としては初めてISO規格となり,最近では経済紙でもRubyへの言及を見かけるようになりました.
Rubyは,「純粋オブジェクト指向」注1というパラダイムを取りつつも,プログラマのストレスを軽減することを第一として設計されています.そのため,ワン・ライナ(コマンド・ライン1行で済ませる作業)から,twitter.comのような大規模なWebアプリケーションまで,幅広い分野で活用されています.
注1:純粋オブジェクト指向とは,あらゆる値をデータとメソッド(C言語の関数に相当)を持つオブジェクトとして扱うことを指す.詳しくは後述する.
Rubyは,広義には言語仕様です.そして,Rubyには,その言語仕様に準拠した,いくつかの処理系(実装)があります.その一つが,組み込み分野への適用をねらったmruby(eMbeddable Ruby)です.筆者は,このembeddableという単語には,二つの意味が含まれていると考えています.一つは組み込みシステムへの適用という意味で,もう一つはソフトウェア部品としてRubyをアプリケーションに組み込むという意味です.
mrubyは,ほかのいかなるRuby実装とも異なっています.また,ISOで標準化されたRuby言語仕様を踏襲しつつ,大胆に仕様変更している部分もあります.ここでは,Rubyおよびmrubyについて解説し,組み込みシステムへの適用の有効性について考えてみたいと思います.
1.これまでのRuby処理系とmruby,どこが違う?
Rubyには既に,オープン・ソースの実装が複数存在しています.この状況で,mrubyを新規に実装する必要があったのはなぜなのでしょうか.
●アプリケーションからmrubyの環境を呼び出す
mruby以外のRuby処理系は,OS上の1プロセスとして存在し,それ自身が環境として動作します(図1).C言語による拡張を許してはいますが,基本的にRubyで記述されたアプリケーションは,処理系が提供した砂箱の中で動作することが期待されます.
図1 一般的なRuby処理系とアプリケーション・プログラムの関係

一方,mrubyは,既に存在するアプリケーションに埋め込むことを想定しています.アプリケーションからmrubyの環境を呼び出すようなイメージです(図2).mrubyのソース・ツリーには,のちほど紹介するように,MRI(Matz' Ruby Implementation)注2と同様の対話型シェルやコマンド・ライン・ツールがサンプルとして提供されてはいます.しかし,mrubyの使われ方を考えると,それらはあくまでもサンプルと考えるべきです.
注2:MRI(Matz' Ruby Implementation)は,Rubyの開発者であるまつもとゆきひろ氏自身が開発したRuby処理系であり,公式な実装とされている.1.9系のRubyはMRIと区別されることもあるが,本稿では広義に捉えている.
図2 mrubyとアプリケーション・プログラムの関係
