mruby組み込み活用テクニック(1) ―― mrubyのビルド・ツールRakeを知る
●Rakefileの基礎
mrubyのRakefileに当たる前に,まずは基礎をざっと流しておきたいと思います.仮に図1のようなプロジェクトがあったとします.
図1 サンプル・プロジェクト

これをMakefileで書くと,リスト2のようになります.これと同等の動作をするRakefileは,リスト3のようになります.
リスト2 Makefileの例
main.o: main.c hello.c
hello.o: hello.c
hello: main.o hello.o
clean:
-rm -f hello *.o
リスト3 Rakefileの例(その1)
CLEAN.include %w(hello *.o)
task :default => ['hello']
file 'main.o' => ['main.c', 'hello.h'] do
sh 'gcc -c -o main.o main.c'
end
file 'hello.o' => ['hello.c'] do
sh 'gcc -c -o hello.o hello.c'
end
file 'hello' => ['main.o', 'hello.o'] do
sh 'gcc -o hello main.o hello.o'
end
require文があったり,do~endでくくっているところが見られたりと,Ruby言語を感じさせるところはあります.しかし,Ruby言語の知識が無くてもおおむね理解できそう,という気分になるのではないでしょうか.
リスト3は,さらに短くすることもできます(リスト4).
リスト4 Rakefileの例(その2)
CLEAN.include %w(hello *.o)
rule '.o' => ['.c'] do |task|
sh "gcc -c -o #{task.name} #{task.source}"
end
task :default => ['hello']
file 'main.o' => ['main.c', 'hello.h']
file 'hello.o' => ['hello.c']
file 'hello' => ['main.o', 'hello.o']
#{task.name}のあたりで,Ruby言語っぽさがにじみ出てはいます.しかし,全体としては,さらにリスト2に近い表記になったかと思います.このように,Rakeは,実はRuby言語でありながらも,Ruby言語っぽさを可能な限り隠しています.
* * *
今回は,mrubyのビルド環境を理解するために必要な背景のみを概観しました.次回からは,mrubyのソース・ツリーを参照しながら,ビルド環境を説明していきます.
また,本家のmrubyは,機器組み込みだけでなくアプリケーション組み込みに用いることも想定しているため,機器組み込みでのみ求められる機能については採用が遅れる傾向にあります.ビルド環境についても,同様の傾向があります.そこで,mrubyからの分家であるmonami-ya.mrbを例題に,機器組み込みに必要な機能追加の方法についても説明する予定です.
むらなか・まさき