mruby/cとは?mrubyとの違いや開発環境の構築の仕方も解説

mruby/cとは?mrubyとの違いや開発環境の構築の仕方も解説

mruby/cとは


mruby/c(えむるびーすらっしゅしー)とは、Rubyをベースに開発されたプログラミング言語です。2018年にしまねソフト研究開発センターと九州工業大学の共同開発によって誕生した言語で、IoTに使用される組み込みソフトの開発をメインに考えられています。

また、mruby/cでは組み込み機器に対応するためC言語と比較しても実装が容易で、Rubyと比較して100分の1の容量で動作し、さらに大幅な小電力化も実現しています。

mrubyとの違いとは

Rubyをベースにしたmruby/cが誕生するよりも以前に、福岡で「mruby」と呼ばれる組み込み向けの軽量プログラミング言語が生まれました。

mrubyとは、C言語の問題を解決しRubyの特徴を生かすことで、組み込み開発におけるさまざまな課題を解決するために開発されたプログラミング言語です。

また、mruby/cはこのmrubyをさらに小型化した言語となっています。ここではmrubyとの違いについてご紹介しますので、ぜひ参考にしてみてください。

メモリの消費量が少ない

mruby/cとは、mrubyよりもメモリの消費量を少なくしたプログラミング言語です。mrubyと同様にRubyのメリットを受け継ぎながらも、プログラム実行時のメモリ消費量が従来のmrubyよりも少なく済みます。

具体的には、プログラム実行時に必要なメモリ量が、mrubyであれば200kbであるところ、mruby/cであればメモリ量64kbで済みます。

マルチタスク機能をサポート

mruby/cとは、マルチタスク機能をデフォルトでサポートしているプログラミング言語です。マイコンを使用した開発を行う場合、外部デバイスの監視や応答待ちといった非同期処理が多数発生します。

mruby/cの場合はタスク間での共通のクラス定義やグローバル変数空間を参照しており、排他処理が実装できます。さらに、mruby/cでは非同期処理を実装するためのマルチタスク機能を利用することが可能です。

mruby/cの開発環境の構築手順10個


mruby/cを使った開発を行おうと考えている方の中には、開発環境をどのように構築すればいいのかわからないという方もいるでしょう。実際に、mruby/cの開発環境はどのようにして構築すればよいのでしょうか。

ここではmruby/cの開発環境の構築手順10個をご紹介しますので、ぜひ参考にしてみてください。

1:使用するハードウェアを用意

mruby/cの開発環境を構築する場合、まずは使用するハードウェアを用意しましょう。

mruby/cはOS環境として「Windows10」「macOS(10.8以降)」での動作や操作を想定しているため、mruby/cの開発に使用するハードウェアは上記のいずれかがインストールされているハードウェアを用意するようにしましょう。

2:Arduino IDEをインストール

用意したハードウェアにArduino IDEをインストールしましょう。

「https://www.arduino.cc/en/software」から自身の環境に合ったソフトウェアのリンクを探し、クリックします。リンクするとソフトウェアのダウンロード画面に移行し、「JUST DOWNLOAD」をクリックするとダウンロードが始まります。

3:使用するハードウェア用のボードマネージャーをインストール

使用するハードウェア用のボードマネージャーをインストールしましょう。ダウンロード後の手順はOSによって異なりますが、インストールを行って「追加のボードマネージャーのURL」に「https://dl.espressif.com/dl/package_esp32_index.json」を追加する必要があります。

さらに、どちらのOSを使用する場合でもArduino IDEのボードマネージャーから「arduino-esp32」のツールをインストールする必要があります。ボードマネージャーの検索フォームに「ESP32」と入力して、「esp32 by Espressif Systems」のインストールをクリックしましょう。

4:Rubyをインストール

Rubyをインストールしましょう。mruby/cを利用する場合にはmrbcコマンドを使用して、C言語の中間バイトコードに変換する作業が必要となりますが、mrbcコマンドはmrubyによって提供されているため、mrubyのインストールも必要になります。

さらにmrubyのインストールにはRubyが必要となるため、まずはRubyをインストールしましょう。

5:bisonをインストール

Windows10の場合はbisonをインストールしましょう。bisonとはWindows10でmrubyをコンパイルするためのツールです。

「http://downloads.sourceforge.net/gnuwin32/bison-2.4.1-setup.exe」でbisonをダウンロードし、インストーラーの画面の案内に沿って進み、「select Components」では全ての項目にチェックが入っているのを確認して、インストールを行いましょう。

6:bisonのインストール先のパスを通す

bisonのインストール先のパスを通しましょう。bisonを利用するにはパスを通す必要があります。「システムのプロパティ」画面を開き、「詳細設定」タブの「環境変数」をクリックし、環境変数ウィンドウを開きましょう。

さらに「Path」を選択して「編集」をクリックし、開いた「環境変数の編集」ウィンドウの「新規」からbisonをインストールしたパスを「’」でくくった状態で追加し、OKを押しましょう。

7:Rubyinstallerに付属しているgccなどのパスを通す

Rubyinstallerに付属しているgccなどのパスを通しましょう。mrubyをビルドするために必要になります。

bisonと同様に「環境変数」ウィンドウの「Path」変数を選択して「編集」ボタンをクリックし、「C:\Ruby26-x64\msys64\mingw64\bin」を追加しましょう。

8:mrubyを導入

前述のとおりmruby/cを利用するためにはmrubyも必要になるため、mrubyを導入しましょう。「https://github.com/mruby/mruby/archive/2.0.1.zip」からRubyをダウンロードし、Cドライブ直下に配置して解凍しましょう。

さらにコマンドプロンプトで「cd C:\mruby-2.0.1 ruby minirake」を実行し、mrubyをコンパイルします。

9:mrubyのフォルダのパスを通す

mrubyのフォルダのパスを通しましょう。「システムのプロパティ」画面を開き、「詳細設定」タブの「環境変数」をクリックし、環境変数ウィンドウを開きます。

さらに「Path」を選択して「編集」をクリックし、開いた「環境変数の編集」ウィンドウの「新規」から入力項目に「C:\mruby-2.0.1\bin」を追加し、OKを押します。

コマンドプロンプトで「mrbc.exe -v」を入力し、「mruby 2.0.1 (2019-4-4) mrbc.exe: no program file given」と表示されることを確かめましょう。

10:Arduinoにmruby/cを導入

Arduinoにmruby/cを導入しましょう。Arduino環境でmruby/cを動かすためには、いくつかの手順を踏んでmruby/cをポーテイング(移植)する必要があります。

ここではArduinoにmruby/cを導入する手順をご紹介します。

mruby/cリポジトリを取得

mruby/cのリポジトリを取得しましょう。GitHubの「https://github.com/mrubyc/mrubyc」に置いてあるmruby/cのソースコードを取得します。

Arduinoのライブラリを作成

Arduinoのライブラリを作成しましょう。例えばMacの場合、「~/Documents/Arduino/libraries/」というようなディレクトリの下に「libmrubycForWioLTEArduino」というディレクトリを用意し、以下に「 library.properties」と「src/」を配置します。

「library.properties」はArduinoのライブラリの設定ファイルとなっているため、Arduino IDEのライブラリとして認識できるように「name」や「version」、「url」などを書き込みましょう。

mruby/cのソースをライブラリにコピー

mruby/cのソースをライブラリにコピーしましょう。GitHubから取得したmruby/cのソースコードから、「src/」配下のファイルを「libmrubycForWioLTEArduino/src」にコピーします。

その際に「hal_○○○」というディレクトリがあるため、「hal_posix/」は「hal/」にリネームし、ほかの「hal_○○○」は削除しましょう。

HALを実装

HALを実装しましょう。「hal.h」にはインライン関数hal_writeとして文字列出力関数が定義されていますが、そのままでは動作しません。

HALを実装する際は、文字列の出力先を開発者が環境に合わせて実装する必要があります。

ボード固有の機能を使うにはC言語との連携が必要


ボード固有の機能を利用する場合、C言語で記述されたAPIをmruby/cから呼び出す必要があります。そのためには「mrbc_define_class()」関数でC言語により定義したクラスを追加し、「mrbc_define_class()」関数でメソッドを追加するといった作業が必要になります。

しまねソフト研究開発センターとは


しまねソフト研究開発センターとは、公益財団法人しまね産業振興財団内に平成27年10月に開設されたITを活用する企業支援や研究開発の拠点です。mruby/cの開発元であり、IT分野での技術発展やオープンイノベーションの加速を目指しています。

mruby/cを使ってIoT開発にトライしてみよう


mruby/cとはRubyをベースに開発された、IoTの組み込みソフト開発向けの言語です。

ぜひこの記事でご紹介したmruby/cの概要やmruby/cの開発環境の構築手順などを参考に、さまざまなIoT開発にmruby/cを活用してみてはいかがでしょうか。

インフラエンジニア専門の転職サイト「FEnetインフラ」

FEnetインフラはサービス開始から10年以上『エンジニアの生涯価値の向上』をミッションに掲げ、多くのエンジニアの就業を支援してきました。

転職をお考えの方は気軽にご登録・ご相談ください。

合わせて読みたい

Scalaとは?Scalaの特徴とメリットや開発環境の作り方も解説... Scalaとは Scalaとは2003年頃に開発されたオブジェクト指向と関数型プログラミングを合わせたプログラミング言語です。オブジェクト指向とは柔軟にプログラミングするための手法で、関数型プログラミングは関数を組み合わせてプログラミングします。 同じJVM言語のJavaのライブラリが使...
Go言語とは?Go言語の特徴6つ|作られた経緯や他の言語との違いも解説... Go言語とは Go言語とはGoogleが開発した言語で、大規模なシステムの開発に向いていると言われている言語です。YouTubeやメルカリ、ぐるなびなどのWebアプリもGo言語で開発されています。 誰が読んでも読みやすく、また使いやすい言語になっています。汎用性があると言われています。こ...
TypeScriptとは?JavaScriptとの違いも解説 TypeScriptとは TypeScriptとはJavaScriptの機能を拡張し、開発されたオープンソースのプログラミング言語です。2014年にMicrosoft社が開発した言語で、TypeScriptでコーディングを行ってコンパイルすることで、JavaScriptのコードに変換することが...
Rustとはどんな言語?Rustの特徴やメリットについても解説... Rustとは Rustは「安全性」「速度」「並行性」の3点を保証するプログラミング言語です。 2006年、グレイドン・ホアレが個人プロジェクトとしてスタートしたRustですが、2009年にはMoFoが開発に参画し、Mozilla Resarch公式プロジェクトとなります。 仕様変更を頻繁に...
Python言語の特徴7選|活用した主な事例4選と学習方法3選を紹介... hbspt.cta.load(20723875, '4d5ed975-c4a9-41ec-8e28-71f1d092cb5c', {"useNewLoader":"true","region":"na1"}); Python言語とは まずは、Pythonの基本的な知識と歴史を紹介します。...