Railsですっかりメジャーな言語になったRubyで組込みプログラムが書けちゃうニューカマー[mruby][https://github.com/mruby/mruby]にちょっと興味津々な今日このごろです。
数年前に関わったプロジェクトがVB+78Kマイコンで制御される工作機械だったこともあって、電気的な知識は相変わらずゼロに近いまんまですがフィジカルコンピューティングには強く惹かれています。ソフトしか使ってない人間からすると、モーターが動いたり発光ダイオード(LED)が明滅することにロマンと言うか、一種あこがれを感じるのです。
そんな訳で本屋で見かけたちょんまげプリントが可愛いJapaninoなんかに発作的に手を出してLEDチカチカだけで挫折したり、マルツパーツ館で見つけたLPC1769買ってやっぱりLチカで終わったした私としては、無闇に基盤を買っても悲しい思いをするだけという確信がありまして、物欲よりもまずは知識を深めるためにMac上で動かしてみることにした訳です。
前々から名前は知っていたものの、今日調べ初めたばっかりで良く分かってないのですが、組込み向けに軽量化されたRubyです。詳しくはこちらの文章をお読み下さい。MobiRubyを開発されている増井さんという方が書かれたブログ記事も分かりやすいかと思います。
mrubyは一般にリリースされてから(まだ正式じゃないものかも)それなりに日数は経過しているようですが、ちょっと検索した限りでは情報も少なめで何から初めたら良いのやら状態なんですが、ハード込みなら既に入門用キットもあって、これを買えば取り敢えずLCDパネルと組合せてばりばり使えるみたいです。どうせなら同じ値段で講習受けたほうがお得な気はしますけど。
仕事で必要に迫られたりしないかぎりは講習を受ける事はまずなさそうですが、そもそもmrubyは組込みボードのためだけの言語ではなく、先ほども出てきたMobiRubyやmod_mrubyなんてのもあったりしますので、パソコン上でも普通に動作します。
ですのでさっそくインストールから始めてみましょう。
Liquid error: undefined method `safe’ for nil:NilClass
ちょー簡単ですね。コンパイルが問題なく終わればbinディレクトリの下にmirb
、mrbc
、mruby
が出来上がっているはずです。
次に実行するrubyプログラムを用意します。定番のハローワールドちゃんです。
Liquid error: undefined method `safe’ for nil:NilClass
まずはきちんと動作するか確認です。
Liquid error: undefined method `safe’ for nil:NilClass
mrubyで実行する分にはCRubyとなんら変わりがないので次にコンパイルしてみましょう。エラーが出なければ同じディレクトリ内にhello.mrb
という中間コードのファイルが出来ているはず。
Liquid error: undefined method `safe’ for nil:NilClass
最初と違って今度はオプションを追加して実行します。当然ながらこちらも実行結果は同じです。 Liquid error: undefined method `safe’ for nil:NilClass
ここまではコマンドを使っての実行なので、コンパイル作業はあったものの、やはりそれほどCRubyでの実行と変わるところがありませんので、もう少し踏み込んで組込みっぽく動かしたいところなので、いよいよC言語の出番ですね。mruby.c
を参考にざっとソースを書いてみました。
Liquid error: undefined method `safe’ for nil:NilClass
でソースをさっそくコンパイルして実行してみます。
Liquid error: undefined method `safe’ for nil:NilClass
これでhello_mrb
コマンドとhello.mrb
ファイルのセットで実行出来るようになりましたが、ファイル開いて読みこむ作業が必要というのも何か面倒というか、単一のバイナリで実行したい場合もあると思います。コンパイルする時にmrbc
のヘルプを見たらちょっと気になる部分が、、
Liquid error: undefined method `safe’ for nil:NilClass
-B
オプションがちょっとあれな感じですよね(笑)。でっさっそく実行$ ./bin/mrbc -Bhello hello.rb
して出来上がったhello.c
がこんな感じになります。
Liquid error: undefined method `safe’ for nil:NilClass
実はこれをどうやって使うのか分かるまでちょっと時間がかかったのですが、とりあえず動くようにしたのが以下のコードです。さっきよりずっと短くなって組込みっぽさがアップしているのが分かると思います(笑)。
Liquid error: undefined method `safe’ for nil:NilClass
先ほど同様のコマンドでコンパイルして実行!
Liquid error: undefined method `safe’ for nil:NilClass
これで一つのバイナリーになってスッキリです。
実際に組込みボード上で実行するためにはまだまだいくつもハードルが有ると思いますが、まあ触りを楽しむならこの程度でご満足頂けたのではないかと思います。mruby今後も要注目です。