組み込み向けに作られた「mruby」
まつもとゆきひろ氏:こんにちは、まつもとゆきひろです。今回は、Matzチャンネルの22回目ですね。
前回、前々回と、mrubyについてガーっと話したような気がするのですが、「そもそもmrubyとは、何か?」という話をしていないという部分に気がついて、今日はあらためてmrubyの話をしようと思います。
前回mrubyの始まりの話をした時に、もともと「軽量Ruby」と名前をつけていたという話をしたのですが、mrubyは、もともとは組み込み用マイクロコントローラーでも動くRubyを目指していました。
だから、組み込み用のAPIを持ったライブラリとして提供されるもので、mrubyをダウンロードしてコンパイルすると、mrubyという名前のインタプリタの、CRubyにおける「ruby」というコマンドと同じようなことをするソフトウェアができます。
それから、インタラクティブにRubyのプログラムを実行するmruby版のirbであるmirbというプログラムができるのですが、これはあくまでも、サンプルプログラムのつもりで、mrubyの一番大事なところというのは、ほかのソフトウェアがリンクできるライブラリであると認識しています。
これは、ライブラリにリンクすると、マイクロコントローラーで動くソフトウェアからRubyを実行できる、いや、マイクロコントローラーではなくて、普通のコンピューターでもいいのですが、とにかくソフトウェアの中にRubyを組み込むことができるのが主眼だと思っています。
そうすると、主従関係が逆転するんですよね。CRubyというソフトウェアがあって、Rubyのプログラムを食わせると動くので、ソフトウェアはRubyが主になります。
アプリケーション全体はRubyで書いて、機能を追加することが必要であれば、その機能を「C Extension」で書いて実行するというかたちになります。
いっぱいgemがあって、その中には、Extensionを提供するようなgemがいっぱいあるので、それでがんばりましょうというのがCRubyなんですけれども(笑)。
mrubyの場合は逆で、アプリケーションが先にあります。人工衛星をコントロールする」とか「ロボットをコントロールする」など、いろいろなアプリがあります。
その中で例えば、Rubyで書いたほうが楽な部分、設定の部分や、頻繁に書き換えが起こるところなど、そういうところをRubyで書いて、そこだけRubyで実行しましょうという感じのソフトウェア構成になることを目指しています。
メモリ容量などと引き換えに必要なだけ強力なRubyを組み込むことができる
さらにmrubyは、機能の取捨選択ができるというところが特徴になると思います。いろいろな機能、そのアプリケーションから使わない機能は、別にくっつけておく必要はないので、必要に応じて外すことができる。
例えば、マイクロコントローラーはメモリ容量、ROM、RAMが足りない傾向があります。そうすると、コンパイラを外してVMだけ実装して取り込みましょう、アプリに置きましょうと。
よそでコンパイルしたバイナリをそのVMに食わせてやるということができる。すると、そのプログラムのサイズをすごく小さくできるわけですね。
そういう、コンパイラを外しましょうとかね。あるいは、正規表現が要らないなら正規表現を外しましょうとか、ファイル入出力が要らないのでファイル入出力は外しましょうとか、ネットワークの対応は要らないのでネットワークソケット機能を外しましょう、みたいなことができるのが、mrubyの最大の特徴になると思っています。
実際に、例えばマイコンにmrubyを載せて、例えば「キーボードをコントロールしました」とか、「人工衛星をコントロールしました」とか、「ロボットをコントロールしました」とか。
それから、ペイメントデバイス。ブラジルの会社なのですけども、クレジットカード読み取り機の中にmrubyが入っていて、それを使うことでけっこういろいろな機能をコントロールできるようになっています。
そのペイメントデバイスは、ビットコインなどでも支払いもできるという謎の機能が入っているのですけれども、そういうような使い方をすることを想定して、最初は作られました。
なんですが、既存ソフトウェアに組み込むのも便利だと気がついた人もいて、例えばWebサーバー、「nginx」や「Apache」、それから、「H2O」とかですね、そういうWebサーバーに組み込んで機能を拡張したりルールを提供したりするのにRubyで書けますということをしている人たちもいました。
それから、ゲームに組み込む人たちもいました。有名なタイトルだと『NieR:Automata』ですね。ソースコードが公開されるものではないので、どういうふうに使っているかはわからないのですけれども(笑)。
クレジットのところに、mrubyのライセンス表記が登場して、組み込まれていますということが表示されているので、どこかで使っているんだろうなと思います。ありがたい限りですね。
そんなふうに、mrubyさえあれば、必要な機能を組み込んで、必要なだけ強力なRubyを、メモリ容量やプログラムサイズなどと引き換えに、あなたのアプリに組み込むことができるというのが、mrubyの最大の特徴になる。あるいは、最大の魅力になると思います。
今日は、ちょっと技術寄りの話でしたけれども、「mrubyとは何か?」ということについて、お話ししました。
次回以降は、また「mruby Kaigi」の話に戻って、パネルで話した内容についてかいつまんで紹介していけるといいなと考えています。それでは、次回をお楽しみに。