SlideShare a Scribd company logo
mruby 
プログラム言語Rubyによる組込みソト開発 
九州工業大学 
田中 和明 
軽量Rubyフォーラム 
Rubyアソシエーション 
2014年11月20日 
ET2014 スペシャルセッション C-2
講演の内容 
● mruby概要紹介 
– 九州工業大学, 田中 和明 
● mrubyデバッガ紹介 
– 福岡CSK, 三牧 弘司 
● NPO法人 軽量Rubyフォーラムの紹介 
– NPO法人軽量Rubyフォーラム, 石井 宏昌 
● 事例紹介: mrubyを使ったWebサーバの機能拡張 
– 京都大学, 松本 亮介
自己紹介 
● 田中 和明(たなか かずあき) 
● 九州工業大学 情報工学部 機械情報工学科 
● 情報で機械を動かす教育・研究
研究室運営の悩み 
● 組込みソフトウェアの開発環境の習得に 
相当の時間がかかる 
● 研究対象のデバイスごとに環境が異なる 
– 新しいデバイスが登場して,昨年までの開発環境を 
うまく動かせない 
● 本当にやりたいのは,アルゴリズムの実装 
– デバイスに対する要求はそれほど高くない
こんな事ができると嬉しい 
● ハードを作ったので,動かしたい 
– I/Oを簡単に制御したい 
(Arduinoもあるけどもう少し複雑なことをしたい) 
● ロボットを動かしたい 
– モータ制御が目的ではなく, 
センサ取得〜アクチュエータ駆動の仕組みを作りたい 
● 試行錯誤しながらシステムを開発したい 
● システムを設計したい 
– アルゴリズムを書きたい
組込みシステムの課題 
● 組込みシステムはソフト+ハードで構成される 
● 近年の高機能化・高付加価値化により, 
ソフトウェアは複雑・大規模になっている 
● コストの問題 
● 開発期間の問題
組み込みシステム開発のイメージ(1) 
ソフトウェア+ハードウェア 
● 開発者はソフト+ハードの両方を知っていること! 
● (例) エンジンコントローラの実装 
– エンジンのサイクルに同期した制御 
– 厳密なタイミングによる制御 
確かに, 
ソフト+ハードを 
熟知している 
必要がある
組み込みシステム開発のイメージ(2) 
ソフトウェアの領域が広がっている 
● (例) NC工作機械のUIを変更する 
– 複雑な変更ではない 
– ライン全体を考慮するものではない 
– 現状はこのようなソフトウェアでも相当なコストがかかる 
(C言語で記述し,他の部分と密に結合する) 
● 本当にやりたいのは一部分であるが, 
システム全体の変更を伴う 
多くは部分的な 
開発(変更)で 
十分である
組込みシステムの開発の 
効率を高めたい 
● 「エンジンコントローラの実装」 
● 「NC工作機械のUI変更」 
● 後者のソフトウェア開発の効率を高めたい
なぜRubyを使うのか? 
● 可読性が高い 
– プログラムが書きやすい 
– プログラムが読みやすい 
– 抽象化により,アルゴリズムが明確になる 
● プログラムの行数が少ない 
– 不具合の埋め込みが少なくなる
ちょっとだけRubyのコード(1) 
#include <stdio.h> 
int main(void) 
{ 
int i; 
int n = 0; 
for( i=1 ; i<=100 ; i++ ){ 
n = n + i; 
} 
printf("sum = %dn", n); 
return 0; 
} 
n = 0 
for i in 1..100 do 
n = n + i 
end 
puts "sum = #{n}" 
n = (1..100).inject(:+) 
puts "sum = #{n}"
ちょっとだけRubyのコード(2) 
● 配列をソートして,値が大きい順に3つ出力する 
def top3(ary) 
p ary.sort.reverse[0..2] 
end 
top3( [2,4,6,1,3,5] ) 
top3( [2.1, 4.2, 6.3, 1.4, 3.5, 5.6] ) 
top3( ["apple", "orange", "banana", "melon", "kiwi", "grape" 
] )
参考 
● ISO/IEC 30170 の Introduction 
Ruby is an object-oriented scripting 
language designed to be developer-friendly, 
productive and intuitive. 
● JIS X 3017 の 序文 
Ruby言語は,開発者の利便性を高めることを最大の目的 
として設計されており,言語仕様自体の簡潔さ及び処理 
系実装の簡便さより,アプリケーション開発における開 
発効率及び直感的な動作記述が優先されている.
Trends
Trends, growth
Rubyを組込み機器で使いたい 
しかし, 
● 従来のRubyは多くのメモリが必要 
– Hello, world でも数メガ 
● OS,ファイルシステムが必要 
– RTOSでは動かすのも一苦労 
● ソースコード丸見え
mruby(軽量Ruby) 
● 経済産業省 
平成22年度 地域イノベーション創出研究開発事業 
「軽量Rubyを用いた組込みプラットフォームの研究・開発」 
● 福岡CSK,ネットワーク応用通信研究所,九州工業大学 
● 東芝情報システム,福岡県 
● 成果 
– mruby (オープンソースとして公開) 
– mrubyの適用領域についての調査 
– mrubyチップ化の検討(FPGAによる試作)
軽量Ruby 完成しました 
● 「軽量Rubyを用いた組込みプラットフォームの研 
究・開発」 
– 事業計画書では,16MBで動作するソフトウェア 
– できたものは,400KBで動作した! 
– 予想していたよりも,幅広く使えそう 
● オープンソースとして公開
mrubyが目指すもの 
● 組込みソフトのうち, 
簡単に変更できる(変更したい)部分に適用する 
– 試作 
– カスタマイズ 
– ユーザインターフェース 
– 通信関連 
● 限られた資源で動作する 
– メモリ 
● さまざまな環境で動作する
Ruby/mrubyの仕組み 
Rubyプログラムmrubyプログラム 
プログラムの解析・解釈 
プログラムの実行 
プログラムの解析・解釈 
mrubyバイトコード 
プログラムの実行 
すべて実行環境で 
処理される 
多くの資源が必要 
開発環境 
実行環境
mrubyのツール 
mrubyプログラム 
プログラムの解析・解釈 
mrubyバイトコード 
プログラムの実行 
mrubyコンパイラ 
mruby VM(バーチャルマシン)
mrubyVM 
● mrubyVMが 
コンパイル済みのバイトコードを逐次実行する 
mrubyアプリケーション 
(バイトコード) 
mrubyVM 
ドライバなど 
ハードウェア 
ターゲットデバイス 
mrubyアプリケーション 
(ソースコード) 
mruby 
コンパイラ 
mrubyアプリケーション 
(バイトコード) 
開発環境
mruby VMの特徴 
● さまざまな環境で動作する 
– Cコンパイラが動けば良い 
→ 組込み環境のほとんどすべてで使える 
– 機能の拡張が容易 
→ ハードウェアに依存する機能を追加できる
mruby VM 拡張の例 
● mruby学習キット,ILC社(広島) 
EAPL-Trainer mruby 
開発するmrubyアプリケーション 
mrubyVM 
(オープンソース) 
GUI部品液晶 
ドライバ 
マイコン用 
ドライバ 
ルネサス社 
SAKURAボード 
mrubyVMの拡張 
ILC社が 
持っている 
技術 
mrubyによるマイコン開発が可能となる
研究成果の一部(1) 
led_red = 0 
while true do 
lum = 0 
while lum <= 255 do 
pwm led_red, lum 
delay adc() 
lum += 1 
end 
lum = 0 
while lum <= 255 do 
pwm led_red, 255-lum 
delay adc() 
lum += 1 
end 
end 
mrubyアプリケーション 
(バイトコード) 
mrubyVM 
ドライバなど 
ハードウェア 
pwm 
delay 
adc
研究成果の一部(2) 
start 
loop do 
trace 
right 
trace 
left 
trace 
right 
end 
mrubyアプリケーション 
(バイトコード) 
mrubyVM 
ドライバなど 
ハードウェア 
start 
trace 
right 
left
ちょっと待て!? 
mrubyアプリケーション 
(バイトコード) 
mrubyVM 
ドライバなど 
ハードウェア 
ターゲットデバイス 
mrubyアプリケーション 
(ソースコード) 
mruby 
コンパイラ 
mrubyアプリケーション 
(バイトコード) 
開発環境 
start 
trace 
right 
left 
コンパイルできるのか? 
デバッグできるのか?
答え 
● コンパイルできるのか? 
– コンパイル時は,関数呼び出しの解決をしない 
– 実行時に関数名で解決する 
● デバッグできるのか? 解1 
– デバッガ 
● デバッグできるのか? 解2 
– PC用のVMを作っておく 
– VMにデバイスと同じ関数を用意して,実行する
GET mruby ! 
● NPO法人 軽量Rubyフォーラム から 
http://forum.mruby.org/ 
http://forum.mruby.org/download/source/mruby-1.1.0.tar.gz 
● GitHub から 
https://github.com/mruby-Forum/mruby

More Related Content

What's hot

組込みシステムでIoTへの扉を開こう! mruby on LEGO Mindstorms EV3 (R)
組込みシステムでIoTへの扉を開こう! mruby on LEGO Mindstorms EV3 (R)組込みシステムでIoTへの扉を開こう! mruby on LEGO Mindstorms EV3 (R)
組込みシステムでIoTへの扉を開こう! mruby on LEGO Mindstorms EV3 (R)
Takehiko YOSHIDA
 
Feature Store in DRIVE CHART
Feature Store in DRIVE CHARTFeature Store in DRIVE CHART
Feature Store in DRIVE CHART
emakryo
 
Rustで3D graphics programming
Rustで3D graphics programmingRustで3D graphics programming
Rustで3D graphics programming
KiyotomoHiroyasu
 
Feature StoreをRustで実装した話
Feature StoreをRustで実装した話Feature StoreをRustで実装した話
Feature StoreをRustで実装した話
emakryo
 
mruby VM を調べてみた話
mruby VM を調べてみた話mruby VM を調べてみた話
mruby VM を調べてみた話
kishima7
 
RustによるGPUプログラミング環境
RustによるGPUプログラミング環境RustによるGPUプログラミング環境
RustによるGPUプログラミング環境
KiyotomoHiroyasu
 
Rubyとプログラミング言語の潮流
Rubyとプログラミング言語の潮流Rubyとプログラミング言語の潮流
Rubyとプログラミング言語の潮流
Kazuhiko Kato
 
Pythonおじさんのweb2py挑戦記
Pythonおじさんのweb2py挑戦記Pythonおじさんのweb2py挑戦記
Pythonおじさんのweb2py挑戦記
Yoshiyuki Nakamura
 
真Intermediate languageのキホン
真Intermediate languageのキホン真Intermediate languageのキホン
真Intermediate languageのキホン
Kouji Matsui
 
アプリケーションエンジニアのためのクラウドインフラ再入門 (2/3)
アプリケーションエンジニアのためのクラウドインフラ再入門 (2/3)アプリケーションエンジニアのためのクラウドインフラ再入門 (2/3)
アプリケーションエンジニアのためのクラウドインフラ再入門 (2/3)
Takashi Sogabe
 
CONBU API の開発
CONBU API の開発CONBU API の開発
CONBU API の開発
TAKANO Mitsuhiro
 
はんなりPython #45
はんなりPython #45はんなりPython #45
はんなりPython #45
hiroya akita
 
コモディティL3SW/ルータでオープンなSDNを実現しよう
コモディティL3SW/ルータでオープンなSDNを実現しようコモディティL3SW/ルータでオープンなSDNを実現しよう
コモディティL3SW/ルータでオープンなSDNを実現しよう
Takashi Sogabe
 
開発合宿 Hello world
開発合宿 Hello world開発合宿 Hello world
開発合宿 Hello worldYohei Sugasawa
 
第32回信号処理シンポジウム「Raspberry PiとROSを 使ったロボットシステム」
第32回信号処理シンポジウム「Raspberry PiとROSを使ったロボットシステム」第32回信号処理シンポジウム「Raspberry PiとROSを使ったロボットシステム」
第32回信号処理シンポジウム「Raspberry PiとROSを 使ったロボットシステム」
Ryuichi Ueda
 
My portfolio
My portfolioMy portfolio
My portfolio
ssuserc2210b
 
関数プロキシを使って REST APIっぽくを使ってみる
関数プロキシを使って REST APIっぽくを使ってみる関数プロキシを使って REST APIっぽくを使ってみる
関数プロキシを使って REST APIっぽくを使ってみる
Noriaki Sakata
 
カンファレンスネットワークの作り方
カンファレンスネットワークの作り方カンファレンスネットワークの作り方
カンファレンスネットワークの作り方
KOIWA hidekazu
 
mruby IoTプラットフォーム
mruby IoTプラットフォームmruby IoTプラットフォーム
mruby IoTプラットフォーム
Hiromasa Ishii
 

What's hot (20)

さくルビー.Net誕生
さくルビー.Net誕生さくルビー.Net誕生
さくルビー.Net誕生
 
組込みシステムでIoTへの扉を開こう! mruby on LEGO Mindstorms EV3 (R)
組込みシステムでIoTへの扉を開こう! mruby on LEGO Mindstorms EV3 (R)組込みシステムでIoTへの扉を開こう! mruby on LEGO Mindstorms EV3 (R)
組込みシステムでIoTへの扉を開こう! mruby on LEGO Mindstorms EV3 (R)
 
Feature Store in DRIVE CHART
Feature Store in DRIVE CHARTFeature Store in DRIVE CHART
Feature Store in DRIVE CHART
 
Rustで3D graphics programming
Rustで3D graphics programmingRustで3D graphics programming
Rustで3D graphics programming
 
Feature StoreをRustで実装した話
Feature StoreをRustで実装した話Feature StoreをRustで実装した話
Feature StoreをRustで実装した話
 
mruby VM を調べてみた話
mruby VM を調べてみた話mruby VM を調べてみた話
mruby VM を調べてみた話
 
RustによるGPUプログラミング環境
RustによるGPUプログラミング環境RustによるGPUプログラミング環境
RustによるGPUプログラミング環境
 
Rubyとプログラミング言語の潮流
Rubyとプログラミング言語の潮流Rubyとプログラミング言語の潮流
Rubyとプログラミング言語の潮流
 
Pythonおじさんのweb2py挑戦記
Pythonおじさんのweb2py挑戦記Pythonおじさんのweb2py挑戦記
Pythonおじさんのweb2py挑戦記
 
真Intermediate languageのキホン
真Intermediate languageのキホン真Intermediate languageのキホン
真Intermediate languageのキホン
 
アプリケーションエンジニアのためのクラウドインフラ再入門 (2/3)
アプリケーションエンジニアのためのクラウドインフラ再入門 (2/3)アプリケーションエンジニアのためのクラウドインフラ再入門 (2/3)
アプリケーションエンジニアのためのクラウドインフラ再入門 (2/3)
 
CONBU API の開発
CONBU API の開発CONBU API の開発
CONBU API の開発
 
はんなりPython #45
はんなりPython #45はんなりPython #45
はんなりPython #45
 
コモディティL3SW/ルータでオープンなSDNを実現しよう
コモディティL3SW/ルータでオープンなSDNを実現しようコモディティL3SW/ルータでオープンなSDNを実現しよう
コモディティL3SW/ルータでオープンなSDNを実現しよう
 
開発合宿 Hello world
開発合宿 Hello world開発合宿 Hello world
開発合宿 Hello world
 
第32回信号処理シンポジウム「Raspberry PiとROSを 使ったロボットシステム」
第32回信号処理シンポジウム「Raspberry PiとROSを使ったロボットシステム」第32回信号処理シンポジウム「Raspberry PiとROSを使ったロボットシステム」
第32回信号処理シンポジウム「Raspberry PiとROSを 使ったロボットシステム」
 
My portfolio
My portfolioMy portfolio
My portfolio
 
関数プロキシを使って REST APIっぽくを使ってみる
関数プロキシを使って REST APIっぽくを使ってみる関数プロキシを使って REST APIっぽくを使ってみる
関数プロキシを使って REST APIっぽくを使ってみる
 
カンファレンスネットワークの作り方
カンファレンスネットワークの作り方カンファレンスネットワークの作り方
カンファレンスネットワークの作り方
 
mruby IoTプラットフォーム
mruby IoTプラットフォームmruby IoTプラットフォーム
mruby IoTプラットフォーム
 

Similar to ET2014資料: mruby プログラム言語Rubyによる組込みソト開発

Devsumi2013 Ruby開発者のみなさん、mrubyで楽しく快適な組み込みアプリ開発を始めませんか?
Devsumi2013 Ruby開発者のみなさん、mrubyで楽しく快適な組み込みアプリ開発を始めませんか?Devsumi2013 Ruby開発者のみなさん、mrubyで楽しく快適な組み込みアプリ開発を始めませんか?
Devsumi2013 Ruby開発者のみなさん、mrubyで楽しく快適な組み込みアプリ開発を始めませんか?
Takashi Sogabe
 
デブサミ2013【15-E-2】Ruby開発者のみなさん、mrubyで楽しく快適な組み込みアプリ開発を始めませんか?
デブサミ2013【15-E-2】Ruby開発者のみなさん、mrubyで楽しく快適な組み込みアプリ開発を始めませんか?デブサミ2013【15-E-2】Ruby開発者のみなさん、mrubyで楽しく快適な組み込みアプリ開発を始めませんか?
デブサミ2013【15-E-2】Ruby開発者のみなさん、mrubyで楽しく快適な組み込みアプリ開発を始めませんか?
Developers Summit
 
組込み向けスクリプト言語mrubyをEV3で動かしてみよう
組込み向けスクリプト言語mrubyをEV3で動かしてみよう組込み向けスクリプト言語mrubyをEV3で動かしてみよう
組込み向けスクリプト言語mrubyをEV3で動かしてみよう
Takuya Azumi
 
VMを改めて学んで見る
VMを改めて学んで見るVMを改めて学んで見る
VMを改めて学んで見る
kishima7
 
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
infinite_loop
 
Rubyプログラミング教育に対する取り組みと事例紹介
Rubyプログラミング教育に対する取り組みと事例紹介Rubyプログラミング教育に対する取り組みと事例紹介
Rubyプログラミング教育に対する取り組みと事例紹介
Yasushi Ishikawa
 
ロボットシステムのつくりかた 〜Robot Operating Systemというアプローチ〜
ロボットシステムのつくりかた 〜Robot Operating Systemというアプローチ〜ロボットシステムのつくりかた 〜Robot Operating Systemというアプローチ〜
ロボットシステムのつくりかた 〜Robot Operating Systemというアプローチ〜
Hideki Takase
 
mruby/c適用期待分野20160329
mruby/c適用期待分野20160329mruby/c適用期待分野20160329
mruby/c適用期待分野20160329
shimane-itoc
 
IBM Rational Team Concertに触れてみた
IBM Rational Team Concertに触れてみたIBM Rational Team Concertに触れてみた
IBM Rational Team Concertに触れてみた
You&I
 
ゼロからのプログラミングRails講座 Codeanywhere版
ゼロからのプログラミングRails講座 Codeanywhere版ゼロからのプログラミングRails講座 Codeanywhere版
ゼロからのプログラミングRails講座 Codeanywhere版
DIVE INTO CODE Corp.
 
Mbed祭り 2017@春の新横浜 20170225 竹之下
Mbed祭り 2017@春の新横浜 20170225 竹之下Mbed祭り 2017@春の新横浜 20170225 竹之下
Mbed祭り 2017@春の新横浜 20170225 竹之下
Koyo Takenoshita
 
2014 0228 OSC-Spring Tokyo NETMF
2014 0228 OSC-Spring Tokyo NETMF2014 0228 OSC-Spring Tokyo NETMF
2014 0228 OSC-Spring Tokyo NETMF
Atomu Hidaka
 
RubyConfの話の続きのおはなし
RubyConfの話の続きのおはなしRubyConfの話の続きのおはなし
RubyConfの話の続きのおはなし
yamanekko
 
2017年度未踏事業最終成果報告
2017年度未踏事業最終成果報告2017年度未踏事業最終成果報告
2017年度未踏事業最終成果報告
Daichi Teruya
 
.NET Coreから概観する.NETのOSSへの取り組み
.NET Coreから概観する.NETのOSSへの取り組み.NET Coreから概観する.NETのOSSへの取り組み
.NET Coreから概観する.NETのOSSへの取り組み
Kouji Matsui
 
分散環境におけるDocker とオーケストレーション
分散環境におけるDocker とオーケストレーション分散環境におけるDocker とオーケストレーション
分散環境におけるDocker とオーケストレーション
Masahito Zembutsu
 
Agileツール適合化分科会(構成管理・ビルドツール)
Agileツール適合化分科会(構成管理・ビルドツール)Agileツール適合化分科会(構成管理・ビルドツール)
Agileツール適合化分科会(構成管理・ビルドツール)masanori kataoka
 
苫小牧高専 ソフトウェアテクノロジー部 Rubyで遊ぼう 1
苫小牧高専 ソフトウェアテクノロジー部 Rubyで遊ぼう 1苫小牧高専 ソフトウェアテクノロジー部 Rubyで遊ぼう 1
苫小牧高専 ソフトウェアテクノロジー部 Rubyで遊ぼう 1
Takuya Mukohira
 
無駄にNeo4jを使っている日々
無駄にNeo4jを使っている日々無駄にNeo4jを使っている日々
無駄にNeo4jを使っている日々
Toshi Harada
 
20221226_TITECH_lecture_ishizaki_public.pdf
20221226_TITECH_lecture_ishizaki_public.pdf20221226_TITECH_lecture_ishizaki_public.pdf
20221226_TITECH_lecture_ishizaki_public.pdf
Kazuaki Ishizaki
 

Similar to ET2014資料: mruby プログラム言語Rubyによる組込みソト開発 (20)

Devsumi2013 Ruby開発者のみなさん、mrubyで楽しく快適な組み込みアプリ開発を始めませんか?
Devsumi2013 Ruby開発者のみなさん、mrubyで楽しく快適な組み込みアプリ開発を始めませんか?Devsumi2013 Ruby開発者のみなさん、mrubyで楽しく快適な組み込みアプリ開発を始めませんか?
Devsumi2013 Ruby開発者のみなさん、mrubyで楽しく快適な組み込みアプリ開発を始めませんか?
 
デブサミ2013【15-E-2】Ruby開発者のみなさん、mrubyで楽しく快適な組み込みアプリ開発を始めませんか?
デブサミ2013【15-E-2】Ruby開発者のみなさん、mrubyで楽しく快適な組み込みアプリ開発を始めませんか?デブサミ2013【15-E-2】Ruby開発者のみなさん、mrubyで楽しく快適な組み込みアプリ開発を始めませんか?
デブサミ2013【15-E-2】Ruby開発者のみなさん、mrubyで楽しく快適な組み込みアプリ開発を始めませんか?
 
組込み向けスクリプト言語mrubyをEV3で動かしてみよう
組込み向けスクリプト言語mrubyをEV3で動かしてみよう組込み向けスクリプト言語mrubyをEV3で動かしてみよう
組込み向けスクリプト言語mrubyをEV3で動かしてみよう
 
VMを改めて学んで見る
VMを改めて学んで見るVMを改めて学んで見る
VMを改めて学んで見る
 
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
 
Rubyプログラミング教育に対する取り組みと事例紹介
Rubyプログラミング教育に対する取り組みと事例紹介Rubyプログラミング教育に対する取り組みと事例紹介
Rubyプログラミング教育に対する取り組みと事例紹介
 
ロボットシステムのつくりかた 〜Robot Operating Systemというアプローチ〜
ロボットシステムのつくりかた 〜Robot Operating Systemというアプローチ〜ロボットシステムのつくりかた 〜Robot Operating Systemというアプローチ〜
ロボットシステムのつくりかた 〜Robot Operating Systemというアプローチ〜
 
mruby/c適用期待分野20160329
mruby/c適用期待分野20160329mruby/c適用期待分野20160329
mruby/c適用期待分野20160329
 
IBM Rational Team Concertに触れてみた
IBM Rational Team Concertに触れてみたIBM Rational Team Concertに触れてみた
IBM Rational Team Concertに触れてみた
 
ゼロからのプログラミングRails講座 Codeanywhere版
ゼロからのプログラミングRails講座 Codeanywhere版ゼロからのプログラミングRails講座 Codeanywhere版
ゼロからのプログラミングRails講座 Codeanywhere版
 
Mbed祭り 2017@春の新横浜 20170225 竹之下
Mbed祭り 2017@春の新横浜 20170225 竹之下Mbed祭り 2017@春の新横浜 20170225 竹之下
Mbed祭り 2017@春の新横浜 20170225 竹之下
 
2014 0228 OSC-Spring Tokyo NETMF
2014 0228 OSC-Spring Tokyo NETMF2014 0228 OSC-Spring Tokyo NETMF
2014 0228 OSC-Spring Tokyo NETMF
 
RubyConfの話の続きのおはなし
RubyConfの話の続きのおはなしRubyConfの話の続きのおはなし
RubyConfの話の続きのおはなし
 
2017年度未踏事業最終成果報告
2017年度未踏事業最終成果報告2017年度未踏事業最終成果報告
2017年度未踏事業最終成果報告
 
.NET Coreから概観する.NETのOSSへの取り組み
.NET Coreから概観する.NETのOSSへの取り組み.NET Coreから概観する.NETのOSSへの取り組み
.NET Coreから概観する.NETのOSSへの取り組み
 
分散環境におけるDocker とオーケストレーション
分散環境におけるDocker とオーケストレーション分散環境におけるDocker とオーケストレーション
分散環境におけるDocker とオーケストレーション
 
Agileツール適合化分科会(構成管理・ビルドツール)
Agileツール適合化分科会(構成管理・ビルドツール)Agileツール適合化分科会(構成管理・ビルドツール)
Agileツール適合化分科会(構成管理・ビルドツール)
 
苫小牧高専 ソフトウェアテクノロジー部 Rubyで遊ぼう 1
苫小牧高専 ソフトウェアテクノロジー部 Rubyで遊ぼう 1苫小牧高専 ソフトウェアテクノロジー部 Rubyで遊ぼう 1
苫小牧高専 ソフトウェアテクノロジー部 Rubyで遊ぼう 1
 
無駄にNeo4jを使っている日々
無駄にNeo4jを使っている日々無駄にNeo4jを使っている日々
無駄にNeo4jを使っている日々
 
20221226_TITECH_lecture_ishizaki_public.pdf
20221226_TITECH_lecture_ishizaki_public.pdf20221226_TITECH_lecture_ishizaki_public.pdf
20221226_TITECH_lecture_ishizaki_public.pdf
 

ET2014資料: mruby プログラム言語Rubyによる組込みソト開発

  • 1. mruby プログラム言語Rubyによる組込みソト開発 九州工業大学 田中 和明 軽量Rubyフォーラム Rubyアソシエーション 2014年11月20日 ET2014 スペシャルセッション C-2
  • 2. 講演の内容 ● mruby概要紹介 – 九州工業大学, 田中 和明 ● mrubyデバッガ紹介 – 福岡CSK, 三牧 弘司 ● NPO法人 軽量Rubyフォーラムの紹介 – NPO法人軽量Rubyフォーラム, 石井 宏昌 ● 事例紹介: mrubyを使ったWebサーバの機能拡張 – 京都大学, 松本 亮介
  • 3. 自己紹介 ● 田中 和明(たなか かずあき) ● 九州工業大学 情報工学部 機械情報工学科 ● 情報で機械を動かす教育・研究
  • 4. 研究室運営の悩み ● 組込みソフトウェアの開発環境の習得に 相当の時間がかかる ● 研究対象のデバイスごとに環境が異なる – 新しいデバイスが登場して,昨年までの開発環境を うまく動かせない ● 本当にやりたいのは,アルゴリズムの実装 – デバイスに対する要求はそれほど高くない
  • 5. こんな事ができると嬉しい ● ハードを作ったので,動かしたい – I/Oを簡単に制御したい (Arduinoもあるけどもう少し複雑なことをしたい) ● ロボットを動かしたい – モータ制御が目的ではなく, センサ取得〜アクチュエータ駆動の仕組みを作りたい ● 試行錯誤しながらシステムを開発したい ● システムを設計したい – アルゴリズムを書きたい
  • 6. 組込みシステムの課題 ● 組込みシステムはソフト+ハードで構成される ● 近年の高機能化・高付加価値化により, ソフトウェアは複雑・大規模になっている ● コストの問題 ● 開発期間の問題
  • 7. 組み込みシステム開発のイメージ(1) ソフトウェア+ハードウェア ● 開発者はソフト+ハードの両方を知っていること! ● (例) エンジンコントローラの実装 – エンジンのサイクルに同期した制御 – 厳密なタイミングによる制御 確かに, ソフト+ハードを 熟知している 必要がある
  • 8. 組み込みシステム開発のイメージ(2) ソフトウェアの領域が広がっている ● (例) NC工作機械のUIを変更する – 複雑な変更ではない – ライン全体を考慮するものではない – 現状はこのようなソフトウェアでも相当なコストがかかる (C言語で記述し,他の部分と密に結合する) ● 本当にやりたいのは一部分であるが, システム全体の変更を伴う 多くは部分的な 開発(変更)で 十分である
  • 9. 組込みシステムの開発の 効率を高めたい ● 「エンジンコントローラの実装」 ● 「NC工作機械のUI変更」 ● 後者のソフトウェア開発の効率を高めたい
  • 10. なぜRubyを使うのか? ● 可読性が高い – プログラムが書きやすい – プログラムが読みやすい – 抽象化により,アルゴリズムが明確になる ● プログラムの行数が少ない – 不具合の埋め込みが少なくなる
  • 11. ちょっとだけRubyのコード(1) #include <stdio.h> int main(void) { int i; int n = 0; for( i=1 ; i<=100 ; i++ ){ n = n + i; } printf("sum = %dn", n); return 0; } n = 0 for i in 1..100 do n = n + i end puts "sum = #{n}" n = (1..100).inject(:+) puts "sum = #{n}"
  • 12. ちょっとだけRubyのコード(2) ● 配列をソートして,値が大きい順に3つ出力する def top3(ary) p ary.sort.reverse[0..2] end top3( [2,4,6,1,3,5] ) top3( [2.1, 4.2, 6.3, 1.4, 3.5, 5.6] ) top3( ["apple", "orange", "banana", "melon", "kiwi", "grape" ] )
  • 13. 参考 ● ISO/IEC 30170 の Introduction Ruby is an object-oriented scripting language designed to be developer-friendly, productive and intuitive. ● JIS X 3017 の 序文 Ruby言語は,開発者の利便性を高めることを最大の目的 として設計されており,言語仕様自体の簡潔さ及び処理 系実装の簡便さより,アプリケーション開発における開 発効率及び直感的な動作記述が優先されている.
  • 16. Rubyを組込み機器で使いたい しかし, ● 従来のRubyは多くのメモリが必要 – Hello, world でも数メガ ● OS,ファイルシステムが必要 – RTOSでは動かすのも一苦労 ● ソースコード丸見え
  • 17. mruby(軽量Ruby) ● 経済産業省 平成22年度 地域イノベーション創出研究開発事業 「軽量Rubyを用いた組込みプラットフォームの研究・開発」 ● 福岡CSK,ネットワーク応用通信研究所,九州工業大学 ● 東芝情報システム,福岡県 ● 成果 – mruby (オープンソースとして公開) – mrubyの適用領域についての調査 – mrubyチップ化の検討(FPGAによる試作)
  • 18. 軽量Ruby 完成しました ● 「軽量Rubyを用いた組込みプラットフォームの研 究・開発」 – 事業計画書では,16MBで動作するソフトウェア – できたものは,400KBで動作した! – 予想していたよりも,幅広く使えそう ● オープンソースとして公開
  • 19. mrubyが目指すもの ● 組込みソフトのうち, 簡単に変更できる(変更したい)部分に適用する – 試作 – カスタマイズ – ユーザインターフェース – 通信関連 ● 限られた資源で動作する – メモリ ● さまざまな環境で動作する
  • 20. Ruby/mrubyの仕組み Rubyプログラムmrubyプログラム プログラムの解析・解釈 プログラムの実行 プログラムの解析・解釈 mrubyバイトコード プログラムの実行 すべて実行環境で 処理される 多くの資源が必要 開発環境 実行環境
  • 21. mrubyのツール mrubyプログラム プログラムの解析・解釈 mrubyバイトコード プログラムの実行 mrubyコンパイラ mruby VM(バーチャルマシン)
  • 22. mrubyVM ● mrubyVMが コンパイル済みのバイトコードを逐次実行する mrubyアプリケーション (バイトコード) mrubyVM ドライバなど ハードウェア ターゲットデバイス mrubyアプリケーション (ソースコード) mruby コンパイラ mrubyアプリケーション (バイトコード) 開発環境
  • 23. mruby VMの特徴 ● さまざまな環境で動作する – Cコンパイラが動けば良い → 組込み環境のほとんどすべてで使える – 機能の拡張が容易 → ハードウェアに依存する機能を追加できる
  • 24. mruby VM 拡張の例 ● mruby学習キット,ILC社(広島) EAPL-Trainer mruby 開発するmrubyアプリケーション mrubyVM (オープンソース) GUI部品液晶 ドライバ マイコン用 ドライバ ルネサス社 SAKURAボード mrubyVMの拡張 ILC社が 持っている 技術 mrubyによるマイコン開発が可能となる
  • 25. 研究成果の一部(1) led_red = 0 while true do lum = 0 while lum <= 255 do pwm led_red, lum delay adc() lum += 1 end lum = 0 while lum <= 255 do pwm led_red, 255-lum delay adc() lum += 1 end end mrubyアプリケーション (バイトコード) mrubyVM ドライバなど ハードウェア pwm delay adc
  • 26. 研究成果の一部(2) start loop do trace right trace left trace right end mrubyアプリケーション (バイトコード) mrubyVM ドライバなど ハードウェア start trace right left
  • 27. ちょっと待て!? mrubyアプリケーション (バイトコード) mrubyVM ドライバなど ハードウェア ターゲットデバイス mrubyアプリケーション (ソースコード) mruby コンパイラ mrubyアプリケーション (バイトコード) 開発環境 start trace right left コンパイルできるのか? デバッグできるのか?
  • 28. 答え ● コンパイルできるのか? – コンパイル時は,関数呼び出しの解決をしない – 実行時に関数名で解決する ● デバッグできるのか? 解1 – デバッガ ● デバッグできるのか? 解2 – PC用のVMを作っておく – VMにデバイスと同じ関数を用意して,実行する
  • 29. GET mruby ! ● NPO法人 軽量Rubyフォーラム から http://forum.mruby.org/ http://forum.mruby.org/download/source/mruby-1.1.0.tar.gz ● GitHub から https://github.com/mruby-Forum/mruby