【mruby tutorial 】軽量Ruby普及・実用化促進ネットワーク

トップへPathお知らせPath【mruby tutorial 】軽量Ruby普及・実用化促進ネットワーク
print

2022/3/3
【mruby tutorial 】軽量Ruby普及・実用化促進ネットワーク

mruby tutorial
● mrbgem を使って機能拡張
 
・mrbgemとは
 
mrbgem は、CRuby の gem に相当し、mruby コアに色々な機能(ライブラリ)を追加する仕組みです。ただ、CRuby のように実行時にgemのロードは出来ません。mrbgemはmruby コンパイル時に組み込む必要があり、mruby VM (libmruby.a)の一部となります。このような仕組みでmrubyはファイルシステムがないような組込み機器でも利用可能になっています。
 
mrbgemの特徴
 
・mrbgemはC言語またはmruby (Ruby) で作成されるライブラリ 
・ビルド時に組み込むことでmrubyを機能拡張
・公開されているmrbgemが使用可能(400個超)
 
・mrbgemを探す
 
mgemは公開されているmrbgemの検索やリスト一覧表示などができるmruby向けのgemコマンドです。
 
・mgemのインストール
 
 $ gem install mgem
 
・mrbgemの一覧表示
 
 $ mgem list
 
・mrbgemの情報表示
 
 $ gem install mgem
 
・mrbgemの検索
 
 $ mgem search <search-pattern>
 
・mrbgemの追加の仕方
 
mrbgemをmrubyに組み込むにはビルドの設定に追加します。mruby3.0.0ではビルドの設定ファイルがbuild_config/default.rbに変更されました。
(それ以前のバージョンではbuild_config.rbが使わていました)
 
default.rbの内容(一部)
 
 MRuby::Build.new do |conf|
   # load specific toolchain settings
   conf.toolchain

   # Use mrbgems
   # conf.gem 'examples/mrbgems/ruby_extension_example'
   # conf.gem 'examples/mrbgems/c_extension_example' do |g|
   #   g.cc.flags << '-g' # append cflags in this gem
   # end
   # conf.gem 'examples/mrbgems/c_and_ruby_extension_example'
   # conf.gem :core => 'mruby-eval'
   # conf.gem :mgem => 'mruby-onig-regexp'
   # conf.gem :github => 'mattn/mruby-onig-regexp'
   # conf.gem :git => 'git@github.com:mattn/mruby-onig-regexp.git', :branch => 'master', :options => '-v'

   # include the GEM box
   conf.gembox 'default'
 
ビルドの設定で、mrbgems を参照している部分を見てみると conf.gem に続いて mrbgems のソースコードの場所を指定しています。
# Use mrbgems の行以下にいくつかあるサンプルの通り、指定方法にはローカルのファイルの場所や、git, github のリポジトリを指定出来ます。
 
例えばCRuby互換の正規表現を提供する以下のmrbgem
https://github.com/mattn/mruby-onig-regexp
をホストPC(開発環境)向けのmruby VMにmrbgemを追加したい場合、以下のように書き換えます。
 
 MRuby::Build.new do |conf|

  # include the GEM box
   conf.gembox 'default'
 # use mrbgem
 conf.gem :git => ‘https://github.com/mattn/mruby-onig-regexp’
 ...
 end
以前のbuild_config.rbではdefault.rbのコピーを作ってそこに利用したいgemを追加する方法が推奨されています。
その場合MakefileのMRUBY_CONFIGにビルドスクリプトのパスを渡す必要があります。
 
Makefileの変更
default.rbを使わない場合下記のようにMakefileを変更します。
 
 all:
     cd ../../mruby; rake MRUBY_CONFIG=../yourpath/myconfig.rb clean all
 
 clean:
     rm -f *.lock
 
* MRUBY_CONFIG にビルドスクリプトのパスを渡します。
(相対パス指定の場合はmrubyディレクトリ基準)
* rake clean all を指定すると mruby をリビルドします。
 
*参考 mruby3.0.0のbuild_conf.rbに書かれた注釈
# The default build configuration file was moved to `build_config/default.rb`.

#

# Recommended way to customize the build configuration is:

#  * copy `default.rb` (or any config file) to a new file (e.g. `myconfig.rb`)

#  * edit `myconfig.rb`.

#  * `rake MRUBY_CONFIG=/path/to/myconfig.rb` to compile and test.

#  * or `rake MRUBY_CONFIG=myconfig` if your configuration file is in the `build_config` directory.

#  * (optional) submit your configuration as a pull-request if it's useful for others

raise "The default configuration was moved to `build_config/default.rb`"
 
補足説明
・mrbgemのディレクトリ構成
上記のディレクトリ構成はC及びRubyの両方を使ってmrngemを作成した場合の構成です。Cのみで作成した場合mrblibはないことがありますし、Cでも公開APIがない場合にはincludeディレクトリは含まれません。
 
mrbgem.rakeには、mrbgemの概要、作者およびライセンス情報、公開URLなど、mrbgemに関する情報が記述されています。
 
その他のディレクトリやファイルの説明は下記のとおりです。
 
・mrblibにはRubyで記述されたクラスやメソッドを定義したソースコードが入ります。
・srcにはC言語で記述したクラスやメソッドを定義したソースコードが入ります。
・includeはmrblibやsrcで定義しているクラスやメソッドを宣言したヘッダファイルが含まれます。 mrbgemが提供するAPIを外部から使いたい場合は、 includeディレクトリをイクルードパスに含めます。
・ testにはmrbtestを用いてテストする際に、使用するテストコードが入ります。
・README.mdはmrbgemについて説明したファイルです。説明の内容は、mrbgemにより異なり、README.md自体がない場合もあります。
 
・mrbgem.rakeについて
 
mrbgem.rakeにはmrbgemの簡単な説明が書かれています。
 
exampleGem/mrbgem.rakeのソースコードを以下に示します。
 
 MRuby::Gem::Specification.new('exampleGem') do |spec| 
 spec.license = 'MIT' 
 spec.author  = 'name' 
 spec.summary = 'sample mrbgem' 
 end
 
mrbgem.rakeの主要なオプションは以下の通りです。
 
オプション    内容
spec.license(spec.licenses) ライセンス形態(複数のライセンス形態)
spec.author(spec.authors)  著者名(複数の著者名)
spec.summary mrbgemの概要
spec.version バージョン情報
spec.description 詳細説明
spec.requirements 必要条件に関する説明文
spec.cc.flags Cコンパイラのオプションフラグ
spec.add_dependency  mrbgemの依存関係と追加処理
 
例題のmrbgem.rakeではライセンス形態、著者名、mrbgemの概要が書かれています。
 
ライセンス形態と著者名は書いておいたほうが良いでしょう。できるだけ英語で書くことが推奨されています。その他のオプションは任意です。
mrbgemのバージョンが1.0.0である場合、以下のように書かれてます。
 
 spec.version = '1.0.0' 
 
sped.descriptionには、mrbgemの詳細な説明が書かれています。
 
 spec.description = 'Detailed explanation' 
 
spec.requirementsには、mrbgemを使用するために必要な前提条件が書かれています。
 
 spec.requirements = "External requirements" 
 
コンパイル時にコンパイルオプションを設定する必要がある場合、以下のように書きます。
 
 spec.cc.flags << 'option flag' 
 
'option flag'にCコンパイラに指定するオプションが書かれています。
 
mrbgem内で他のmrbgemのモジュールやクラスを継承している場合や、使用してしている場合には、そのmrbgemに対して依存関係が成り立ちます。
spec.add_dependencyには、そのmrbgemに依存関係がある(使用する)mrbgemが記述されています。
「mruby-io」と依存関係がある場合、以下のように書かれています。
 
 spec.add_dependency('mruby-io') 
 
または
 
 spec.add_conflict 'mruby-io' 
 
spec.add_dependencyが記述されてる場合、その依存関係のあるmrbgemが自動で読み込まれます。
 

mruby

ページの先頭へ戻る