2022/3/3
【mruby tutorial 】軽量Ruby普及・実用化促進ネットワーク
● 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のインストール | |||||||||||||||||
|
|||||||||||||||||
・mrbgemの一覧表示 | |||||||||||||||||
|
|||||||||||||||||
・mrbgemの情報表示 | |||||||||||||||||
|
|||||||||||||||||
・mrbgemの検索 | |||||||||||||||||
|
|||||||||||||||||
・mrbgemの追加の仕方 | |||||||||||||||||
mrbgemをmrubyに組み込むにはビルドの設定に追加します。mruby3.0.0ではビルドの設定ファイルがbuild_config/default.rbに変更されました。 (それ以前のバージョンではbuild_config.rbが使わていました) |
|||||||||||||||||
default.rbの内容(一部) | |||||||||||||||||
|
|||||||||||||||||
ビルドの設定で、mrbgems を参照している部分を見てみると conf.gem に続いて mrbgems のソースコードの場所を指定しています。 # Use mrbgems の行以下にいくつかあるサンプルの通り、指定方法にはローカルのファイルの場所や、git, github のリポジトリを指定出来ます。 |
|||||||||||||||||
例えばCRuby互換の正規表現を提供する以下のmrbgem https://github.com/mattn/mruby-onig-regexp をホストPC(開発環境)向けのmruby VMにmrbgemを追加したい場合、以下のように書き換えます。 |
|||||||||||||||||
|
|||||||||||||||||
以前のbuild_config.rbではdefault.rbのコピーを作ってそこに利用したいgemを追加する方法が推奨されています。 その場合MakefileのMRUBY_CONFIGにビルドスクリプトのパスを渡す必要があります。 |
|||||||||||||||||
Makefileの変更 default.rbを使わない場合下記のようにMakefileを変更します。 |
|||||||||||||||||
|
|||||||||||||||||
* 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のソースコードを以下に示します。 | |||||||||||||||||
|
|||||||||||||||||
mrbgem.rakeの主要なオプションは以下の通りです。 | |||||||||||||||||
オプション 内容 | |||||||||||||||||
|
|||||||||||||||||
例題のmrbgem.rakeではライセンス形態、著者名、mrbgemの概要が書かれています。 | |||||||||||||||||
ライセンス形態と著者名は書いておいたほうが良いでしょう。できるだけ英語で書くことが推奨されています。その他のオプションは任意です。 mrbgemのバージョンが1.0.0である場合、以下のように書かれてます。 |
|||||||||||||||||
|
|||||||||||||||||
sped.descriptionには、mrbgemの詳細な説明が書かれています。 | |||||||||||||||||
|
|||||||||||||||||
spec.requirementsには、mrbgemを使用するために必要な前提条件が書かれています。 | |||||||||||||||||
|
|||||||||||||||||
コンパイル時にコンパイルオプションを設定する必要がある場合、以下のように書きます。 | |||||||||||||||||
|
|||||||||||||||||
'option flag'にCコンパイラに指定するオプションが書かれています。 | |||||||||||||||||
mrbgem内で他のmrbgemのモジュールやクラスを継承している場合や、使用してしている場合には、そのmrbgemに対して依存関係が成り立ちます。 spec.add_dependencyには、そのmrbgemに依存関係がある(使用する)mrbgemが記述されています。 「mruby-io」と依存関係がある場合、以下のように書かれています。 |
|||||||||||||||||
|
|||||||||||||||||
または | |||||||||||||||||
|
|||||||||||||||||
spec.add_dependencyが記述されてる場合、その依存関係のあるmrbgemが自動で読み込まれます。 | |||||||||||||||||