Dear Great Hackers

  1. インタビュー
  1. タイアップ

ものづくり現場で使える軽量Rubyが熱い! RAM使用量5KB強で動く「mruby/c」について聞いてみた

労働力人口の減少に伴ってものづくりの現場でもDXの必要性が叫ばれている中、管理ソフトウェアならともかく、現場となる工場などでのハードウェアを動かすプログラムに関しては、モダンな環境にするのは至難の業でしょう。

というのも、そのようなハードウェアは小さなマイコン(電気機器を制御するための電子部品)上にプログラムが組まれているわけですが、そこで使われている言語は非常にレガシーで、拡張性に乏しく可読性も低いためです。

そのようなものづくり現場の課題を解決するアプローチとして開発されたのが、組込みシステム向けの軽量Rubyの開発言語「mruby/c」(読み方:エムルビー・スラッシュ・シー)です。mruby/cはRAM使用量わずか5KB強で動くことから、小さなマイコンであっても、Rubyのもつ生産性・表現力の高さを引き継ぐことができると言います。

具体的にどのような形で実装が進められているのか。今回は、mruby/cの研究開発に携わっている、公益財団法人しまね産業振興財団 しまねソフト研究開発センター 専門研究員の東 裕人さんにお話を伺いました。

プロフィール

東 裕人 (ひがし ひろひと)
公益財団法人しまね産業振興財団
しまねソフト研究開発センター
専門研究員
新卒で島根県内の大手製造業に入社。様々な業務に関わる中でも、システム化や計測の仕事に10年以上携わる。その後、IT企業へと転職した後に、2015年のしまねソフト研究開発センター設立と同時にジョイン。以降、mruby/cの研究開発、及びmruby/cを使った県内企業との実証実験などに従事する。

ものづくりの分野でRubyの価値を証明すべく開発された「mruby/c」

――まずはじめに、東さんが所属されている「しまねソフト研究開発センター」(通称:ITOC、読み方:アイトック)について教えてください。

東:ITOCは、島根県内の企業が新たな製品・サービスを創出するにあたって技術的な課題を解決するために、島根県の外郭団体で中小企業支援を行う公益財団法人しまね産業振興財団内に設立されました。

――官公庁系の団体なんですね!

東:自治体の外郭団体自体はたくさんあると思いますが、中でもITOCが特徴的な点としては、県内の「IT産業」の振興のために手厚い支援制度を設けているということです。IT産業を盛り上げるため助成金の活用以外にも、自分たちで研究開発を伴いながら先端技術支援をしています。その他にも事業創出支援や人材育成支援をしており、企業の主体的な取り組みに向けた新しい支援のあり方を目指して活動しています

私自身は先端技術支援の領域に携わっておりまして、県内企業や国内外の研究者/開発者との交流等を通じて県内の技術者/開発者の育成にも寄与しており、技術者の「研鑽の場」としても機能していると感じています。

――様々な技術領域があると思いますが、ITOCでは特に「IoT」と「機械学習」という2つのテーマに注力して取り組んでいるのですね。東さんは具体的にどんなことをされているのでしょうか?

東:島根県といえば、エンジニア界隈では「Ruby」で有名かと思います。このRubyを使う企業が集積しているという強みを活かすためにも、ものづくりの分野でRubyの価値を証明すべく、「mruby/c」というIoTデバイス向けの開発言語の研究開発や、それを使った県内企業さまとの実証実験などに携わっています。

もともと県内の大手製造業で10年以上、システム化や計測の仕事に携わっていた経験があるので、その経験を買われて2015年のITOC設立と同時にジョインすることになりました。当初からmruby/cの開発を進めています。

――IoTデバイスですか。

東:もっというと、小さなワンチップマイコンでも動作する、組込みシステム向けの軽量Rubyの開発言語です。組込み向けの軽量Ruby自体は、「mruby」というものを福岡県の産学官が連携して開発していまして、そちらはRubyの開発者であるまつもとゆきひろさんがリーダーを務めています。そのmrubyをもっと小さなマイコンで動かしたいということで研究開発してできたのが、mruby/cになります。

小さなリソースのマイコンでもRubyを使えたら、多くの現場が助かる

――そもそも、なぜ小型化したRubyが必要なのでしょうか?

東:一般的なソフトウェア開発環境と異なり、組み込みの世界では小さなリソースであるマイコンを使って製品を組み立てていく必要があります。そこで使われている言語としては、C言語やAssemblerなどの低レイヤー言語になっています。体感としては9割近くがC言語ですかね。

――C言語ですか。COBOLほどではないにせよ、だいぶ古いですね。

東:そうなんです。1970年代に作られた言語なので、当然ながら昨今の言語パラダイムを取り込みにくく、今となっては書くのが難しい「人間にやさしくない言語」に分類されると言えます。ソースコードの可読性が低く、開発生産性も高くない言語なのですが、マイコン上で動かせる高生産性の「人間にやさしい言語」というものがなく、結果としてなかなか書き換えることができないという背景があります。

そのような課題感があって開発が進められたのが、福岡県によるmrubyです。Rubyという比較的新しい設計の言語で組込み開発ができるようにしようというプロジェクトで、人工衛星に採用されるなどの成果をあげています。しかしながら、mrubyが対応できるのはあくまでミドルレベル以上の組込み製品です。ミドルレベルよりさらに小さなリソースのマイコンでも使えたら多くの現場が助かるし、使用するプログラマーも幸せになるだろうということで着手したのが、mrubyをさらに小型化したmruby/cというわけです。

東:現在(取材日時点)、mruby/c 3.2バージョンまでリリースしています。実行開始時にシステムが必要とするRAM使用量が約5.4KBとなっていて、ワンチップマイコンでもある程度の動きができるところまできています。

前バージョンのmruby/c 2.0とmruby/c 3.1のRAM使用量の比較。半分以下の大幅な省メモリ化を達成しており、また実行速度についてもベンチマークの結果、mruby/c 2.0と比較して最大1.8倍の高速化を実現している。ちなみにRuby(CRuby)だと数MB、mrubyでも100KB程度が必要となっていることから、いかにmruby/c 3.1の5KB強がブレイクスルーであるかがわかる。
https://www.s-itoc.jp/support/technical-support/mrubyc/mrubyc-report/3-1_released

――高水準言語が動くRAM容量としては非常に軽いですね! mruby/cは東さんが単独で研究開発されたものなのでしょうか?

東:いえ、研究体制としては九州工業大学 准教授の田中和明先生(大学院情報工学研究院 知的システム工学研究系)と一緒に進めています。田中先生はmruby開発にも携わっておられて、mrubyを作る中でさらに小さいものを動かせそうだと気づかれました。当時私はユーザーとしてmrubyのOSS活動に携わっており、その情報を受けて田中先生と対談させてもらい、たしかにできそうだということでITOCと共同で開発を進めるという流れになりました。

mruby/cの特徴。通信やテキスト処理、ユーザーインターフェースなど、C言語やAssemblerなどの低レイヤー言語では煩雑になってしまう処理の記述性に優れている

製造業の改善で50%や80%という数字を叩き出した

――mruby/cを使った具体的な事例も伺いたいです。

東:たくさんあって選びにくいのですが、例えば工業用ミシンの設計・製造をされているJUKI松江株式会社さまの「工業用ミシンの補助装置」開発の事例は、素晴らしい成果が出たこともあり、特に印象的な事例と感じています。

JUKI松江さまでは、自動車用のシートで使われるような厚革の皮革製品を縫製する工業用ミシンを設計・製造されています。その補助装置に乗っているマイコンボードでmruby/cが採用されました。大半の工場ではシーケンサとかPLCと呼ばれる専用の工業用コンピュータが使われているのですが、その中ではラダー言語という、リレーシーケンス制御の時代から脈々と使われている論理回路を記述するための言語が多く使われています。

――初めて耳にしました。

東:非常にシンプルな制御システムを記述することからスタートした言語で、インプットとしてはスイッチのON/OFFといった簡単なもので、アウトプットもランプをつけるとかモーターをこの速度で回すとか、そういったものになります。その間にある処理としては、リレーと呼ばれるもので計算やコントロールをしているわけですが、現在では実際にリレーが動いていないにも関わらずリレーを模した言語が使われているので、言ってしまえば無理があるわけです。もちろん、メーカーごとに少しずつメンテナンスをすることで無理やり拡張を重ねていっているのですが、とにかく扱いにくいし、メーカーごとにやり方も違う。とはいえそれしか道具がなかったので、仕方なく使っていたという側面があるような状況でした。

――なるほど。もっとカスタマイズ性の高い言語で書けるのであればそれに越したことはない、ということでmruby/cの出番ということですか。

東:そういうことです。目的としては「低コストで柔軟な機能拡張性」を据えて、mruby/cを用いた工業用ミシンの補助装置を開発し、工業用ミシンの縫製機能を制御することになりました。

JUKI松江の工業用ミシンの補助装置は、同社の新規事業「楯縫プロジェクト」として、島根県などが主催するビジネス領域でRubyの特徴を活かして新たなサービスを創造する企業等を対象としたビジネスグランプリ「RubyBizグランプリ2022」で最高賞の大賞受賞。 同様のコンセプトで福岡県等が主催する「第15回 フクオカRuby大賞」でも最高賞の大賞を受賞している

――先ほど「素晴らしい成果が出た」とおっしゃっていましたが、具体的にはどのような成果があったのでしょうか?

東:従来装置よりも縫製不良率を80%低減し、装置コストを25%削減し、さらに装置サイズも50%小型化を実現されています。一般的に製造業の改善というものはせいぜい一桁程度なので、50%とか80%とかは非常に大きな成果だと感じています。携わった身として、誇らしさも感じています。オーダーメイドの工業用ミシンということでロット数は多くないそうですが、まずは中国地方を中心に展開し、顧客のニーズに応えて改善を繰り返しながら販路を広げていきたいとおっしゃられています。

――素晴らしいですね!

東:これとは全然別のアプローチの事例としては、プロテインなどのスポーツ用サプリメントの製造・販売を行っている株式会社アルプロン 島根本店さまでの「食品製造工場のIoT化」プロジェクトがあります。こちらは純粋なIT企業である株式会社日本ハイソフトさまがIoTデバイスを開発し、そこで我々ITOCの方からmruby/cの技術移転をさせていただいたという形になります。

――食品製造工場のIoT化とは、具体的にどういうことでしょうか?

東:アルプロンさまでは、食品安全マネジメントシステムで最も厳格な「FSSC22000」という国際規格を取得されたことに付随して、食品製造環境のモニタリングと衛生情報の記録を自動化したいという要望がありました。それまでは点検・巡回による紙での帳票記録はなされていたのですが、食品安全トレーサビリティの確保や製造現場の衛生環境の向上と併せて改善したいということで、自動化プロジェクトが始まったわけです。

東:こういったマイコン+センサーでIoTを行うプロジェクトの場合、よく使われていたのは、Arduino(読み方:アルデュイーノ)というマイコンボードでした。しかし、ArduinoはC言語をベースとした言語しか使えないということから、モダンな言語に慣れた人材が苦しんでキャッチアップするのは現実的ではない状況でした。

また、自動化にあたってはWi-Fiでデータをクラウドに集約する仕組み想定していたのですが、通信環境は割とトラブルが起きやすいものに分類され、当然LPWAなども使ってはいるものの環境要因に左右されて繋がったり繋がらなかったりします。そういった様々な例外事項に強いシステムを作ろうとすると、古い言語だとかなり大変です。そのような背景から、製造工程でも洗浄度管理が必要なクリーンルームの浮遊粒子測定と、品質保証に直結する装置の稼働率などを自動測定するため、mruby/cを用いたIoTデバイスを試作し、実地検証することになりました。

こちらも様々な成果が出まして、当初目的としていた製造環境と衛生情報の記録自動化はもちろん、従業員のクリーンルーム内における立ち入り回数が大きく減ったり、製造工程や生産履歴といったトレーサビリティが実現したことで品質が向上したりしました。結果、生産性が20%向上し、委託生産の内製化も実現したそうです。あと、これは想像の範囲ですが、慣れ親しんだRubyベースの言語で開発できたことで、開発期間の短縮にも大きく貢献できたと考えています。

オリジナルキーボードの制作でも重宝する

――アルプロンさまのプロジェクトで協業された日本ハイソフトさまのように、純粋なIT企業でも実装できるというのも大きなポイントですね!

東:そうですね。その観点だと、ソフトウェア企業の株式会社テクノプロジェクトさまが自社プロダクトとして開発された、CO2モニタリングIoTシステム「WaKaYo」(読み方:わかーよ)でmruby/cを使っていただいたのも印象的ですね。こちらのプロダクトは、元々は島根県松江市にある松江高専の先生が取り組んでいたものを、コロナ禍をきっかけに産官学でプロジェクト化して実現したものになります。

厚生労働省が推奨するNDIR(非分散型赤外)方式で正確にCO2を測定し、スマートフォンやタブレット端末のアプリに表示する二酸化炭素濃度系。センサーユニットの制御はPIC32マイコンとmruby/cで、アプリの開発はRubyで行っているオールRubyで構築したシステムとなっている

――どのような経緯だったのでしょうか?

東:松江高専の杉山 耕一朗先生という方が空気環境の計測を目的に校内にたくさんのセンサーを置いて、独自にセンサーネットワークを構築していました。当初はmruby/cを使っていなかったのですが、あるタイミングで使いたいという話をいただき、技術提供する運びとなりました。

そんな中コロナ禍に入り、世の中的にも定期的な換気が重要になりました。そこで杉山先生が取り組まれてきた定期的なデータ収集の仕組みが使えるということで、テクノプロジェクトさまと松江高専、それからITOCの三者で共同研究開発を進めていき、WaKaYoリリースにいたりました。

冒頭でお伝えしたとおり、テクノプロジェクトさまではマイコンを含むハードウェアの製造ノウハウを一切持っていませんでした。ですからITOCとしてはmruby/cとセットで、ハードの設計なども合わせて技術移転をしました。Rubyの知識があれば扱えるmruby/cを用いることで、結果として短期間での開発につなげられたと考えています。

――なるほど。たくさん応用先があるわけですね。個人でも何かできそうな気がします。

東:例えばオリジナルキーボードの制作とかは面白いですよ

――オリジナルキーボードですか。

東:実は以前、キーボードの打ち過ぎで手が腱鞘炎(けんしょうえん)になってしまい、高いキーボードを購入して使い始めたら良くなったという経験がありました。既製品ではなくもっと自由にオリジナルキーボードを作ったらさらに生産性が高まるのではということで、昨今ではオリジナルキーボード制作が密かなムーブメントになっているわけですが、そこでもmruby/cが使えます。

先に補足しますと「mrubyファミリー」というものがありまして、ここまでご説明してきたmrubyやmruby/cの他にも、PicoRubyとPRK Firmwareというものがあります。mruby/cはマイコンの中のVMにフォーカスして研究開発しているもので、そのVMのバイトコードをRuby言語を解釈して吐き出すツールが、「mrubyコンパイラ」というものです。この2つは上段下段という2つのレイヤー構造になっていると言えますね。

PicoRubyはmrubyの別実装で、上段のPicoRubyコンパイラと下段のmruby/c VMを統合した構造になっているので、mruby/cインクルーデッドということになります。ちなみにPRK Firmwareは、PicoRubyによる自作キーボード用ファームウェアです。

――ふむふむ。

東:このような関係性を前提にキーボードの話に戻るのですが、キーボードには当然マイコンが入っていて、「このキーはA」「このキーはB」という制御をしています。そのマイコンで動いているプログラムをmrubyで制御しようというのが、PicoRubyでありPRK Firmwareです。

一般的なキーボードは「A」というキーボードを押せばそのまま「A」が流れていきますが、1つのキーを押すことで例えば「Ctrl+C」のような2つのキーを押したことになるようなボタンがあれば、人によっては便利ですよね。そういう制御をRubyで書くことができるので、すごく自由にカスタマイズできるというわけです。もともとはそれもC言語だけしか使えなかったのですが、PicoRubyが作られて、そこからPRK Firmwareが作られて、キーボードの中でもRubyが動かせるのが現実になったということです。

――様々なユースケースがありますね! ここまではmruby/cを使うことのメリットについて教えていただいたのですが、逆に「こういうケースは苦手」というものがあれば教えてください。

東:おっしゃるとおり全ての言語には得て不得手があって、我々もmruby/cですべてのものをリプレイスをしたいとは思っていません。組込みの分野でお伝えすると、これまで脈々と使われていたC言語に加えてさらに高性能な何かを求める際には、あくまでその中の一つの選択肢として、1つ上のレイヤーとして、mruby/cを検討されてみてはいかがでしょうか、というアプローチをとっています。ですから、例えばラダーのON/OFFのような非常に単純なものであれば、わざわざmruby/cを使わなくてもいいと思っています。

そうではなく、昨今の多様化するニーズに応える上で既存のものだけで戦うのに限界がある場合などは、もう少し人間が楽にできるよう、一個上のレイヤーとしてmruby/cを被せていただき、プログラマーがやりたいことを記述するのが大事になってくるんじゃないかなと思っています。

ハードウェアも含めた「トータル」でシステムを設計しないといけない

――mruby/cを扱う上で注意すべきことがあれば教えてください。

東:言語の話から少し離れますが、IoTを実現するとなるとデータ収集などコンピュータとは離れた部分が肝になると思います。そこで測定した値が正しいかどうかについては、また違う視点を持たないといけないと思っています。また言語はハードウェアの上に乗っているものなので、ハードウェア以上のことは基本的にできません。本当のリアルタイム制御などは、当然ながらハードウェアも含めた「トータル」でシステムを設計しないといければならず、言語だけではどうにもならないところがあります。

よく「リアルタイム制御ができないから我々はC言語/Assemblerなどを使っている」という話を展示会とかで伺うのですが、本当にジッタをゼロに近づけたいのであればハードウェアのジッタの方がもっと重要になるので、アプローチとして疑問があるわけです。その辺りを分かった上で言語を選ぶ力が必要になるかなと思っています。この辺りの話については、少し前にQiitaにも書いたので、併せて読んでみてください。

▶︎mruby/cでカスタマイズできる 7seg LED ディスプレイを作りました

――今後、東さんとして特に注力して取り組んでいきたいことは何でしょうか?

東:先ほどからお伝えしているデータ収集がIoTのよくあるユースケースですが、データ収集の先として、今のところは様々なクラウドへのベストプラクティスが示せていないと感じています。AWSもあればGCPもあるし、独自のデータベースサーバもありますよね。IoTシステムって、末端のマイコンからサーバーサイドまで長い道のりがあるので、全体のアーキテクチャを見通した上で「こうやればmruby/cのベストプラクティスですよ」というようなことを言っていきたいと考えています。

――先ほど「純粋なIT企業でも実装できた」というお話を伺いましたが、基本的にはRubyプログラマーであればmruby/cも扱える、と認識して良いでしょうか?

東:はい。Rubyのクラスメソッドを理解して扱える方であれば使っていただけると思います。Rubyと比較するとレイヤーが少し違うかもしれませんが、試しに触ってみるレベルであれば問題はないでしょう。mruby/cはオープンソースとして開発しており、GitHubでソースコードを公開しているので、まずは触ってみていただきたいと思います。

ソースコード:https://github.com/mrubyc/mrubyc

――触ってみて何か不明点があったら、東さんにご連絡する形で大丈夫ですか?

東:はい。島根県内外の企業や業種を問わず、mruby/cの活用や実装を含めてサポートしたいと思います。また、ノウハウや活用事例などを知りたい等のご相談があれば直接お問い合わせください。あと、GitHubのIssueまたはPull Requestも気軽にお寄せいただければと思います。

お問い合わせフォーム: https://www.s-itoc.jp/form/mrubyc/

編集後記

工場萌えの自分としては、非常にテンションの上がるテーマのインタビューでした。私自身、昔とある工場クライアントの稼働率改善にまつわるシステムコンサルティングを担当したことがあるのですが、抜本的な業務フローの変更やハードの入れ替えなどを伴わない形で50%とか80%の改善数値を叩き出すのは、本当にすごいことだと感じますし、このような分野に対しても言語を通じて改善を図ることができる点が目から鱗でした。Rubyのクラスメソッドを理解して扱える人であれば使えるということで、ご自身のRubyスキルをものづくり現場に活かしたいという方は、ぜひGitHub上で触ってみてはいかがでしょうか。

取材/文:長岡 武司

「mruby/c」に触れてみる ダウンロードはこちら

「mruby/c」に関するお問合せフォームはこちら

関連記事