• はてなブックマークに追加
  • Yahoo!ブックマークに登録
Rubyユーザやインフラエンジニアも必見、mrubyのススメ
mrubyを知ると
Rubyがもっと楽しくなる!
mruby、名前だけは聞いたことがあるけれど組込みエンジニアではないから自分には関係ないと思っているRubyプログラマのみなさん、そんなことは全くございません。mrubyとRuby(CRuby)の違いを理解しておけば、日々のソフトウェア開発に役立つ場面が出るかもしれません。
(文/曽我部崇(株式会社インターネットイニシアティブ) 総研スタッフ/CodeIQ運営事務局)作成日:13.07.01
はじめに

 普段の仕事や趣味などでRubyを使っているプログラマは沢山いらっしゃると思いますが、mrubyを使ったことはございますでしょうか。mrubyは組込機器向けのRuby言語として開発が進められ、2012年4月にGitHub上で公開されました。mrubyの主要なコンセプトは組込機器の開発にRuby言語を使うことで開発効率の向上を目指すことにありますが、実際には幅広い人々がmrubyの恩恵を受けられるかもしれません。本稿では、mrubyの特徴について解説し、みなさんの日々のプログラム開発に役立つヒントをご紹介します。

mrubyの特徴

 mrubyはCRuby(C言語版のRuby、いわゆるMRI)と比べていくつか大きな特徴があります。そのなかでも、最も重要な違いを以下にまとめます。

● CRubyはRubyが「主」
 大部分はRubyで開発、どうしてもCが必要な箇所のみ拡張ライブラリを開発
● mrubyはRubyが「従」
 大部分はC言語で開発、Rubyで開発すると効率が良い箇所のみC言語から呼び出して使う

 CRubyを用いたプログラム開発はAndroidを例にすると、AndroidSDKとAndroidNDKの関係に似ています。Androidアプリの開発では、大部分はAndroidSDKを用いてJava言語で開発しますが、動作速度を優先したいプログラムやkernelに近い処理に関してはAndroidNDKを用いてC言語で開発します。

 mrubyを用いたプログラム開発は、従来のRubyが「主」の開発スタイルを取ることもできますが、C言語上のコードからmrubyプログラムを実行するためのAPIが用意されています。組み込み機器のプログラムはC言語で開発されているものが多いですが、動作速度よりも開発効率を優先させたい場面があればmrubyを組み合わせることができます。

 このほかにも、mrubyには以下のような特徴があります。

● 消費メモリが少ない
 mruby本体のバイナリファイルが小さいことや、mrubyVMが消費するメモリ量が少なくなるように設計されているため、プログラム実行時に消費するメモリが低く抑えられます。
● 言語仕様が小さい
 mrubyはRubyのISO規格に(完全ではないですが)準拠しているため、言語仕様はコンパクトになっています。言語仕様に関してはCRubyと完全な互換性はありませんが、その代りPerl由来の特殊変数など、過去のしがらみが一旦リセットされてスッキリとしています。
● 移植性(ポータビリティ)が高い
 mrubyはさまざまな組み込み機器でも動作することを重視しているため、C99の範囲内で実装されています。そのため、LinuxやBSD(FreeBSD,NetBSD,OpenBSD等)はもちろん、TRONやOSのない環境で動作することも確認されています。
● 必要なライブラリのみビルド時に組み込む
 mrubyは言語仕様自体がコンパクトに設計されています。プログラムから利用したいライブラリがあれば、mrbgemという仕掛けを用いてビルド時にすべてのライブラリを組み込んで利用します。
● リアルタイム処理に向いたGC
 mrubyでは、インクリメンタル世代別GC(ガーベージコレクション)が実装されています。CRubyに実装されているMark&Seep(1.9.3以降ではLazySweep)に比べて、mrubyのGCはシステム全体の停止時間を短くすることができます。mrubyで車のブレーキ制御を実現するのは難しいですが、インタラクティブなユーザインタフェース等、ソフトリアルタイム性が要求されるプログラムについてはmrubyのGCが効果を発揮します。
mrubyをアプリに組み込むメリット

 mrubyは、組込機器向けに開発された言語ではありますが、組込機器以外の用途で活用することもできます。例えば、以下のような用途が考えられます。

● アプリ内で動作するミニ言語として利用
 ある程度以上の規模のプログラムでは、アプリ専用の設定ファイルを用意することが多くなります。単純な設定ファイルであれば自前で実装することもできますが、設定内容に柔軟性を持たせる場合はRuby言語で設定を記述できるようにすると便利です。また、Ruby言語で設定を記述できれば、ユーザはアプリ毎に新たな言語を覚える必要がなくなります。
● ある程度のリアルタイム性が要求されるアプリに使用
 mrubyは前述のとおりインクリメンタル世代別GCを採用しているため、沢山のオブジェクトに対してGCが動作した場合でもプログラムの応答性能が比較的良くなります。CRubyのGCでは要求を満たせないようなRubyアプリを開発したい場合は、mrubyでの実装を検討してみると良いかもしれません。
● サーバホストのRuby環境に依存しないアプリを配布できる
 CRubyで開発したアプリをサーバホストへインストールする場合、ホストのRubyバージョンやgemのバージョンが適切に選択されていないと正しく動作しない可能性があります。mrubyであれば、mrubyの処理系自体がコンパクトなのでアプリと一緒に配布することが容易にできます。
mrubyでアプリを開発する際の注意点

 mrubyはRubyのISO規格になるべく準拠するように言語仕様が設計されています。そのため、mrubyは言語仕様としてはCRubyのサブセットになりますが、同じコードを実行しても違う結果が返ってくる場合があります。ここでは、Ruby開発者がmrubyでプログラムを開発する際に注意する必要のある点をまとめます。

● Fixnum/Fixnumの結果はFloat
 mrubyでは、FixnumをFixnumで割るとFloatが返ってきます。CRubyでは整数同士を割ると整数が返ってくるのでプログラムによっては注意して書く必要があります。
bin/mirb(mrubyの場合)
>((1/1)/1).class
=>Float
>1/2
=>0.5
irb(CRubyの場合)
>((1/1)/1).class
>1/1
=>0
● 0で除算した結果はinf
 mrubyでは、数値を0で割ると“inf”が返ってきます。
bin/mirb(mrubyの場合)
>1/0
=>inf

>(1/0).infinite?
=>1
● BigNumがない
 mrubyにはBigNumがありません。mrubyの動作環境にもよりますが、通常はmrb_intが32ビットになるため32ビット符号付整数で扱えるよりも大きな数を使うとFloatに変換されます。
bin/mirb(mrubyの場合)
>2147483647.class
=>Fixnum

>2147483648.class
=>Float
インフラエンジニアもプログラム開発スキルを身につけよう

 近年は、IaaSやPaaSをはじめとしたクラウドサービスが普及したことで、インフラエンジニアに要求されるスキルが大きく変わりつつあります。かつては、インフラエンジニアはサーバやネットワーク機器の設定ができれば仕事をこなすことができましたが、これらの仕事はIaaSやPaaSが普及するに従い、ソフトウェアによる制御に移行しつつあります。代わりに、IaaSやPaaSを運用できるエンジニアについてはどこの会社も人手不足に悩まされるかもしれません。IaaSやPaaSのインフラを運用するためには従来のインフラ運用技術に加えてプログラムの技術が要求されます。

 mrubyは今後ネットワーク機器や組込機器など、さまざまなモノの上で動作するようになると思いますので、サーバ向けプログラムの開発エンジニアだけではなくインフラエンジニアもぜひmrubyをマスターしてはいかがでしょうか。

 筆者は以前CodeIQ上でmrubyに関する出題をしましたが、機会があれば今後出題をしていきますのでぜひチェックしてみてください。
 https://codeiq.jp/ace/sogabe_takashi/

曽我部崇(株式会社インターネットイニシアティブ)

IIJプロダクト本部アプリケーション開発部戦略的開発室2001年IIJ入社。関西支社で法人向け専用線インターネット接続サービスやISP向けネットワークコンサルティングに従事。2005年からは、ISPとしては世界的にも希少な「モノづくり」ができるSEIL事業部に移籍し、ソフトウェアの不具合と格闘しつつ日々面白い技術を探し回っている。週末になるとバイクでオフロードを走るのが何よりの楽しみで、平日のアーバンライフとは真逆の泥まみれの生活を送る。

  • はてなブックマークに追加
  • Yahoo!ブックマークに登録
あなたを求める企業がある!
まずはリクナビNEXTの「スカウト」でチャンスを掴もう!
スカウトに登録する

このレポートを読んだあなたにオススメします

CodeIQ“コードで応募”エンジニアの新しい転職スタイル

コード転職やってはいけない6ヶ条とキラリ光る4ヶ条

企業の第一線で働いているエンジニアに、直接実力を評価してもらい転職する。そういった「コードを書いて応募する」転職スタイ…

コード転職やってはいけない6ヶ条とキラリ光る4ヶ条

「Forkwell」と「CodeIQ」が共催イベントレポート

必見!Forkwell松田明が出題するRails課題の正解発表

2012年12月19日、「Forkwell」と「CodeIQ」は、Rubyコミッターである松田明さん監修の下、「実践 …

必見!Forkwell松田明が出題するRails課題の正解発表

Rubyまつもとゆきひろ氏×Google鵜飼文敏氏のナマ対談

オープンソース開発を楽しむための“譲れないルール”

目まぐるしく変化するIT業界。その中でもオープンソース開発によるソフトウェアが、今注目を浴びている。「Ruby」の開発者まつもと…

オープンソース開発を楽しむための“譲れないルール”

我ら“クレイジー☆エンジニア”主義!

なぜコードを書き続けるのか?ギーク増井雄一郎の原点

我ら“クレイジー☆エンジニア”主義!「Titanium Mobile」の伝道師、「MobiRuby」「Wri.pe」などの開発者として知られる、増井雄一郎…

なぜコードを書き続けるのか?ギーク増井雄一郎の原点

SE兼マンガ家よしたにの「理系の人々」

エンジニア的「合わない」と思う瞬間/理系の人々

SE兼マンガ家よしたにの「理系の人々」Yahoo!ブログ「エンジニア流星群」でご好評いただいておりました「理系の人々」の三回目です。またまたIT業界にお勤めのエンジニ…

エンジニア的「合わない」と思う瞬間/理系の人々

僕たち私たちの転職忍者の術★31

バレないようにコッソリ転職活動したいでござる の巻

在籍中に転職活動をする場合、今の会社にバレないようこっそり慎重に進めたいもの。ときには家族や友人にも内緒で活動したいケ…

バレないようにコッソリ転職活動したいでござる の巻

この記事どうだった?

あなたのメッセージがTech総研に載るかも

あなたの評価は?をクリック!(必須)

あなたのご意見お待ちしております

こちらもお答えください!(必須)

歳(半角数字)
(全角6文字まで)
  • RSS配信
  • twitter Tech総研公式アカウント
  • スカウト登録でオファーを待とう!
スマートグリッド、EV/HV、半導体、太陽電池、環境・エネルギー…電気・電子技術者向け特設サイト

PAGE TOP