.logbook

学んだことを書き綴る、言わば航海日誌です。

ETロボコン2015の準備。mrubyの開発環境を知る

これは、ETロボコン Advent Calendar 2014 - Adventarの 24日目のエントリーに備えた、補足記事です。

mrubyをよく知らない人向けに、mrubyのソフトウェア構成・開発環境についてまとめます。

mrubyのソフトウェア構成

mrubyの内部構造は、おおまかに以下の図のようになっています。

f:id:ylgbk:20141221183031p:plain

mrubyのコアとなるのは「ライブラリ(libmruby.a)」です。このライブラリがmrubyの大半の機能を実現しています。インタプリタ(mruby)、対話型シェル(mirb)、コンパイラ(mrbc)、デバッガ(mrdb)は、このライブラリとリンクして生成され、ライブラリを利用することで各々の機能を実現します。

それぞれがどのような実行モジュールであるか、以下に説明します。

インタプリタ(mruby)

Rubyで記述されたソースコードまたは中間オブジェクトを実行します。

対話型シェル(mirb)

ソースコードは指定せず、シェルへ実行命令を1行ずつ打ち込む形で実行します。Rubyのソースを一部分だけお試しで動かすときなどに役立ちます。

コンパイラ(mrbc)

Rubyで記述されたソースコードを事前にコンパイルし、中間オブジェクトを生成する際に使用します。

デバッガ(mrdb)

実行中のプログラムを中断させて、動作が意図通りとなっているかチェックしたり、意図的に振る舞いを変更させたりすることができます。プログラムを中断させたあと、1行ずつ実行させることもできます。

mrubyの実行方法

インタプリタ(mruby)とデバッガ(mrdb)は、Rubyの文法で書かれたソースを実行する環境となります。この時、実行方法は2種類存在します。

  1. ソースコードを入力とし、構文解析しながら実行する。
  2. ソースコードコンパイルした中間オブジェクトを入力とし、実行する。

こう書くと、2の方が性能が良いと思われがちですが、「実行中の性能は変化しない」が正解です。1の方法も、実行前に中間オブジェクトに変換している*1ためです。

開発環境

実際にEV3上で動作するmrubyのソフトウェアを開発するために、ホストとターゲットの両環境を構築(クロス開発)すると便利です。

f:id:ylgbk:20141221184353p:plain

図にあるように、クロス環境を構築すると、ホスト環境で作成したソースをホスト環境でもターゲット環境でも動作させることができます。また、ターゲット環境上でmrdbを起動してデバッグ、なんてことも(環境が整っていれば)可能です。

f:id:ylgbk:20141221184630p:plain

残念ながらEV3の環境がどのような構成となるか、現時点では未確定です。ですので、まずはホスト環境のみ先に構築してmrubyに触れてみるのが良いでしょう。